Как получить значение свойства объекта по имени свойства в PowerShell?
как в PowerShell получить значение свойства объекта, указав его имя (строку)? Я хочу что-то вроде следующего:
$obj = get-something
# View the object's members:
$obj | gm
# I could retrieve a property by doing so:
write-host $obj.SomeProp
# But for many purposes, I would really want to:
write-host $obj | Get-PropertyByName "SomeProp"
есть ли что-то похожее на "Get-PropertyByName" в PowerShell?
5 ответов:
расширение на @aquinas:
Get-something | select -ExpandProperty PropertyNameили
Get-something | select -expand PropertyNameили
Get-something | select -exp PropertyNameЯ сделал эти предложения для тех, кто может просто искать однострочную команду, чтобы получить какую-то информацию, и хотел включить реальный пример.
в управлении Office 365 с помощью PowerShell, вот пример, который я использовал, чтобы получить все пользователи/группы, которые были добавлены в список "BookInPolicy":
Get-CalendarProcessing [email protected] | Select -expand BookInPolicyпросто используя "Select BookInPolicy" был отрезан от нескольких членов, так что спасибо за эту информацию!
вы можете приобрести свойства на имя и указать имя свойства(ы), которые вас интересуют. Обратите внимание, что это не просто возвращает необработанное значение для этого свойства; вместо этого вы получаете что-то, что все еще ведет себя как объект.
[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 <String>задает свойство для выбора и указывает, что попытка должна быть выполнена быть сделано, чтобы расширить это свойство
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name armsvc
$com1 = new-object PSobject #Task1 $com2 = new-object PSobject #Task1 $com3 = new-object PSobject #Task1 $com1 | add-member noteproperty -name user -value jindpal #Task2 $com1 | add-member noteproperty -name code -value IT01 #Task2 $com1 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3 $com2 | add-member noteproperty -name user -value singh #Task2 $com2 | add-member noteproperty -name code -value IT02 #Task2 $com2 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3 $com3 | add-member noteproperty -name user -value dhanoa #Task2 $com3 | add-member noteproperty -name code -value IT03 #Task2 $com3 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3 $arr += $com1, $com2, $com3 #Task4 write-host "windows version of computer1 is: "$com1.ver() #Task3 write-host "user name of computer1 is: "$com1.user #Task6 write-host "code of computer1 is: "$com1,code #Task5 write-host "windows version of computer2 is: "$com2.ver() #Task3 write-host "user name of computer2 is: "$com2.user #Task6 write-host "windows version of computer3 is: "$com3.ver() #Task3 write-host "user name of computer3 is: "$com1.user #Task6 write-host "code of computer3 is: "$com3,code #Task5 read-host
Comments