我正在嘗試編寫一個簡短的腳本,它將獲取域中所有計算機的列表,然後在它們上運行Get-Printer以獲取所有已安裝打印機的列表在每臺機器上。Powershell 4管道與Get-Printer的交互
要獲取該域中計算機,我想用「NET VIEW」列表中,所以我嘗試
net view | ForEach-Object {Get-Printer -ComputerName $_}
但是,這並不工作。相反,我只是在網絡視圖中爲每臺PC獲取一行「假脫機服務無法訪問」。
手動輸入pc名稱到「Get-Printer」工作完美,我實際上編寫了一個工作腳本,在文本中搜索PC名稱後,將net view的結果輸出到.txt文件,然後讀取每行從文本文件中依次輸入到「Get-Printer」中。但是我希望能夠擴展這些代碼來集中管理打印機,所以我需要從我認爲可能的一條線上完成這項工作。
任何人都可以解釋我在這裏失蹤? ForEach如何在Powershell 4中實際工作?
以下是寫入一個文件,然後讀取它在我的工作代碼:
$PCs = net view /all | Select-String "\\"
$a = ForEach ($Line in $PCs)
{ $Line -Replace(" ","")
}
$a | Out-file -FilePath C:\Users\esmith\Desktop\test.txt -Encoding ascii
Get-content C:\Users\esmith\Desktop\test.txt | ForEach-Object {Get-Printer -cn $_} | Out-file -FilePath C:\Users\esmith\Desktop\output.txt
稀釋,使一個很大的意義並解釋了爲什麼我的解決方法是有效的。然而,我有一個新問題。看起來,運行你的代碼是成功的,直到我沒有運行打印機假脫機程序服務而打到機器上。然後它無限期地掛起。有什麼方法可以爲該查詢添加超時並轉到列表中的下一臺電腦?我的鍛鍊代碼中沒有這個問題,因爲Get-AdComputer返回的設備列表比net view包括很多沒有運行假脫機程序服務的設備列表要多得多。 – evansmtihc
Get-Printer似乎不支持超時參數。我期望它有合理的超時值內置。你確定它永遠不會返回,或只是需要(太)長?如果您使用我的第二個示例,則Get-Printer可以同時執行多個調用,這將解決方法延遲。 –