2016-07-18 96 views
0

我想從多臺計算機獲取磁盤信息並輸出它。powershell將WMI查詢結果合併到一個表中

這工作:

foreach ($args in $file) { 
    get-WmiObject win32_logicaldisk -Credential $cre -ComputerName $args -Filter "Drivetype=3" | 
    ft SystemName,DeviceID,VolumeName,@{Label="Total Size";Expression={$_.Size/1gb -as [int] }},@{Label="Free Size";Expression={$_.freespace/1gb -as [int] }} -autosize 
} 

但輸出看起來是這樣的:

SystemName DeviceID VolumeName Total Size Free Size 
---------- -------- ---------- ---------- --------- 
Computer1 C:  OS    100  31 
Computer1 D:  DATA    500  200 



SystemName DeviceID VolumeName Total Size Free Size 
---------- -------- ---------- ---------- --------- 
Computer2 C:  OS    110  48 
Computer2 D:  DATA    500  201 



SystemName DeviceID VolumeName Total Size Free Size 
---------- -------- ---------- ---------- --------- 
Computer3 C:  OS    100  38 
Computer3 D:  DATA    500  260 

我想他們結合使輸出看起來是這樣的:

SystemName DeviceID VolumeName Total Size Free Size 
---------- -------- ---------- ---------- --------- 
Computer1 C:  OS    100  31 
Computer1 D:  DATA    500  200 
Computer2 C:  OS    110  48 
Computer2 D:  DATA    500  201 
Computer3 C:  OS    100  38 
Computer3 D:  DATA    500  260 

我已經看着創建一個新的對象,但我不確定如何將WMI查詢結果添加到同一標題下的循環中的該對象。

回答

0

ForEach-Object cmdlet的更換foreach環和移動Format-Tableft)對管道的盡頭:

$file |ForEach-Object { 
    Get-WmiObject win32_logicaldisk -Credential $cre -ComputerName $_ -Filter "Drivetype=3" 
} |Format-Table SystemName,DeviceID,VolumeName,@{Label="Total Size";Expression={$_.Size/1gb -as [int] }},@{Label="Free Size";Expression={$_.freespace/1gb -as [int] }} -autosize 

(也不要使用$args這樣的,它是一個automatic variable


如果你打算使用從WMI輸出後來在腳本中,使用Select-Object代替Format-Table

$LogicalDisks = $file |ForEach-Object { 
    Get-WmiObject win32_logicaldisk -Credential $cre -ComputerName $_ -Filter "Drivetype=3" 
} |Select-Object SystemName,DeviceID,VolumeName,@{Label="Total Size";Expression={$_.Size/1gb -as [int] }},@{Label="Free Size";Expression={$_.freespace/1gb -as [int] }} 

# Do some stuff with $LogicalDisks 
# ... 

# Time to display the disks to the user 
$LogicalDisks |Format-Table -AutoSize 
+1

多一點,爲什麼這就像它的作用:當你需要顯示

然後使用Format-Table。在OP中使用的'ForEach'循環將分別處理和輸出每個項目到自己執行的'Format-Table'。管道中的ForEach-Object函數,並且它在單獨處理每個項目時,它收集管道下一部分的所有輸出的結果,並且執行'Format-Table' cmdlet的一次執行所有的數據。 – TheMadTechnician

+0

這是完美的,謝謝。我相信我明白For-EachObject的工作原理 – ElectronicDrug

+0

另外,我相信我正確使用了$ args。進一步在我沒有包括的腳本是'$ defaultServerList ='computers.txt''和'$ file = get-Content $ defaultServerList' – ElectronicDrug

相關問題