手元に 3 台のリモート サーバーがあります。サーバーX、サーバーY、サーバーZとしましょう。ローカルマシンからpowershellスクリプトを実行して、リモートサーバーXにログインしています。このサーバーXは、他の2つのサーバーにアクセスできるベースサーバーです。このサーバー X をベース サーバーとして使用し、サーバー Y からサーバー Z にファイルをコピーしたいのですが、アクセス許可のためにローカル マシンを介してコピーすることはできません。そのため、3 つのサーバーすべてにアクセスできる管理者資格情報を使用してサーバー X にログインしました。ログイン後、サーバー Y の共有パスからサーバー Z の共有パスにファイルをコピーするための copy-item コマンドについて言及しています。
これは、この Web サイトの多くの質問と同様の質問です。デバッグ中は完了と表示されますが、結果が得られません。そこで、copy-itemコマンドと共有フォルダーのソースパスと宛先パスのみを含むサーバー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" }