Как получить значение свойства объекта по имени свойства в 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?

558   5  

5 ответов:

обязательно

write-host ($obj | Select -ExpandProperty "SomeProp")

или:

$obj."SomeProp"

расширение на @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>

задает свойство для выбора и указывает, что попытка должна быть выполнена быть сделано, чтобы расширить это свойство

https://technet.microsoft.com/en-us/library/hh849895.aspx

[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc

powershellпеременные

попробуйте это :

$obj = @{
    SomeProp = "Hello"
}

Write-Host "Property Value is $($obj."SomeProp")"
$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

    Ничего не найдено.