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