2016-08-17 4 views
0

Powershellを使用してWindowsで環境変数を作成するには、Environment.GetEnvironmentVariable()メソッドを使用してWebApiアプリケーションでアクセスできますか?WebApiアプリケーションでアクセス可能なPowershellを使用してWindowsで環境変数を作成するにはどうすればよいですか?

を私はSetEnvironment.ps1と呼ばれるPowerShellスクリプトを作成しました:ここ

は、私が試したものです。ファイルの内容は次のとおりです。

[Environment]::SetEnvironmentVariable('TEST', 'testval') 

その後、私は、このコマンドを使用してスクリプトを実行しました:

powershell -ExecutionPolicy ByPass -File .\SetEnvironment.ps1 

$Env:TESTコマンドを使用してチェックすると、私は環境パスが保存されませんことがわかりました。

スクリプト内にそのコマンド($Env:TEST)を追加すると動作します。しかし、それ以外では動かない。

また、explorer.exeを強制終了して再起動しました。何か案は?

ありがとう

+3

マシンやユーザーの変数を設定するために 'target'パラメータを使うオーバーロードがあるようです:https://msdn.microsoft.com/en-us/library/96xafkes(v=vs.110) .aspx – Malk

+0

あなたのスクリプトから 'echo [Environment] :: UserName'の出力は何ですか?それはあなたのpowershellウィンドウのユーザ名と一致しますか? –

+0

@AndrewPiliser自分のPowerShellウィンドウのユーザーを確認するにはどうすればよいですか?私は管理者としてpowershellウィンドウを実行しています – Shaz

答えて

2

環境変数は、PowerShellプロセスに対してのみ設定しています。グローバルに設定する必要があります。

使用EnvironmentVariableTargetあなたはまた

[Environment]::SetEnvironmentVariable('TEST', 'testval', [EnvironmentVariableTarget]::Machine) 

を必要とするアクセス権を指定するには、あなたはPowerShellのからプロセスを作成した場合、そのプロセスは、設定可能性のあるすべての環境変数を継承します。可能であれば、これを実行してください。グローバル環境変数の設定は一般的にはお勧めしません。

+0

ありがとうございます。私は実際にはそれとは異なるバリエーションを試していました(文字列として 'Machine'を渡したばかりです)。 しかし私はあなたの方法を試してみました。私が既存のPowerShellを閉じてそれを(管理者として)再び開くと、動作します。私はTEST環境変数を見ることができます。 しかし、私は他のPowerShellウィンドウでそれを見ることができず、C#のEnvironment.GetEnvironmentVariable( "TEST")メソッドからそれを取得できません。 アイデア – Shaz

+0

@Shaz他のプロセスがすでに開かれているときに環境変数を設定すると、更新されません。新しいプロセスが作成されるとき、それは環境変数のそれ自身のコピーを継承します(もし起こらなかった場合、2つのプロセスが同時に変数に書き込もうとした場合に起こる可能性のある問題を考えてください)。他のプロセスの変数は変更できません。新しい値を取得するには、プログラムを閉じて再起動する必要があります。 –

+1

感謝!出来た。私は新しいプロセスを開いたときに機能しました。また、Environment.GetEnvironmentVariableメソッドでは、私がEnvironmentVariableTargetを指定するためのオーバーロードを使用しなければなりませんでした – Shaz

関連する問題