0

手元に 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" }
4

2 に答える 2

2

最初のアイデア:"をに置き換え'ます。そのため、powershell は $ 記号を超えるのをやめます。あなたが今書いた方法は、「ちょっと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 に答える