2016-11-18 2 views
0

Windowsスケジューラを使用して実行するコマンドをpowershellスクリプトでスケジュールしようとしています。このコマンドはユーザ固有の環境変数に依存しており、スケジュールされたタスクはこれらの変数にアクセスすることができないので、PowerShellスクリプト自体の内部で変数を設定しようと決めました。powershellスクリプトでユーザー環境変数を設定する正しい方法は何ですか

通常の環境変数の設定は次のようになります。 enter image description here

、スクリプトでこれを複製するために、私が使用してみました:

$env:DCRCLIFILE = "C:\Users\pzsr7z\Desktop\DCRCLIFILE.txt" 

が、何らかの理由でプログラムが正しく動作しませんこのように設定すると、「通常の」ユーザー環境変数を使用してプログラムを実行すると完全に正常に動作しますが、 enter image description here

で環境変数を設定するとき、私は違っやるべきものがあります:PowerShellを使用して

プログラムの実行は、「通常の」環境変数を使用して、環境変数 image description

プログラムの実行が開始しましたパワーシェルスクリプト?なぜこれが動作していないのか分かりません。私は環境変数が実際に作成されることを確認しました。だから、powershellコマンドが失敗しているようなものではありません。

+0

「スケジュールされたタスクはこれらのアクセス権を持っていないため、あなたにその印象を与えたものは何ですか? –

+0

@Bill_Stewart "Get-ChildItem Env:"を実行するスケジュールされたタスクを設定した場合、ユーザー固有の環境変数が省略されている間、すべてのシステム環境変数が表示されます。少なくともそれは私がこれを実行しているWindows 2012サーバーでどのように動作するのですか – lacrosse1991

+0

変数はどのアカウントで定義されており、どのアカウントの下でタスクを実行していますか? –

答えて

0

私は別々に作成することで、この問題を解決することになりましたバッチファイルを作成し、その中に手動でDCRCLIFILE変数を設定します。その後、同じバッチファイル内からdcrclifile.exeコマンドを実行しました。私がpowershellで変数を手動で設定しようとしたときに、何が正しく動作しなかったのか分かりません。

+0

私はどちらか分かりません。 PowerShellではうまく動作します。 –

2
$env:DCRCLIFILE = "C:\Users\pzsr7z\Desktop\DCRCLIFILE.txt" 

これはのみにのみ表示され、プロセス・レベルの環境変数を作成し、そして唯一の限り、あなたの現在のPowerShellセッションとして持続します。

あなたは、.NET FrameworkとSetEnvironmentVariable方法を使用することによって、より永続的な環境変数(ユーザレベルまたはマシンレベル)を設定する必要があります。

[Environment]::SetEnvironmentVariable("DCRCLIFILE", "C:\Users\pzsr7z\Desktop\DCRCLIFILE.txt", "User") 
+0

それはすぐに有効になりますか?このコマンドを実行すると、ログアウトしてから変数に変更する前にログインする必要がありました。 – lacrosse1991

+0

環境変数は通常、プロセスの開始時にのみ読み込まれます。変更を行うとプロセスを再起動する必要があります。 –

+0

これは、Windowsスケジューラを使用しているものを実行しているときにこれを実行する最良の方法は何ですか?私は環境変数を作成した後にpowershellを再起動する必要がありますが、スケジュールされたタスクはユーザー作成の環境変数にアクセスできないため、再起動後に新しい変数にアクセスすることはできません。 – lacrosse1991

関連する問題