2013-07-21 24 views

risposta

9

Se tutti hanno lo stesso nome o nome visualizzato, è possibile farlo in un unico comando. In caso contrario, è necessario eseguire 3 comandi.

Se tutti hanno lo stesso nome o la visualizzazione del nome:

Get-Service -ComputerName server-a, server-b, server-c -Name MyService | 
    Select Name, MachineName, Status 

Se hanno nomi diversi o nomi di visualizzazione:

farei questo -

@{ 
    'server-a' = 'service-a' 
    'server-b' = 'service-b' 
    'server-c' = 'service-c' 
}.GetEnumerator() | ForEach-Object { 
    Get-Service -ComputerName $_.Name -Name $_.Value 
} | Select Name, MachineName, Status 

per l'output un file di testo usa ... | Set-Content ~\Documents\Service_Status.txt dove ... è uno dei precedenti.

Nota: l'account deve disporre dei privilegi per interrogare le macchine remote.

+1

Come si specifica una credenziale alternativa se il proprio account non dispone dell'autorizzazione? – Dan

1

Ci sono diversi modi per raggiungere questo obiettivo. Sto usando un hash dei valori poiché hai menzionato che il server per il servizio di mappatura è sempre uno a uno.

$svrHash = @{"SERVER-01"="winmgmt";"SERVER-02"="Wecsvc"} 
$svrHash.Keys 
    | ForEach-Object {Get-Process -ComputerName $_ -Name $svrHash[$_] -Ea SilentlyContinue} 
    | Select ProcessName 
    | Out-File C:\Scripts\test.txt 

È necessario utilizzare il nome del servizio e non il nome .exe.

+0

Grazie ha funzionato. Ma ho sbagliato a spiegare il mio requisito. Sono compiti e NON servizi. Se apro Task Manager, dovrei essere in grado di vedere 3 diverse attività in 3 server diversi. – Ireshad

+0

Quindi, sono processi e non servizi? Sostituisci Get-Service con Get-Process e dovrebbe funzionare. – ravikanth

+0

Sì, ha funzionato. Il registro contiene troppi dettagli come Handles NPM (K), PM (K), WS (K), VM (M), CPU (s), Id, Nome processo. È possibile avere solo 2 colonne come output (Nome processo e Running (Sì o No)) Grazie – Ireshad

Problemi correlati