我在PowerShell中編寫了一個超級簡單的腳本。該腳本的目標是從txt文件讀取服務器名稱列表,並從另一個txt文件讀取命令塊。操作的結果是包含信息的第三個txt文件。從文件中檢索參數 - Windows PowerShell
這裏是一些代碼:
cls
$usr = Read-Host "Please insert username, you'll be asked for password later"
$path = Read-Host "Insert a valid path for ServerList.txt file"
$serverList = Get-Content -Path $path | Out-String
$path = Read-Host "Insert a valid path fom Command.txt file"
$commandBlock = Get-Content -Path $path | Out-String
echo "Command: " $commandBlock "will be executed on " $serverList
echo "Press CTRL+Z to abort or"
pause
Invoke-Command -ComputerName $serverList -ScriptBlock { $commandBlock } -credential $usr
Serverlist.txt是包含類似 「服務器1,服務器,服務器3」 和command.txt只含有這種 「GET-WmiObject可以Win32_BIOS |選擇-對象的SerialNumber」 純文本
爲什麼錯誤是Invoke-Command:一個或多個計算機名稱無效。如果您嘗試傳遞URI,請使用-ConnectionUri參數,或傳遞URI對象 而不是字符串。 ?
我甚至試圖用$ serverlist.toString()替換$ serverlist,但它不工作。我在某處讀到,在這種情況下,$ serverlist是一個Array,我該怎麼辦才能使所有的工作?
考慮到https://technet.microsoft.com/en-us/library/hh849719.aspx如果通過控制檯輸入字符串,則調用命令可以使用「server1,server2,server3」格式。
事情是「server1,server2,server3」是invoke-command需要正常工作的東西。我不需要分手!不是嗎? – BlacK
@BlacK當您輸入'server1,server2,server3'作爲裸參數時,PowerShell解析器會認識到它應該被視爲三個單獨的字符串,而不是單個字符串。當你傳遞一個變量時,情況並非如此 –
你這樣做,就好像你正在傳遞一個變量,它的值是未解析的,所以你的'gwmi'命令搜索名爲'server1,server2,server3'的計算機而不是去三臺電腦'server1','server2','server3'。但是如果你的'$ serverList'是一個數組,那麼'gwmi'將會看到它並在每臺計算機上進行調用。 – Vesper