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

Powershell Copy-Item remote machine copying to wrong location

我在服务器 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
} 

为什么它听不到我的目的地?

阅读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
}