Powershell Copy-Item远程机器复制到错误的位置

时间:2015-02-24 20:36:51

标签: powershell powershell-v3.0 powershell-remoting

我在服务器A(开发箱)上创建到服务器B(IIS服务器)的远程Powershell会话。该脚本从服务器C(构建机器)复制到服务器B.

我通过了(我认为)多跳凭据问题,除非副本正在复制到服务器B上的错误位置。

应该复制到d:\ wwwroot \ HelloWorld,而是复制到c:\ users \ me \ Documents \ HelloWorld。

所有服务器都是Win2012r2,使用的是PowerShell v3。

在服务器B上运行:

winrm set winrm/config/service/auth '@{CredSSP="true"}'

在服务器A上运行:

winrm set winrm/config/client/auth '@{CredSSP="true"}'

这是我的剧本:

$password = ConvertTo-SecureString "mypassword" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("mydomain\me", $password)
$sesh = new-pssession -computername "ServerB" -credential $cred -Authentication CredSSP

$sitePath = "D:\wwwroot\HelloWorld"
Invoke-Command -Session $sesh -ScriptBlock { 
    Copy-Item -path "\\ServerC\Builds\HelloWorld\HelloWorld.1\_PublishedWebsites\HelloWorld" -Destination $sitePath -Recurse -Force
} 

为什么不听我的目的地?

1 个答案:

答案 0 :(得分:4)

阅读remote variable documentation。您的$Sitepath是在本地定义的,未在远程脚本块中定义。

因此要么使用带来局部变量的语法:

$sitePath = "D:\wwwroot\HelloWorld"
Invoke-Command -Session $sesh -ScriptBlock { 
    Copy-Item -path "\\ServerC\Builds\HelloWorld\HelloWorld.1\_PublishedWebsites\HelloWorld" 
              -destination $Using:sitePath -Recurse -Force
} 

或者在脚本块中定义它:

Invoke-Command -Session $sesh -ScriptBlock { 
    $sitePath = "D:\wwwroot\HelloWorld"
    Copy-Item -path "\\ServerC\Builds\HelloWorld\HelloWorld.1\_PublishedWebsites\HelloWorld" -Destination $sitePath -Recurse -Force
}