我手里有3台远程服务器。让我们假设服务器X,服务器Y和服务器Z。我正在运行我的powershell脚本从我的本地机器登录到远程服务器X。这个服务器X是我的基本服务器,它可以访问其他两个服务器。我希望使用此服务器X作为基本服务器,并希望将文件从Server复制到server,这是由于访问权限而无法通过本地计算机进行的。因此,我使用管理凭据登录到Server,它可以访问所有3台服务器。登录后,我只是提到复制项命令将文件从服务器Y的共享路径复制到服务器Z的共享路径。
这是一个类似的问题,在这个网站,这里有一个转折。当我调试,它显示已完成,但我没有得到任何结果。因此,我尝试在Server中直接运行这个powershell脚本,它只包含复制项命令以及共享文件夹的源路径和目标路径。当我调试时,我得到的错误是,用户没有权限,或者找不到路径。当我试图使用相同的凭据从共享路径手动复制和粘贴文件时,它正在工作。但是通过powershell脚本,它现在开始工作了。我知道原因。这是因为共享路径中的符号'$‘。所以我需要解决这个问题。它不允许“$”符号出现在我的源路径和目标路径中。有什么别的办法吗?如果我试图删除该符号并复制文件,我会得到“拒绝访问”错误,因为它是一个共享路径,E驱动器应该以$符号作为前缀。
下面是我的代码:
#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" }
发布于 2016-03-17 08:59:04
第一个想法:将"
替换为'
。所以powershell停止掉在$-符号上。您现在编写它的方式是:“嘿,powershell,继续寻找一个名为$E的变量,并将其放入其中”。
发布于 2016-03-17 09:42:04
和以前的会议一样,您可以将双qoutes更改为单qoutes。通过这样做,您可以告诉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替换#,我们就设置好了。
https://stackoverflow.com/questions/36055544
复制相似问题