わかりません。したがって、現在、「PSModulePath」という名前のシステム環境変数は次のようになっています。
%ProgramFiles%\WindowsPowerShell\Modules;%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules
次に、次のPowerShellスクリプトを確認します。
$envarname = "PSModulePath"
$envar = (get-item env:$envarname).Value
[Environment]::SetEnvironmentVariable($envarname, $envar + ";C:\Expedited", "Machine")
shouldは、パス「C:\ Expedited」をPSModulesPath環境変数に追加するだけですよね?このスクリプトを管理者として実行すると、PSModulePath環境変数は次のように変更されます。
C:\Users\Username\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;C:\Expedited
次のことに注意してください。
なぜこれら2つのことが起こったのか私にはわかりません。この変数にパスを追加するときは、他のすべての変更を行うのではなく、できるだけ元の変数に近づけたいと思います。失われたパーセンテージの兆候を保存する方法はありますか? PowerShell内からこの環境変数を正しく編集するにはどうすればよいですか?
Get-Item コマンドレットを-path
パラメーターとともに使用してから、PSModulePath
環境変数を含むレジストリキーのパスを渡すことができます。
次に、 RegistryKey.GetValueメソッド を DoNotExpandEnvironmentNames と一緒に使用して、PSModulePath
環境変数の文字列値を展開せずに取得できます。
$envarname = "PSModulePath"
$regkey = Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
$envar = $regkey.GetValue($envarname, "", "DoNotExpandEnvironmentNames")
ECHO $envar
注:正しく機能させるには、管理者の昇格したPowerShellコマンドプロンプトまたはISE画面からこれを実行する必要があります。
ハウツー:Windowsで環境変数を設定する-コマンドラインとレジストリ
レジストリ内のユーザー変数の場所は次のとおりです:
HKEY_CURRENT_USER\Environment
。レジストリ内のシステム変数の場所は次のとおりです。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
レジストリを介して環境変数を設定する場合、それらはすぐには認識されません。 1つのオプションは、ログアウトしてから再度ログインすることです。ただし、これをプログラムで実行する場合は別の行である WM_SETTINGCHANGE メッセージを送信すると、ログアウトを回避できますが、コマンドラインでこれを実行する場合はそれほど簡単ではありません。
指定された名前と取得オプションに関連付けられた値を取得します。名前が見つからない場合は、指定したデフォルト値を返します。
RegistryKey.GetValueメソッド(String、Object、RegistryValueOptions)
このオーバーロードを使用して、取得した値の特別な処理を指定します。たとえば、RegistryValueKind.ExpandString型のレジストリ値を取得するときに RegistryValueOptions.DoNotExpandEnvironmentNames を指定して、埋め込み環境変数を展開せずに文字列を取得できます。
最終目標に実際には必要のない追加の手順を実行しています。 MSガイダンスに示されているデフォルトを使用してください。
したがって、上記の記事に基づくと、組み込みのデフォルト/自動環境変数を使用することで、最後の例、または1行だけが必要になります。
[System.Environment]::SetEnvironmentVariable("PSModulePath", $Env:PSModulePath + ";C:\Expedited","Machine")