Командлет Select-Object Добавляет символы в строки [duplicate]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

78
задан Peter Mortensen 4 December 2014 в 23:56
поделиться

5 ответов

Конечно

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

Или, если это важно:

$obj."SomeProp"
121
ответ дан aquinas 28 August 2018 в 07:17
поделиться

Вы можете получить свойство по имени с помощью командлета 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

10
ответ дан Charlie Joynt 28 August 2018 в 07:17
поделиться

Попробуйте следующее:

$obj = @{
    SomeProp = "Hello"
}

Write-Host "Property Value is $($obj."SomeProp")"
2
ответ дан John Slegers 28 August 2018 в 07:17
поделиться
$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
ответ дан Laurel 28 August 2018 в 07:17
поделиться

Расширение на @aquinas:

Get-something | select -ExpandProperty PropertyName

или

Get-something | select -expand PropertyName

или

Get-something | select -exp PropertyName

Я сделал эти предложения для тех, которые могут быть просто ищет однострочную команду для получения некоторой части информации и хотел включить пример реального мира.

При управлении Office 365 через PowerShell, вот пример, который я использовал для получения всех пользователей / группы, которые были добавлены в список «BookInPolicy»:

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

Просто использование «Select BookInPolicy» отрезало нескольких участников, поэтому спасибо за эту информацию!

29
ответ дан Peter Mortensen 28 August 2018 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: