質問

ベンダーアプリのためのパッチの自動化に取り組んでいます。PowerShellを使用してサーバーのリストを繰り返し、各ボックスにインストールするにはリモート処理を使用したいと思いました。しかし、一態様は私に大きな頭痛を与えています。インストールスクリプトを実行する前に、ベンダーによって提供されたCMDスクリプトを呼び出してシステム変数を設定する必要があります。だから私はPowerShellのようにスクリプトを呼び出します:

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

PowerShellウィンドウでその作業をエコーするので実行を確認しますが、その後のインストールスクリプトIE:

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

使用するさまざまなシステム変数が設定されていないことをすぐに終了していません。誰かがシステム変数の範囲を私に説明できますか?invoke-commandが完了した後に存在しなくなりますか?2番目のスクリプトがシステム変数またはそのようなものにアクセスできるように、2つのスクリプトコールを単一のinvoke-コマンドで一緒に文字列する必要がありますか?

役に立ちましたか?

解決

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

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

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

代わりに、このようなcmdコマンド区切り文字&を使用してコマンドを文字列することができます。

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
.

他のヒント

はい、あなたはそれらをまとめたものにする必要があります。環境変数は最初のCMDセッションで設定されているため、2番目のCMDセッションが開始されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top