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