Windows PowerShellの環境変数を設定する
環境変数PATHの設定は、旧コマンドプロンプトにしか影響しないことがわかりました。PowerShellは環境設定が異なるようです。PowerShell(v1)の環境変数を変更するにはどうすればよいのでしょうか?
注意してください。
PowerShellを実行するたびに設定する必要がないように、変更を恒久的にしたいのですが。PowerShellにプロファイルファイルはありますか?UnixのBashプロファイルのようなものですか?
551
15
PowerShell セッションの途中で、一時的に PATH 環境変数に追加する必要がある場合 を一時的にPATH環境変数に追加する必要がある場合、次のようにすることができます。 このようにします。
実際の環境変数を変更するには env: namespace / drive` の情報を使用します。例えば、次の のコードはパス環境変数を更新します。
環境設定を永続的にする方法はありますが PowerShell からしか使用しないのであれば、プロファイルを使用して環境設定を開始した方が良いでしょう。 プロファイルを使用して設定を開始する方がはるかによいでしょう。 設定を開始するためにプロファイルを使用する方がずっと良いでしょう。起動時に、PowerShell は `WindowsPP1' にある .ps1 ファイルをすべて実行します。 ファイルを実行します。 ディレクトリにある .ps1 ファイルを実行します。一般的には、profile.ps1* ファイルがすでに存在します。 ファイルがすでにあります。私のコンピュータのパスは次のとおりです。
また、以下の方法でユーザー/システム環境変数を permanently (シェルの再起動の間、永続的に) 変更することも可能です。
システム環境変数を変更する
ユーザ環境変数の変更
コメントからの使用法 - システム環境変数に追加する
型を書きたくない場合は、文字列ベースの解決策も可能です。
PowerShellプロンプトから:
次に、テキストが表示されます。
セッションを再起動すると、変数が利用可能になります。
setx
は、任意変数の設定にも使用できます。setx /と入力します?
ドキュメントのプロンプトで。この方法でパスをいじる前に、
$ env:path>>を実行して、既存のパスのコピーを保存してください。 PowerShellプロンプトのa.out
。JeanTの回答のように、パスに追加することについての抽象化が必要でした。 JeanTの回答とは異なり、ユーザーの操作なしで実行する必要がありました。 私が探していた他の行動:
$ env:Path
を更新して、変更が現在のセッションで有効になるようにします。 -今後のセッションでは、環境変数の変化を維持します。 -同じパスがすでに存在する場合は、重複したパスを追加しません。便利な場合は、こちらをご覧ください。
対応する「Remove-EnvPath」関数については、my gistをチェックしてください。
現在受け入れられている回答は、パス変数がPowerShellのコンテキストから永続的に更新されるという意味で機能しますが、実際にはWindowsレジストリに保存されている環境変数を更新しません。
これを実現するには、PowerShellも使用できます。
詳細については、ブログ投稿 PowerShellを使用して環境パスを変更 を参照してください。
PowerShellコミュニティ拡張機能を使用する場合、環境変数パスにパスを追加する適切なコマンドは次のとおりです。
永続的な変更を示唆するすべての回答には同じ問題があります。それらはパスレジストリ値を破ります。
SetEnvironmentVariable
は、REG_EXPAND_SZ
値%SystemRoot%\ system32
をC:\ Windows \ system32
のREG_SZ
値に変換します。パス内の他の変数も失われます。
%myNewPath%
を使用して新しいものを追加しても、もう機能しません。これが、この問題に対処するために使用するスクリプト「Set-PathVariable.ps1」です。
ブログ投稿で問題を詳しく説明します。
これにより、現在のセッションのパスが設定され、ユーザーに永続的に追加するように求められます。
この関数をデフォルトのプロファイル(
Microsoft.PowerShell_profile.ps1```)に追加できます。通常、
%USERPROFILE%\ Documents \ WindowsPowerShell````にあります。[@ Michael Kropat's][1]の回答に基づいて、既存の
PATH
変数に新しいパスをプリペンドするパラメーターと、存在しないパスの追加を回避するためのチェックを追加しました。[1]:https://stackoverflow.com/a/34844707/1509300「Michael Kropat」。
なので。 [ジョナサンリーダー。]https://stackoverflow.com/users/1689770/jonathan-leaders。) 言及した。 [ここに。]https://stackoverflow.com/a/28596275。) 'の環境変数を変更できるように、コマンド/スクリプト昇格を実行することが重要です。;machine'。;。, しかし、いくつかのコマンドを実行すると、diss'が昇格します。;コミュニティ拡張機能を使用する必要があります。, I'。;d変更して拡張したい。 [JeanT'。;s。]https://stackoverflow.com/users/1116269/jeant。) 。[答え。]https://stackoverflow.com/a/30694253。) ある意味で。, スクリプト自体が'であっても、マシン変数の変更も実行できます。;t run upleft:
ほとんどの回答はUACに対応していません。 これはUACの問題をカバーしています。
最初にPowerShell Community Extensionsをインストールします:http://chocolatey.org/を介して「choco install pscx」(シェル環境を再起動する必要がある場合があります)。
次に、pscxを有効にします。
次に、「Invoke-Elevated」を使用します。
PowerShellを開いて実行します。
私の提案はこれです:
これをテストして、環境変数「Path」に「C:\ oracle \ x64 \ bin」を永続的に追加しましたが、これで問題なく動作します。
最初の方法は、単に実行することです。
しかし、この変更は永続的なものではありません。
$ env:path
は、PowerShellターミナルを閉じて再度開くとすぐに、デフォルトで以前の状態に戻ります。 これは、ソースレベル(レジストリレベル)ではなく、セッションレベルで変更を適用したためです。$ env:path
のグローバル値を表示するには、次のようにします。より具体的には:
これを変更するには、まず変更が必要な元のパスをキャプチャします。
次に、新しいパスの外観を定義します。 この場合、新しいフォルダを追加します。
注:
$ newpath
があなたがそれをどのように見たいかを見るようにしてください。 そうでない場合は、OSを損傷する可能性があります。次に、新しい値を適用します。
次に、期待どおりに見えるように、最後に1つ確認します。
これで、PowerShellターミナルを再起動(またはマシンを再起動)して、古い値に再びロールバックしないことを確認できます。
パスの順序がアルファベット順になるように変更される可能性があることに注意してください。行全体を確認してください。 簡単にするために、セミコロンを区切り文字として使用して、出力を行に分割できます。
SBFとMichael'sのコードを少し最適化して、よりコンパクトにしようとしました。
PowerShellのタイプの強制に依存しているため、文字列が自動的に列の値に変換されるため、検索辞書を定義しませんでした。
また、条件に基づいてリストに新しいパスを追加するブロックを引き出しました。これにより、作業は一度行われ、変数に保存されて再利用されます。
次に、「$ PathContainer」パラメーターに応じて、永続的またはセッションにのみ適用されます。
コードのブロックを、コマンドプロンプトから直接呼び出す関数またはps1ファイルに配置できます。 DevEnvAddPath.ps1を使用しました。
DevEnvRemovePath.ps1でも同様のことをしています。
これまでのところ、彼らは働いているようです。
PowerShell内では、次のように入力して環境変数ディレクトリに移動できます。
これにより、Env:>に移動します。ディレクトリ。 このディレクトリ内から:
すべての環境変数を表示するには、次のように入力します。
特定の環境変数を表示するには、次のように入力します。
環境変数を設定するには、次のように入力します。
環境変数を削除するには、次のように入力します。
詳細については、 [環境変数について][1] を参照してください。
[1]:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view = powershell-6。