Identifier Commencé l'Application du Service par Powershell
-
10-12-2019 - |
Question
Je suis en utilisant le script Powershell suivant dans l'espoir d'identifier Commencé les applications de service par le serveur.
Spot de vérification des résultats montre quelque chose d'inattendu.Par exemple, je sais Connecteur Lotus Notes est Arrêté sur tous les serveurs dans ma ferme, mais le script renvoie.
Quelles sont les autres propriétés supplémentaires dois-je tester pour être sûr que je vois exactement les mêmes résultats, comme indiqué dans la Central Admin "Gérer les Services sur les Serveurs" à la page?
[System.Collections.ArrayList]$ReportInfo = New-Object System.Collections.ArrayList($null)
$servers = (get-spfarm).servers
foreach ($server in $servers)
{
foreach($service in $server.serviceinstances)
{
if($service.TypeName -eq "Lotus Notes Connector"){
Write-Host stop;
}
if ($service.status = "Online")
{
Write-Host "Server" $server.Name "`tService: " $service.TypeName;
$servicInfo = @{}
$servicInfo.Server = $service.Server.Name;
$servicInfo.Service = $service.TypeName;
$ReportInfo.Add((New-Object PSObject -Property $servicInfo))>$null;
}
}
}
Write-Host "Exporting CSV"
$ReportInfo | Export-Csv "Services.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'
La solution
Quel est le problème avec simplement à l'aide de
Get-SPServiceInstance | select typename, status, server | Export-Csv test.csv
pour obtenir les données?
Autres conseils
Lorsque vous utilisez PowerShell pour obtenir les instances de service, ils semblent tous revenir en ligne, comme vous le décrivez.Cependant, si nous le faisons dans une méthode C #, il revient correctement.Voici ce que j'ai fait pour les faire revenir correctement:
$Assem = (
"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
)
$Source = @"
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using System.Collections.Generic;
using System;
namespace ReportingStuff
{
public static class Servers
{
public static List<SPServiceInstance> GetInstances()
{
List<SPServiceInstance> items = new List<SPServiceInstance>();
foreach (SPServer server in SPFarm.Local.Servers)
{
foreach (SPServiceInstance instance in server.ServiceInstances)
{
if ((!instance.SystemService && !(instance.GetType().FullName.Contains("SPAdministrationServiceInstance"))) && (!(instance is SPTimerServiceInstance) && (server.ServiceInstances.GetValue<SPTimerServiceInstance>() != null)))
items.Add(instance);
}
}
return items;
}
}
}
"@
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp
$output = [ReportingStuff.Servers]::GetInstances()
Write-Output $output
Vous pouvez utiliser la méthode pour obtenir votre collecte d'instances, puis faire votre filtrage, votre sortie, etc.