Не удается найти сертификат: диск или поставщика сертификатов через 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