Powershell показывает, что PSModulePath удвоен

352
sirdank

Вот моя проблема:

PS C:\windows\system32> $env:PSModulePath.Replace(';',"`n") C:\Users\sirdank\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\windows\system32\WindowsPowerShell\v1.0\Modules C:\Program Files (x86)\Microsoft SQLServer\120\Tools\PowerShell\Modules\ C:\Program Files(x86)\Microsoft SDKs\Azure\PowerShell\ResourceManager\AzureResourceManager\ C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement\ C:\Users\sirdank\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\windows\system32\WindowsPowerShell\v1.0\Modules C:\Program Files (x86)\Microsoft SQLServer\120\Tools\PowerShell\Modules\ C:\Program Files(x86)\Microsoft SDKs\Azure\PowerShell\ResourceManager\AzureResourceManager\ C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement\ C:\ProgramFiles (x86)\Microsoft SDKs\Azure\PowerShell\Storage\ 

Это произошло после того, как я запустился, Get-Module xWebAdministrationпотому что я хочу использовать Azure Desired State Configuration. С тех пор я попробовал

  • Изменение PSModulePath через панель управления
  • Изменение его с помощью SETX
  • Изменение его с помощью [Environment] :: SetEnvironmentVariable ()
  • Проверка всех шести профилей PowerShell, чтобы увидеть, если они изменяют его (ни один из них даже не существует)
  • Перезагрузка моего ноутбука дважды

Ничто из этого не решило мою проблему. Когда я смотрю в панели управления, PSModulePath, кажется, установлен правильно. Однако, когда я открываю powershell, он все равно отображает вывод, приведенный выше, и DSC по-прежнему не работает, потому что он пытается дважды получить xWebAdministration. Как мне починить PSModulePath?

1

2 ответа на вопрос

0
sirdank

У меня снова работает PowerShell, но я должен был создать $Home\Documents\Profile.ps1с содержимым

$env:PSModulePath = [string]::join(';', ($env:PSModulePath -Split ';' | % {$_.TrimEnd('\')} | Sort-Object -Unique)) 
0
Ben N

Если PSModulePathзадана как пользовательская переменная, так и системная переменная, они будут объединены, как PATHесть. Как ни странно, только пользовательская переменная будет отображаться в командной строке, если вы это сделаете echo %PSModulePath%, но $env:PSModulePathв PowerShell показывает реальное объединенное значение, как и исходная пакетная команда, если вы запускаете ее cmdиз PowerShell. Похоже, что папки Модули, происходящие из ваших Документов и Программных файлов, добавляются PowerShell во время выполнения, поэтому их не нужно указывать в переменных среды.

Чтобы дедуплицировать пути к модулям, удалите дополнительную переменную среды или измените ее, чтобы не повторять какие-либо папки.