2017-01-25 36 views
0

我想檢查幾個特定服務器的特定服務,並希望輸出顯示在相同的格式化表。我只能創建多個表格,或者只顯示最後一張我想要格式化的表格。我的意圖是在同一張桌子上展示所有內容。使格式表正常工作與多個來源

Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1 
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 | 
    Format-Table -Property MachineName, Status, Name, DisplayName -Auto 

如何將SERVER1和SERVER2包含在同一個格式化表中?上面的例子只會顯示SERVER2的格式化表格嗎?

我試過

其他的辦法是

Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1 | 
    Format-Table -Property MachineName, Status, Name, DisplayName -Auto 
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 | 
    Format-Table -Property MachineName, Status, Name, DisplayName -Auto 

,但這種方式有創建兩個不同的表,而不是隻在一個所有信息像我想。

我需要檢查六個不同服務器上的不同服務,但只有兩個服務器,我認爲這足以說明我在這個腳本中遇到的困難。

+0

(GET-服務 「ServiceA」, 「ServiceB」, 「ServiceC」 -computername SERVER1)+(GET-服務」 ServiceD「,」ServiceE「,」ServiceF「 - 計算機名SERVER2)|英尺會工作。 –

回答

1

如果你希望他們都出現在一個表中,您需要發送的結果所有在同一時間到Format-Table。如果你打電話Format-Table兩次,你會得到兩個單獨的表。

幸運的是,PowerShell使命令的結果很容易存儲在一個變量中,然後再使用它。

你需要做的是使一個變量來保存結果,然後所有的Get-Service指令存儲在它的內部,像這樣:

#take the output and store it in $services 
$services = get-service bits,winrm -computername ServerA 
#add the output of the next to $services as well 
$services += get-service AdobeARMservice,ALG -computername ServerB 

#finally, make one big table to display it all 
$services |Format-Table -Property MachineName, Status, Name, DisplayName -auto 

MachineName Status Name   DisplayName        
----------- ------ ----   -----------        
ServerA  Running bits   Background Intelligent Transfer Service 
ServerA  Running winrm   Windows Remote Management (WS-Management) 
ServerB  Running AdobeARMservice Adobe Acrobat Update Service    
ServerB  Stopped ALG    Application Layer Gateway Service  

你去得遠了這個兔子洞之前,請記住,Format-Table僅用於查看控制檯中的內容。例如,您不能拿出使用FT製作的表格,然後將其導出爲.csv格式。如果你只是在控制檯中查看它就可以了,這應該起作用。

+1

'$ s'不應該是'$ services'嗎? – sodawillow

+0

是的,你是對的!忘了改變這個張貼在這裏。 – FoxDeploy

+0

使用你的例子,我可以顏色代碼的輸出?像紅色停止,綠色運行?如果是這樣,怎麼樣?對不起,如果這是一個很不錯的問題,但我真的在這裏採取嬰兒步驟。 – biocoma

2

你可以做這樣的:

# create array 
$services = @() 

# add items to array 
$services += Get-Service spooler 
$services += Get-Service wsearch 

# format array 
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize 

或者這樣:

# create list 
$services = New-Object System.Collections.ArrayList 

# add items to list 
$services.Add($(Get-Service spooler)) | Out-Null 
$services.Add($(Get-Service wsearch)) | Out-Null 

# display list 
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize 
+0

我已經完成了你的第一個例子,它按預期工作:) 我可以問你另一個問題嗎?我怎樣才能輸出顏色,紅色停止,綠色運行,使用你給的第一個例子? – biocoma

+0

PS控制檯並非真正用於這種方式。相反,我建議您將結果導出到Excel或HTML,在那裏您可以格式化一些東西。 – sodawillow

1

相反填充陣列或ArrayList中的,可以簡單地使用一子表達式,以兩個輸出整理到一個單一格式,表:

$(
    get-service "ServiceA", "ServiceB", "ServiceC" -computername SERVER1 
    get-service "ServiceD", "ServiceE", "ServiceF" -computername SERVER2 
) | Format-Table -Property MachineName, Status, Name, DisplayName -auto 
2

你的例子不產生預期的效果,因爲對於第一個示例只有第二個Get-Service的輸出進入Format-Table,對於第二個示例,創建了兩個單獨的表。

如果你看看在Get-Service cmdlet的documentation你會發現,無論是-Name-ComputerName一個字符串數組作爲輸入,所以如果你要檢查,你可以簡單地做所有計算機相同的服務是這樣的:

$servers = 'SERVER1', 'SERVER2' 
$services = 'ServiceA', 'ServiceB', 'ServiceC' 

Get-Service $services -ComputerName $servers | 
    Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize 

如果你想在每臺服務器上檢查不同的服務我有一個哈希表

$services = @{ 
    'SERVER1' = 'ServiceA', 'ServiceB', 'ServiceC' 
    'SERVER2' = 'ServiceD', 'ServiceE', 'ServiceF' 
} 

到服務器上的服務映射和運行Get-Service在一個ForEach-Object循環,如下:

$services.Keys | ForEach-Object { 
    Get-Service $services[$_] -ComputerName $_ 
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize 

或這樣的:

$services.GetEnumerator() | ForEach-Object { 
    Get-Service $_.Value -ComputerName $_.Name 
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize