Octopus Deploy を介してPowerShellモジュールを複数の異なるサーバーにインストールしています。テストの目的で、私は PowerShellモジュールのインストール に関するMicrosoftのドキュメントのガイダンスに同行しました。
これは問題なく動作しましたが、ドキュメントに記載されているように、私の変更は現在のセッションでのみ表示されます。つまり、私が次のことをした場合:
$modulePath = [Environment]::GetEnvironmentVariable("PSModulePath", [EnvironmentVariableTarget]::Machine)
# More practically, this would be some logic to install only if not present
$modulePath += ";C:\CustomModules"
[Environment]::SetEnvironmentVariable("PSModulePath", $modulePath, [EnvironmentVariableTarget]::Machine)
触手サーバーでこのインストーラーを自動的に実行すると、今後のPowerShellセッションでは、新しくインストールされたモジュールが表示されません。
起動したすべてのPowerShellセッションがそれを表示できるように、プロファイルにとらわれない方法でPowerShellモジュールをインストールする方法を教えてください。
PowerShellは、$env:PSModulePath
にリストされているディレクトリの1つにインストールされているモジュールのみを「参照」できます。それ以外の場合は、フルパスでモジュールをインポートする必要があります。
新しいモジュールをすべてのユーザーに表示するには、基本的に2つのオプションがあります。
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
)にインストールします。PSModulePath
変数にカスタムモジュールディレクトリが含まれるようにシステム環境を変更します(例: グループポリシー設定 を使用)。ただし、後者は、変更が行われた後に開始されたPowerShellセッションに対してのみ有効になります。
このプロファイルは、すべてのユーザーとすべてのシェルに適用されます。
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
質問で説明した手順(一般的な方法だと思います)を実行した後、Powershellで新しいモジュールソースを認識させる方法が2つありました。
開いている各セッションでPSModulePath
をリセットします。
$env:PSModulePath=[Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
各タイプのプロンプトで再起動せずにこれを機能させるには、通常のプロンプトと昇格したプロンプトの両方で実行する必要があることがわかりました。 (@の会話も参照してください トピック:PSModulePath 。)