J'installe un module PowerShell via Octopus Deploy sur plusieurs serveurs différents. À des fins de test, je me suis inspiré de la documentation de Microsoft pour installer les modules PowerShell .
Cela a bien fonctionné, mais comme indiqué dans la documentation, mes modifications ne seraient visibles que pour la session en cours. C'est-à-dire si je devais faire ce qui suit:
$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)
Lors de l'exécution automatique de ce programme d'installation sur des serveurs tentacules, les sessions à venir de PowerShell ne semblent pas afficher les modules nouvellement installés.
Comment puis-je installer un module PowerShell de manière agnostique de profil afin que chaque session PowerShell démarrée puisse le voir?
PowerShell peut uniquement "voir" les modules installés dans l'un des répertoires répertoriés dans $env:PSModulePath
. Sinon, vous devrez importer le module avec son chemin complet.
Pour rendre un nouveau module visible à tous les utilisateurs, vous avez essentiellement deux options:
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
).PSModulePath
contienne déjà votre répertoire de module personnalisé (par exemple, via une préférence de stratégie group ).Ce dernier ne deviendra effectif que pour les sessions PowerShell démarrées après la modification.
Ce profil s'applique à tous les utilisateurs et à tous les shells.
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
Après avoir suivi les étapes que vous avez expliquées dans votre question (ce qui, à mon avis, est la voie à suivre), j'ai trouvé deux moyens de faire reconnaître le nouveau code source du module par Powershell:
Réinitialisez la PSModulePath
dans chaque session ouverte.
$env:PSModulePath=[Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
J'ai trouvé qu'il était nécessaire de s'exécuter à la fois dans les invites normales et élevées pour que cela fonctionne sans redémarrer dans chaque type d'invite. (Voir aussi la conversation @ Sujet: PSModulePath .)