Ваша проблема в том, что вы неправильно поняли команду Select-String
.
Как описано в документах Select-String
:
Поиск текста в строках и файлах.
Ссылка: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string?view=powershell-7
Get-WindowsFeature не является ни строкой, ни файлом. В основном это какой-то объект, как и большинство других команд в PowerShell. Вы можете легко проверить с помощью:
(Get-WindowsFeature).getType()
У меня нет Windows Сервера, готового к тестированию, но мы также можем принять другую команду, такую как Get-Alias
(Get-Alias).getType()
Вывод:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Как видите, это массив, а Select-String
работает с файлом или над строками.
Итак, интуитивно понятный способ - это то, что @ Lieven Keersmaekers сказал в комментарии:
Get-windowsfeature | ? {$_.Name -match 'TIFF'}
В случае примера с Get-Alias
:
Get-Alias | ? {$_.DisplayName -match "Time"}
Вывод:
CommandType Name Version Source
----------- ---- ------- ------
Alias gtz -> Get-TimeZone 3.1.0.0 Microsoft.PowerShell.Management
Alias stz -> Set-TimeZone 3.1.0.0 Microsoft.PowerShell.Management
Как видите, я взял DisplayName
. Это потому, что Name
имеет только gtz
/ stz
, но я хочу найти текст рядом с ->
.
Чтобы отобразить все поля, к которым у вас есть доступ, вы можете распечатать его (как упоминание от @ Lieven Keersmaekers в комментариях):
(Get-Alias)[0] | fl *
или в вашем случае:
(Get-WindowsFeature)[0] | fl *
Select-String
В случае с помощью Select-String
есть два способа, которые также используются в упомянутой выше справочной странице.
Как уже упоминалось выше @ Lieven Keersmaekers , вы можете передать его в строку типа:
(Get-WindowsFeature | Out-String) -split "\r\n" | Select-String TIFF
Другой способ - распечатать его в файл и затем использовать Select. -Строка в файле:
Get-WindowsFeature | Out-File -FilePath .\Windows_Feature.txt
Select-String -Path .\Windows_Feature.txt -Pattern "TIFF"
В качестве замечания не забывайте: вы можете видеть его как строку, но для PowerShell это объект, и поэтому на нем невозможно использовать Select-String
.