Identifica l'app di servizio avviata da PowerShell
-
10-12-2019 - |
Domanda
Sto usando il seguente script PowerShell in speranze di identificare le applicazioni di servizio avviate da parte del server.
Spot Controllo dei risultati mostra qualcosa di inaspettato.Ad esempio, so che il connettore di Lotus Notes viene interrotto su tutti i server nella mia fattoria, ma lo script lo restituisce.
Quali altre proprietà aggiuntive devono testare per essere sicuri di vedere gli stessi esatti risultati come mostrato in Central Admin "Gestisci servizi su Server" Pagina?
[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 '|'
. Soluzione
Cosa c'è di sbagliato semplicemente usando
Get-SPServiceInstance | select typename, status, server | Export-Csv test.csv
per ottenere i dati?
Altri suggerimenti
Quando si utilizza PowerShell per ottenere le istanze di servizio, sembrano tutti tornare online, come descrivi.Tuttavia, se lo facciamo in un metodo C #, ritorna correttamente.Ecco cosa ho fatto per farli tornare correttamente:
$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
.
È possibile utilizzare il metodo per ottenere la raccolta di istanze e quindi eseguire il filtraggio, l'output, ecc.