【问题标题】:Powershell Copy-Item remote machine copying to wrong locationPowershell Copy-Item 远程机器复制到错误的位置
【发布时间】:2015-02-25 16:15:17
【问题描述】:

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

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

【问题讨论】:

标签: powershell powershell-3.0 powershell-remoting


【解决方案1】:

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

【讨论】:

  • 不是一个完整的答案......如果 $sitePath 是脚本的参数怎么办?但是,我正在阅读文档以获取完整答案。
  • 我是那种情况,你需要使用第一种语法来引入它。
  • 对不起,错过了第一个语法。完美运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2017-05-27
相关资源
最近更新 更多