Elencare tutti i servizi con il relativo stato in una farm SharePoint tramite PowerShell
Questo script PowerShell permette di elencare tutti i servizi di SharePoint presenti su ogni server con il relativo stato:
Il risultato è una tabella con il tipo di servizio (TypeName) e una serie di colonne, tante quanti sono i server della farm.
A questi campi si aggiunge la colonna NeedsUpgrade che diventa True se almeno un server ha lo stato impostato a true.
In ultimo la colonna Service con il nome del servizio.
In alternativa a out-string si può usare Out-GridView che permette di visualizzare il risultato in tabella dentro una finestra windows:
PowerShell
if($null -eq (Get-PSSnapin | ?{$_.Name -eq "Microsoft.SharePoint.PowerShell"})) {
Write-Host "Loading...";
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
$serverNamePrefix = ""; # eventuale prefisso per le colonne con lo stato nei server
$si = Get-SPServiceInstance
# trovo i server che ospitano i servizi
$uniqueServer = $si | select @{Label="ServerName";Expression={$_.Server.Name}} -Unique | Sort-Object ServerName
#$uniqueServer
# creo un array per salvare lo stato dei servizi
$resultTmp = @() #array
$si | ForEach-Object {
$item = $_;
$obj = $resultTmp | Where-Object {$_.TypeName -eq $item.TypeName};
if ($null -eq $obj) {
# non esiste creo la entry (hash table)
$obj = @{
TypeName = $item.TypeName;
NeedsUpgrade = $false;
Service = $item.Service.ToString();
}
# aggiungo una proprietà per ogni server presente nella farm
$uniqueServer | ForEach-Object {
$obj[$serverNamePrefix + $_.ServerName]= "*none*"
}
$resultTmp += $obj
}
# verifico se almeno su un server il servizio deve essere aggiornato
if($obj.NeedsUpgrade -eq $false -and $item.NeedsUpgrade -eq $true){
$obj.NeedsUpgrade = $true;
}
# assegno lo stato sullo specifico server (Disabled / Online / *none*)
$obj[$serverNamePrefix + $_.Server.Name] = "$($item.status)" #"$($item.status)$(if ($obj.NeedsUpgrade -eq $true) { '*' } else {''})";
}
# converto in oggetto PSObject
$result = @()
$resultTmp | ForEach-Object {
$result += New-Object -TypeName PSObject -Property $_
}
# determino l'ordine di visualizzazione delle property nella select-object
$selectProps = @("TypeName");
$uniqueServer | ForEach-Object { $selectProps += $serverNamePrefix + $_.ServerName; }
$selectProps += "NeedsUpgrade"
$selectProps += "Service"
# ritorno il risultato
$result | Sort-Object TypeName | Select-Object -Property $selectProps | Format-Table -autosize | out-string
A questi campi si aggiunge la colonna NeedsUpgrade che diventa True se almeno un server ha lo stato impostato a true.
In ultimo la colonna Service con il nome del servizio.
Text
TypeName SP2010-IDX SP2010-FEA SP2010-FEB NeedsUpgrade Service
-------- ------------- -------------- -------------- ------------ -------
Access Database Service Disabled Online Online True AccessServerWebService
Application Registry Service Disabled Online Online True ApplicationRegistryService
Business Data Connectivity Service Online Online Online True BdcService
Central Administration Disabled Online Online True SPWebService Name=WSS_Administration
Claims to Windows Token Service Disabled Online Online True SPWindowsTokenService Name=c2wts
Document Conversions Launcher Service Disabled Disabled Disabled True LauncherService Name=DCLauncher14
Document Conversions Load Balancer Service Disabled Disabled Disabled True LoadBalancerService Name=DCLoadBalancer14
Excel Calculation Services Disabled Online Online True ExcelServerWebService
Lotus Notes Connector Disabled Disabled Disabled True NotesWebService
Managed Metadata Web Service Disabled Online Disabled True MetadataWebService
Microsoft SharePoint Foundation Incoming E-Mail Disabled Online Online True SPIncomingEmailService
Microsoft SharePoint Foundation Sandboxed Code Service Disabled Online Disabled True SPUserCodeService Name=SPUserCodeV4
Microsoft SharePoint Foundation Subscription Settings Service Disabled Disabled Disabled True SPSubscriptionSettingsService
Microsoft SharePoint Foundation Web Application Disabled Online Online True SPWebService
Microsoft SharePoint Foundation Workflow Timer Service Disabled Online Online True SPWorkflowTimerService Name=spworkflowtimerv4
PerformancePoint Service Disabled Online Online True BIMonitoringService
PowerPoint Service Online Online Online True PowerPointWebService
Search Query and Site Settings Service Disabled Online Online True SearchQueryAndSiteSettingsService
Secure Store Service Disabled Online Online True SecureStoreService
SharePoint Foundation Help Search *none* Online *none* True SPSearchService Name=SPSearch4
SharePoint Foundation Search Disabled *none* Disabled True SPSearchService Name=SPSearch4
SharePoint Server Search Online Online Online True SearchService Name=OSearch14
User Profile Service Online Online Online True UserProfileService
User Profile Synchronization Service Disabled Online Disabled True ProfileSynchronizationService Name=FIMSynchronizationService
Visio Graphics Service Disabled Online Disabled True VisioGraphicsService
Web Analytics Data Processing Service Disabled Disabled Disabled True WebAnalyticsService Name=WebAnalyticsService
Web Analytics Web Service Disabled Disabled Online True WebAnalyticsWebService
Word Automation Services Disabled Online Online True WordService
Word Viewing Service Online Online Online True ConversionService
Su ogni server il servizio può essere Online (attivo/started) o Disabled (disabilitato/stopped), ma a volte non è proprio presente su quel server *none*.
Questo risultato equivale alla visualizzazione che si ha sulla Central Administration alla pagina /_admin/Server.aspx, ma in più mostra una visione di insieme con lo stato del servizio su tutti i server contemporaneamente.In alternativa a out-string si può usare Out-GridView che permette di visualizzare il risultato in tabella dentro una finestra windows:
PowerShell
# ritorno il risultato in finestra
$result | Sort-Object TypeName | Select-Object -Property $selectProps | Out-GridView