2015-02-10 60 views
0

我有以下的檢索特定的註冊表值..遠程PowerShell從大量的服務器的

$output = @() 
$servers =Get-Content "C:\Windows\System32\List3.txt" 

foreach ($server in $servers) 
{ 
    trap [Exception] {continue} 
    Import-Module PSRemoteRegistry 
    $key="SOFTWARE\Microsoft\'Microsoft Antimalware'\'Signature Updates'" 

    $regkey=Get-RegBinary -ComputerName $server -Key $Key -Value SignatuesLastUpdated 

    #$regkey=(Get-Item HKLM:\SOFTWARE\Microsoft\'Microsoft Antimalware'\'Signature Updates').getValue('SignaturesLastUpdated') 

    #$regkey=[datetime]::ParseExact("01/02/03", "dd/MM/yy", $null) | Export-csv -path c:\temp\avinfo.csv -append 

    #$regkey 
} 

$output | Select $server , $Regkey | Export-Csv c:\temp\avinfo.csv -NoTypeInformation 

我認爲這是相當接近,但需要不工作 - 任何人都可以告訴我,我在這裏做什麼錯 - 讀了很多,並設法得到這個,只需要幫助完成。

感謝

+0

^歡迎使用StackOverflow:如果您發佈代碼,XML或數據示例,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器上的「代碼示例」按鈕(「{}」)工具欄以很好的格式和語法突出顯示它! – 2015-02-10 15:15:19

+1

'SignatuesLastUpdated'應該是'SignaturesLastUpdated' – meatspace 2015-02-10 15:24:38

+3

你說*不能按需要工作* ...什麼不工作,它應該如何? – arco444 2015-02-10 15:24:50

回答

1

好......所以有很多需要改爲得到這個工作。發佈後我會經常更新答案。

$servers = Get-Content "C:\Windows\System32\List3.txt" 
$key="SOFTWARE\Microsoft\Microsoft Antimalware\Signature Updates" 

$servers | ForEach-Object{ 
    $server = $_ 
    Try{ 
     Get-RegBinary -ComputerName $server -Key $Key -Value SignatuesLastUpdated -ErrorAction Stop 
    } Catch [exception]{ 
     [pscustomobject]@{ 
      ComputerName = $server 
      Data = "Unable to retrieve data" 
     } 
    } 
} | Select ComputerName,@{Label=$value;Expression={If(!($_.Data -is [string])){[System.Text.Encoding]::Ascii.GetBytes($_.data)}Else{$_.Data}}} | Export-Csv c:\temp\avinfo.csv -NoTypeInformation 

上面的代碼會做什麼更符合您的意圖。拿出列表,併爲每個項目從該服務器獲取關鍵數據。如果在獲取該數據時出現問題,我們會輸出一個自定義對象,說明我們可以在輸出中指出是否存在問題。在空中的部分是你想如何將二進制數據導出到文件。按照它的意思,它應該創建一個以空格分隔的字節串。

,你確實有應該指出的問題,

  1. 無需導入模塊服務器。將該呼叫移出循環
  2. 您已聲明變量$output,但在循環過程中不會填充該變量。這對於foreach結構很重要。最後,你向csv發送空數組。我的答案不需要它,因爲它只是使用標準輸出。
  3. 作爲@Meatspace指出你在這裏度過了一個錯字:SignatuesLastUpdated
  4. Get-RegBinary默認情況下不創建它們由try/catch塊需要終止錯誤。新增-ErrorAction Stop。不要認爲你的代碼trap [Exception] {continue}會發現任何東西。
  5. 您在$key中的單引號可能阻止了路徑被解析。你試圖逃避空間,只需要將整個字符串放在一組引號中即可實現。
  6. Select雖然Select可以使用他們在那裏的變量,以基本形式來選擇屬性名稱。總之,你有什麼錯誤。
+0

感謝你 - 根據你的評論嘗試腳本(在糾正了我原本打錯的錯誤之後) - 它跑了,幾乎所有的結果都是「無法檢索數據」...然而有幾個人給了「System.Byte {} 「我猜測這是一個積極的結果,但沒有提供實際的數據。 – 2015-02-11 16:17:49

+0

我認爲遠程註冊表服務在我查看的大多數服務器都處於關閉狀態,因此請轉到下一個方法。 – 2015-02-11 16:20:16

+0

@DominicLambert FYI我更新答案以輸出數據的字符串表示 – Matt 2015-02-26 17:27:22

相關問題