Я заметил три вещи, которые необходимо уточнить для вашего сценария.
- Прежде всего, проблема в том, что командлет
Get-Item
дает вам хранилище, а не сертификат (ы):
PS> Get-Item -Path Cert:\LocalMachine\My
Name : My
То, что вы хотели использовать, это Get-ChildItem
:
PS> Get-ChildItem -Path Cert:\LocalMachine\My
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
34BF9D3F534C2501977557CC9A48C9F5AAAAAAAA CN=localhost
Кстати, это объясняет, почему это работает, когда вы предоставляете отпечаток.Это связано с тем, что вы указываете путь к сертификату Get-Item
вместо пути к магазину.
PS> $cert = Get-Item -Path Cert:\CurrentUser\My\34BF9D3F534C2501977557CC9A48C9F5AAAAAAAA
PS> $cert
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
34BF9D3F534C2501977557CC9A48C9F5AAAAAAAA CN=localhost
Другая вещь - это использование
-contains
.Пожалуйста, смотрите
этот ответ для более подробного объяснения.Как правило, он не предназначен для сравнения подстрок.Вместо этого используйте что-нибудь другое (например,
-like
):
Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object {$_.Subject -like "*google*"}
?
и
Where
являются псевдонимами
Where-Object
, вы можете проверить это здесь:
PS> get-alias | ? resolvedcommandname -eq "Where-Object"
CommandType Name Version Source
----------- ---- ------- ------
Alias ? -> Where-Object
Alias where -> Where-Object