2014-05-12 56 views
0

該腳本讀取計算機名稱的.TXT文件。然後檢查Windows Update是否設置爲自動或手動;計算機名稱和更新類型將被導出爲CSV格式。起初,它只是出口最後一臺電腦,而且它是類型。我做了一些研究,看到創建一個對象來保存名稱和類型,然後將該對象添加到數組中會起作用。但是,將數組導出到CSV會導致與數組相關的有趣數據,而不是計算機名稱和類型。最重要的是,我在控制檯預輸出時打印出數組,並且它看起來是最後一臺計算機及其列出的類型的9倍,計算機數量是我閱讀的.TXT文件中的數量。我知道export-CSV現在有一個附加參數可以解決這個問題,但是我們在辦公室裏有更多的PS 1.0和2.0,並且需要它來處理這些版本。將foreach循環的結果導出到CSV

clear-host 

$item = new-object PSObject 
$list = @() 
$c=Get-Credential 
$a = gc "c:\Scripts\pcList.txt" 

ForEach ($b in $a) 
{ 
    $pcName = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -credential $c -ErrorAction SilentlyContinue | 
select-object name, 
@{N="System Name";E={$_.Systemname}} 
    $name = $pcName.'System Name' 
    $item | Add-Member NoteProperty Name $name -Force 

    $pcType = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -   credential $c -ErrorAction SilentlyContinue | 
select-object name, @{N="Startup Type";E={$_.StartMode}} 
    $type = $pcType.'Startup Type' 
    $item | Add-Member NoteProperty StartupType $type -Force  

    $list += $item 
} 
Write-Host $list 

export-csv -Path "c:\Scripts\pcListCSV" -inputobject $list -notype 

回答

2

好的,一些事情。這個劇本看起來相當不錯,所有的事情都考慮到了,而且有一些小小的調整,它應該可以正常工作。讓我們看看這個有點不同的東西,只是一次構建對象,而不是添加noteproperties。

另外,我們只需要1次調用GWMI(Get-WMIObject的簡寫)。我認爲這對你會更好。首先,讓GWMI調用一次意味着我們必須在做出一件事情時選擇不止一件事情。既然你真的做了兩次完全相同的調用,並且每次都從它中選擇兩個不同的東西,這種說法是有道理的。我們將跳過在select中定義事件,並讓$pcName存儲來自GWMI調用的所有數據。不過,首先我們要確保$pcName中沒有舊數據,以確保我們不會重複。

clear-host 

$item = new-object PSObject 
$list = @() 
$c=Get-Credential 
$a = gc "c:\Scripts\pcList.txt" 

ForEach ($b in $a) 
{ 
    if(Get-Variable pcName -ea SilentlyContinue){Remove-Variable pcName} 
    $pcName = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -credential $c -ErrorAction SilentlyContinue 

好的,現在我們創建對象,我們直接將它添加到數組中。這裏是我們將Name和StartupType等東西定義爲對象屬性的地方,所以當您稍後顯示數組時,它會顯示每個項目的這兩個屬性。之後,我們將關閉ForEach循環,並將列表顯示在屏幕上,並將其傳遞給Export-CSV以保存結果。

$list += New-Object PSObject -Property @{ 
     Name = $pcName.SystemName 
     StartupType = $pcName.StartMode 
    } 
} 
$list 
$list | Export-Csv "C:\Scripts\pcList.CSV" -notype 

所以,這不檢查,以確保該系統是在網上,或做任何錯誤檢查這樣的,但如果這與你OK,然後我想這應該做的正是你所需要的。

+0

完美的工作!我真的很感激這個幫助,在這一天裏我一直在抨擊這個問題,只是想不出這個問題。謝謝! – TeegsD