0

我手里有 3 台远程服务器。让我们说服务器 X、服务器 Y 和服务器 Z。我正在从本地计算机运行我的 powershell 脚本以登录到远程服务器 X。这个服务器 X 是我的基础服务器,它可以访问其他 2 台服务器。我想将此服务器 X 用作基础服务器,并希望将文件从服务器 Y 复制到服务器 Z,由于访问权限,这通过我的本地计算机是不可能的。所以我使用可以访问所有 3 台服务器的管理员凭据登录到服务器 X。登录后,我只是提到了 copy-item 命令,用于将文件从服务器 Y 的共享路径复制到服务器 Z 的共享路径。

这与本网站中的许多人类似的问题在这里有所不同。当我调试时,它显示已完成,但我没有得到任何结果。所以我尝试直接在服务器 X 中运行这个 powershell 脚本,它只包含复制项命令以及共享文件夹的源和目标路径。当我调试时,我收到错误,用户没有权限或找不到路径。当我尝试使用相同的凭据从共享路径手动复制和粘贴文件时,它正在工作。但是通过powershell脚本,它现在可以工作了。我知道原因。这是因为共享路径中的符号“$”。所以我需要这个解决方案。它不允许在我的源路径和目标路径中使用“$”符号。有没有其他选择?如果我尝试删除该符号并复制文件,我会得到 '

这是我的代码:

 #Calling my Server Name, Credentials from App.Config File 

$currentDirectory = [IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path)
 $appConfigFile = [IO.Path]::Combine($currentDirectory, 'App.config')
 $appConfig = New-Object XML
 $appConfig.Load($appConfigFile)

 $ServerName = $appConfig.configuration.appSettings.add[0].value
 $Username = $appConfig.configuration.appSettings.add[1].value
 $Password = ConvertTo-SecureString -String $appConfig.configuration.appSettings.add[2].value -AsPlainText -Force 

 $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$Password

使用凭据登录到服务器 X 并将文件从服务器 Y 复制到服务器 Z

 Invoke-command -ComputerName $ServerName -Credential $cred -ScriptBlock { 

 Copy-Item "\\ServerY\E$\SourceTestFolder\Test.docx" "\\ServerZ\E$\DestTestFolder" }
4

2 回答 2

2

第一个想法:将 替换"'。所以 powershell 停止落在 $-symbols 上。您现在编写它的方式是:“嘿powershell,继续寻找一个名为 $E 的变量并将其放入其中”。

于 2016-03-17T08:59:04.107 回答
0

就像之前提到的,您可以将双引号更改为单引号。通过这样做,您对 powershell 说,两者之间的所有内容都是没有变量的字符串。

您还可以使用替换和特殊符号,例如此示例。

但是,如果您在路径中有一个带有 $ 符号的字符串和一个变量怎么办。像这样的东西$cmd = "sc config something$$variable depend= something/something.

我需要第一个美元符号,因为它在服务的名称中,但它是变量。我所做的是通过执行以下操作来修复它。

$cmd = "sc config something#$variable depend= something/something"
$cmd = $cmd -replace "#", '$'

通过这样做powershell填充变量所以我有$cmd = "sc config something#value depend= something/something"

然后我用 DollarSign 替换 # ,我们就设置好了。

于 2016-03-17T09:42:04.857 回答