テキストファイルを生成するPowerShellスクリプトがあります。最後に、このファイルをLinuxサーバーにコピーしたいと思います。CMD.EXEから、(Puttyからの)PSCPを使用できます。これは機能し、ファイルをコピーします。ただし、PowerShellから、インタラクティブに、またはPowerShellバッチから、PSCPには目に見える効果はありません。エラーメッセージはなく、ファイルはコピーされません。引数なしで単に。\PSCP.EXEを実行した場合でも、CMDコマンドラインにオプションが表示されますが、PowerShellからは何も実行されません。PowerShell内からPSCPを使用できますか?
4 に答える
PowerShell 内からプログラムを実行すると、CMD と同じように動作するはずですが、そのプログラムが出力を生成する方法 (STDOUT、STDERR、その他に書き込むか) によっては、動作が異なる場合があります。
私は.NET アプリと PowerShell スクリプト内で FTPS と SFTP にRebex のコンポーネントを使用してきました。SFTP パッケージには SCP クラスが含まれています。はい、お金はかかりますが、使い方によっては価値があるかもしれません。
PowerShell から PSCP を自動化しようとしました。pscp の-batch
パラメーターを使用することを忘れないでください。これにより、間違ったパスワードを入力するなどの操作を行った場合に、入力を求められなくなります。
$Cmd = "pscp -l username -pw password -batch c:\folder\file.txt server:/home/user1"
Invoke-Expression "& $( $Cmd )"
そうしないと、スクリプトが停止してしまいます。
はい - ほとんどの実行可能ファイルは PowerShell から呼び出すことができます。この点で、pscp.exe に特有のものはありません。呼び出し演算子 (アンパサンド - ) を前に付ける必要がある場合があります&
。
PS C:\>& "C:\Program Files (x86)\Putty\pscp.exe" -V
pscp: Release 0.62
上記は、PowerShell プロンプトからの直接出力です。呼び出し演算子は、実行可能ファイルへのパスにスペースが含まれている場合に特に役立ちます。呼び出し演算子は、PowerShell に対して、文字列と見なされるものを代わりに実行しようとするものとして扱うように指示するために使用されます。
より良い回答を提供するのに役立つため、実行しようとしている完全なコマンドを含めてください。出力が得られない場合は、PATH 変数に問題があるか、何かおかしい可能性があります。
perl などのスクリプト内から pscsp を使用する場合
アンパサンドなし
この「私のパスワード」のような引用
例えば
"C:\Program Files\Putty\pscp.exe" -C -p -pw "password" /local_dir/file_to_copy user@hostname:/remote_directory
in perl (\ は "string" のエスケープ文字であることに注意してください)
$cmd = q("C:\Program Files\Putty\pscp.exe" -C -p -pw "password" /local_dir/file_to_copy user@hostname:/remote_directory);
system($cmd);