1

ベンダー アプリのパッチの自動化に取り組んでいます。powershell を使用してサーバーのリストを反復処理し、リモート処理を使用して各ボックスにインストールしたいと考えていました。ただし、1つの側面で大きな頭痛の種になっています。インストール スクリプトを実行する前に、ベンダーが提供する cmd スクリプトを呼び出してシステム変数を設定する必要があります。したがって、powershell でスクリプトを次のように呼び出します。

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir

私のPowerShellウィンドウでその作業をエコーするときに実行されますが、その後のインストールスクリプトの呼び出しは次のとおりです。

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout

使用するさまざまなシステム変数が設定されていないと言ってすぐに終了します。誰かがシステム変数の範囲を説明してくれますか? invoke-command が完了すると、それらは存在しなくなりますか? 2 番目のスクリプトがシステム変数などにアクセスできるように、1 つの呼び出しコマンドで 2 つのスクリプト呼び出しをつなぎ合わせる必要がありますか?

4

2 に答える 2

3

SETコマンドを使用して行った変更は永続的ではなく、現在のプロセスにのみ適用され、プロセスが終了cmdするまでそのまま残ります。cmd

可能であれば、powershell 構文を使用して環境変数を設定します。

Invoke-Command -session $session {$env:myvar = 1}

&または、次のように cmd コマンド セパレータを使用してコマンドを文字列化することもできます。

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
于 2012-07-29T07:53:04.033 に答える
0

はい、それらをつなぎ合わせる必要があります。環境変数は、終了する最初の cmd セッションで設定され、次にそれらなしで 2 番目のセッションが開始されます。

于 2012-07-29T02:15:11.493 に答える