How to get an object's property's value by property name?

前端 未结 6 1640
野趣味
野趣味 2020-11-27 14:54

In PowerShell, how do you get an object\'s property value by specifying its name (a string)? I want something like the following:

$obj = get-something

# Vie         


        
相关标签:
6条回答
  • 2020-11-27 15:34

    Try this :

    $obj = @{
        SomeProp = "Hello"
    }
    
    Write-Host "Property Value is $($obj."SomeProp")"
    
    0 讨论(0)
  • 2020-11-27 15:39
    $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
    
    0 讨论(0)
  • 2020-11-27 15:40

    Expanding upon @aquinas:

    Get-something | select -ExpandProperty PropertyName
    

    or

    Get-something | select -expand PropertyName
    

    or

    Get-something | select -exp PropertyName
    

    I made these suggestions for those that might just be looking for a single-line command to obtain some piece of information and wanted to include a real-world example.

    In managing Office 365 via PowerShell, here was an example I used to obtain all of the users/groups that had been added to the "BookInPolicy" list:

    Get-CalendarProcessing conferenceroom@domain.com | Select -expand BookInPolicy
    

    Just using "Select BookInPolicy" was cutting off several members, so thank you for this information!

    0 讨论(0)
  • 2020-11-27 15:43

    You can get a property by name using the Select-Object cmdlet and specifying the property name(s) that you're interested in. Note that this doesn't simply return the raw value for that property; instead you get something that still behaves like an object.

    [PS]> $property = (Get-Process)[0] | Select-Object -Property Name
    
    [PS]> $property
    
    Name
    ----
    armsvc
    
    [PS]> $property.GetType().FullName
    System.Management.Automation.PSCustomObject
    

    In order to use the value for that property, you will still need to identify which property you are after, even if there is only one property:

    [PS]> $property.Name
    armsvc
    
    [PS]> $property -eq "armsvc"
    False
    
    [PS]> $property.Name -eq "armsvc"
    True
    
    [PS]> $property.Name.GetType().FullName
    System.String
    

    As per other answers here, if you want to use a single property within a string, you need to evaluate the expression (put brackets around it) and prefix with a dollar sign ($) to declare the expression dynamically as a variable to be inserted into the string:

    [PS]> "The first process in the list is: $($property.Name)"
    The first process in the list is: armsvc
    

    Quite correctly, others have answered this question by recommending the -ExpandProperty parameter for the Select-Object cmdlet. This bypasses some of the headache by returning the value of the property specified, but you will want to use different approaches in different scenarios.

    -ExpandProperty <String>

    Specifies a property to select, and indicates that an attempt should be made to expand that property

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

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

    powershell variables

    0 讨论(0)
  • 2020-11-27 15:44

    Here is an alternative way to get an object's property value:

    write-host $(get-something).SomeProp
    
    0 讨论(0)
  • 2020-11-27 15:49

    Sure

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

    Or for that matter:

    $obj."SomeProp"
    
    0 讨论(0)
提交回复
热议问题