无法将参数绑定到参数'路径'它为null,无法找到路径

时间:2016-11-29 20:57:28

标签: powershell

尝试让这两个工作但仍然会出错。基本上希望从扩展名为.txt的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
}
}

1 个答案:

答案 0 :(得分:2)

这实际上是一个常见的错误。当您使用Invoke-Command在远程服务器上调用脚本块时,它会在该远程计算机上创建PowerShell的新实例。 PowerShell的新实例不知道$SourcePath变量是什么,因为它从未在新实例中设置过。要解决此问题,请为scriptblock提供一个参数,然后在调用scriptblock时提供$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
}