Не удается найти сертификат: диск или поставщика сертификатов через Powershell

Почему-то кажется, что в моей установке Windows 10/Powershell 5.0 отсутствует поставщик сертификатов. Кажется, у меня почему-то даже нет модуля Microsoft.PowerShell.Security, который по умолчанию должен быть установлен с powershell и включает в себя поставщика сертификатов. Вот что я получаю, когда запускаю Get-Module (я добавил пост-git некоторое время назад, может, я испортил его, когда сделал это?):

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script     0.7.1      posh-git                            {Add-PoshGitToProfile, Add-SshKey, Enable-GitColors, Get-A...
Script     1.2        PSReadline                          {Get-PSReadlineKeyHandler, Get-PSReadlineOption, Remove-PS...

и вот что я получаю, когда запускаю Get-PSProvider:

Name                 Capabilities                                      Drives
----                 ------------                                      ------
Registry             ShouldProcess, Transactions                       {HKLM, HKCU}
Alias                ShouldProcess                                     {Alias}
Environment          ShouldProcess                                     {Env}
FileSystem           Filter, ShouldProcess, Credentials                {C, D, E}
Function             ShouldProcess                                     {Function}
Variable             ShouldProcess                                     {Variable}

В любом случае я могу переустановить PowerShell или добавить этот провайдер / диск в свою сборку без полной переустановки Windows? Кажется, что-то очень подозрительное случилось с моей машиной, и я бы предпочел не делать полную переустановку, если в этом нет необходимости.

3 ответа

У меня такая же ошибка при запуске настраиваемого действия PowerShell во время установки MSI. Ответ Maco1717 указал мне правильное направление. Оказывается, PSModulePath был другим, когда Powershell работал в контексте установщика. Исправление заключалось в загрузке правильных путей из таких переменных среды в начале скрипта:

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

Я пришел, чтобы найти ту же проблему.

В моем случае проблема заключалась в том, что в переменной среды PSModulePath не было правильных путей.

Другой особый случай возникает при использовании PowerShell 5.1, который в конечном итоге загружаетMicrosoft.PowerShell.Managementмодуль из PowerShell 7.0.

В нормальных условиях не должен содержать пути к модулям PS7, но у меня он был. Я пока не совсем понимаю, почему, это как-то связано с пользовательским хост-приложением для PowerShell.

Итак, вот что произошло у меня:

      > Import-Module pki
> Get-Module | Select-Object -Property Name,Path

Name                            Path
----                            ----
Microsoft.PowerShell.Management C:\program files\powershell\7\Modules\Microsoft.PowerShell.Management\Microsoft.Powe...
pki                             C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\pki\pki.psd1

Это смешивание PS7 с модулями PS5.1, что нехорошо. Я закончил тем, что вручную исправил$env:PSModulePath, удалив путь к модулю PS7. После этого снова запустил тот же код, и все заработало нормально:

      Name                            Path
----                            ----
Microsoft.PowerShell.Management C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Management\M...
pki                             C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\pki\pki.psd1

Другие вопросы по тегам