我在服务器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
}
为什么不听我的目的地?
答案 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
}