2012-12-15 59 views
0

好吧,我想讓這個腳本工作,而不是連續擊中相同的計算機,並無法讓它工作。我不認爲這是做這件事的最好方法,如果您有任何建議,請謝謝。無論如何,似乎有一個問題,第6行「如果(!$ Succssful.Contains($計算機)){」它不會在我發射一個錯誤,而是結束腳本per-maturealy。我試圖刪除「!」但沒有像我預期的那樣運氣。Powershell與.contains功能的字符串問題

$Computers = "TrinityTechCorp" 
$HotFixes = Get-Content HotFixes.csv 

While ($Successful -AND $Successful.count -ne $Computers.count) { 
    ForEach ($Computer in $Computers) { 
     IF (!$Succssful.Contains($Computer)) { 
      If (Test-Connection $Computer) { 
       $Comparison = get-hotfix -ComputerName $Computer | Select -expand HotFixID 
       ForEach ($HotFix in $HotFixes) { 
       IF ($Comparison -NotLike "*$HotFix*") { 
        Write-Host "$Computer missing $HotFix" 
       } 
       $Successful += $Computer 
       } 
      } 
     } 
    } 
} 
+0

如果你有很多計算機來運行它,我會建議包括Invoke-Command在所有計算機上並行運行它。請記住將hotfix.csv放在公共網絡共享上。調用命令-Computername test1,test2 -ScriptBlock {你的腳本}會將所有的寫主機消息返回到一個單獨的輸出中,你可以將它保存在一個文件或其他文件中。 –

+1

btw。什麼是while($ successful)不是..不成功的一個字符串[] ?.此外,由於成功是機器列表,因此您希望將「$ successful + = $ computer」移到修復程序循環之外(因爲現在計算機名稱會添加到每個修補程序上) - 測試 –

+0

其中是$成功「的定義?我想我們錯過了你的一些腳本。 –

回答

0

此行

While ($Successful -AND $Successful.count -ne $Computers.count) { 

不能評價爲$ true。 .count - 不存在的變量($ Successful)的屬性爲$ null,對於字符串也是如此(因爲您只指定一臺計算機,它不是數組)。

要強制Powershell返回「真實」數量的項目,請改爲使用​​和@($Computers).count。這會給你1,即使$ Computers沒有被定義爲一個數組。所以,用變量取代,您的線路被解釋爲

While ($null -AND $null.count -ne $null) { 

在PowerShell中3,你可以閱讀here,這已不再是這種情況。