web-dev-qa-db-ja.com

すべてのユーザーに対してPowerShellモジュールを永続的にインストールする

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モジュールをインストールする方法を教えてください。

12
Mike Bailey

PowerShellは、$env:PSModulePathにリストされているディレクトリの1つにインストールされているモジュールのみを「参照」できます。それ以外の場合は、フルパスでモジュールをインポートする必要があります。

新しいモジュールをすべてのユーザーに表示するには、基本的に2つのオプションがあります。

  1. モジュールをデフォルトのシステム全体のモジュールディレクトリ(C:\Windows\system32\WindowsPowerShell\v1.0\Modules)にインストールします。
  2. PSModulePath変数にカスタムモジュールディレクトリが含まれるようにシステム環境を変更します(例: グループポリシー設定 を使用)。

ただし、後者は、変更が行われた後に開始されたPowerShellセッションに対してのみ有効になります。

12
Ansgar Wiechers

このプロファイルは、すべてのユーザーとすべてのシェルに適用されます。

%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
2
Knuckle-Dragger

質問で説明した手順(一般的な方法だと思います)を実行した後、Powershellで新しいモジュールソースを認識させる方法が2つありました。

  • マシンを再起動します。 (毎回動作します。)
  • 開いている各セッションでPSModulePathをリセットします。

    $env:PSModulePath=[Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
    

    各タイプのプロンプトで再起動せずにこれを機能させるには、通常のプロンプトと昇格したプロンプトの両方で実行する必要があることがわかりました。 (@の会話も参照してください トピック:PSModulePath 。)

0
Peter Majeed