0

これは何度も聞かれていると思いますが、自分に合った答えが見つかりません。

  • 変数からコマンドラインを作成する必要があります。
  • そのコマンドライン実行可能ファイルを実行する必要があります。
  • スクリプトと同じ画面に結果を表示する必要があります。

カスタムのソースと宛先を使用してPuttySCPを実行しようとしています。

私はいじりましたが&Invoke-Expressionそれは不可能です。PowerShellのいくつかの単純な#1のユースケースは、信じられないほど難しいので、それが良いことです。

これを行うために私が見ることができる唯一の方法は、新しいProcessインスタンス内で実行し、すべての出力リダイレクトを設定し、終了後にPS画面にパイプで戻すことです。

そして、イベントに夢中になってそれをすくい取っていない限り、出力バッファーがいっぱいになる可能性があるため、これが失敗する可能性があることを私は知っています。

もう1つの方法は、コマンドラインをバッチファイルに書き込んで実行することです。

助けていただければ幸いです。もっと簡単な方法が必要です。

編集

例えば:

[string]$scpPath = Find-PathToPuttyScpExecutable;
[string]$scpArguments = "-v -r -pw " + $MarkLogicServerPassword + " " + $MarkLogicSourcePath + " " + $MarkLogicServerUserName + "@" + $ServerName + ":" + $MarkLogicDestinationRootPath

実行する必要があり$scpPath + " " + $scpArgumentsます。

4

1 に答える 1

4

ひもにそんなに執着しないでください。引数を指定してコマンドを実行するだけです。

[string]$scpPath = Find-PathToPuttyScpExecutable;
&$scpPath -v -r -pw $MarkLogicServerPassword $MarkLogicSourcePath "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"

PowerShellが見積もりを処理します。ほとんどの場合、それはうまく機能し、ここでエッジケースに遭遇することはないと思います。

引数リストをその場で作成する必要がある場合は、配列を使用してそれを渡す必要があります。

$scpArguments = '-v',
                '-r',
                '-pw',
                $MarkLogicServerPassword,
                $MarkLogicSourcePath,
                "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"

&$scpPath @scpArguments
于 2013-03-20T13:32:27.010 に答える