我手里有 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" }