Вы можете получить свойство по имени, используя Select-Object
командлет и указав имя (имена) свойств, которые вас интересуют. Обратите внимание, что это не просто возвращает необработанное значение для этого свойства; вместо этого вы получаете что-то, что все еще ведет себя как объект.
[PS]> $property = (Get-Process)[0] | Select-Object -Property Name
[PS]> $property
Name
----
armsvc
[PS]> $property.GetType().FullName
System.Management.Automation.PSCustomObject
Чтобы использовать значение этого свойства, вам все равно необходимо определить, какое свойство вам нужно, даже если есть только одно свойство:
[PS]> $property.Name
armsvc
[PS]> $property -eq "armsvc"
False
[PS]> $property.Name -eq "armsvc"
True
[PS]> $property.Name.GetType().FullName
System.String
В соответствии с другими ответами здесь, если вы хотите использовать одно свойство в строке, вам необходимо оценить выражение (заключить его в скобки) и префикс со знаком доллара ($), чтобы динамически объявить выражение как переменную для вставки в строку:
[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc
Совершенно верно, другие ответили на этот вопрос, порекомендовав -ExpandProperty
параметр для Select-Object
командлета. Это позволяет избежать головной боли, возвращая значение указанного свойства, но вы захотите использовать разные подходы в разных сценариях.
-ExpandProperty <String>
Задает свойство для выбора и указывает, что следует предпринять попытку раскрыть это свойство.
https://technet.microsoft.com/en-us/library/hh849895.aspx
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc
PowerShell переменные
select -expand "SomeProp"
если вы хотите значение.select "SomeProp"
возвращает customobject со свойством SomeProp, а затем возвращается к шагу 1.