2016-11-29 56 views
0

試圖讓這兩個工作,但不斷收到錯誤。基本上想要從C:\ Temp \ Test獲取所有文件,並將其複製到Server1和Server2 D:\ Temp \ Test中。無法將參數綁定到參數「路徑」,它爲空,無法找到路徑

不工作...

$servers = "Server1","Server2" 
$SourcePath = (Get-ChildItem C:\Temp\Test *.txt).Name 
$servers | ForEach { 
Invoke-Command $servers -ScriptBlock { 
$CompName = (Get-WmiObject -Class Win32_ComputerSystem).Name 
$DestPath = "\\$CompName\D$\Temp\Test" 
Copy-Item $SourcePath -Destination $DestPath -Recurse 
} 
} 
+0

提示:檢查'$ servers | ForEach {「a server = $ _」; $ servers}'。此外,如果您的腳本引發異常,請編輯您的腳本以包含異常,同時包含消息和堆棧跟蹤。 「*不起作用... *」發音不夠! – JosefZ

+0

可能的重複[如何將本地變量傳遞給使用Invoke-Command在遠程計算機上執行的腳本塊?](http://stackoverflow.com/questions/35492437/how-can-i-pass-a-局部變量到一個腳本塊執行的上-A-遠程機器w)的 – PetSerAl

回答

1

這實際上是一個常見的錯誤。當您使用Invoke-Command在遠程服務器上調用您的scriptblock時,它會在該遠程計算機上創建一個新的PowerShell實例。 PowerShell的這個新實例不知道$SourcePath變量是什麼,因爲它從未在新實例中設置過。要解決此問題,請爲腳本塊指定一個參數,然後在調用腳本塊時提供值$SourcePath。它可以這樣完成:

$servers = "Server1","Server2" 
$SourcePath = (Get-ChildItem C:\Temp\Test *.txt).Name 
$servers | ForEach { 
    Invoke-Command $servers -ScriptBlock { 
     Param($SourcePath) 
     $CompName = (Get-WmiObject -Class Win32_ComputerSystem).Name 
     $DestPath = "\\$CompName\D$\Temp\Test" 
     Copy-Item $SourcePath -Destination $DestPath -Recurse 
    } -ArgumentList $SourcePath 
} 
相關問題