Доступ к свойству powershell с пробелом в имени

Имею следующее:

$test = Test-CsWebScheduler -TargetFqdn "pool.int.contoso.com"
Write-Output $test

Target Fqdn   : pool.int.contoso.com
Target Uri    : https://pool.int.contoso.com/Scheduler/
Result        : Failure
Latency       : 00:00:00
Error Message : Scheduling conference at
                https://pool.int.contoso.com/Scheduler/Handler/WebSchedulerHandler.ashx failed
                with status Failure.

Diagnosis     :

Теперь вопрос:

Как я могу получить доступ к «Сообщению об ошибке», «Целевому Uri» или «Целевому Fqdn»? Я могу получить доступ к результату через:

Write-Output $test.result
Failure

без проблем, но поскольку у других есть место внутри, я не нашел способа получить к ним доступ. Я пробовал следующее (нашел здесь):

Write-Output $test."Target Uri"

or

Write-Output $test.{Target Uri}

Я также пробовал следующее:

$test | Select-Object -Property "Target Uri"

or

Write-Output ($test."Target Uri")

или очень простой:

$test."Target Uri"

но это не работает, и я не возвращаю значение (также нет ошибки). Единственное сообщение об ошибке, которое я получаю, - это когда я использую:

$test | select -ExpandProperty "Target Uri"

select : Property "Target Uri" cannot be found.
At line:1 char:9
+ $test | select -ExpandProperty "Target Uri"
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (Microsoft.Rtc.S...s.WebTaskOutput:PSObject) [Selec
   t-Object], PSArgumentException
    + FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCom
   mand

Кто-нибудь знает, как я могу получить к нему доступ (не сбрасывая его во временный файл и не разбирая его)?

Обновление 01:

как и было запрошено, вот результат $ test | гм

$test | gm

   TypeName: Microsoft.Rtc.SyntheticTransactions.WebTaskOutput

Name           MemberType Definition
----           ---------- ----------
Equals         Method     bool Equals(System.Object obj)
GetHashCode    Method     int GetHashCode()
GetType        Method     type GetType()
ToString       Method     string ToString()
Diagnosis      Property   string Diagnosis {get;}
Error          Property   string Error {get;}
Latency        Property   timespan Latency {get;}
Result         Property   Microsoft.Rtc.SyntheticTransactions.ResultStatus Result {get;}
TargetFqdn     Property   string TargetFqdn {get;}
TargetUri      Property   string TargetUri {get;}
WorkflowLogger Property   Microsoft.Rtc.SyntheticTransactions.Logging.SyntheticTransactionsWorkf...

person BastianW    schedule 04.03.2017    source источник
comment
$test."Target Uri" - должно работать нормально; вы можете вставить (обновить вопрос) вывод из $test | gm?   -  person 4c74356b41    schedule 04.03.2017
comment
да, я бы тоже этого ожидал, но, как написано выше, это не так.   -  person BastianW    schedule 04.03.2017
comment
Нет никакой разницы, когда я использую Write-Output ($test."Target Uri") или _2 _... вывод из $test | gm был добавлен в мою исходную публикацию.   -  person BastianW    schedule 04.03.2017
comment
@PetSerAl Я не вижу разницы в использовании ,$test | gm или $test | gm, как уже было сказано выше. Мне кажется, что это то же самое. @Ansgar Не понял твою точку зрения. Весь код упомянут выше. Здесь нет ничего особенного или трансформации. Просто откройте PowerShell и запустите команду.   -  person BastianW    schedule 04.03.2017
comment
Вы просили показать вывод из ,$test | gm, но я уже обновил свой вопрос здесь с помощью $test | gm, и нет никакой разницы между вашей командой и командой из @ 4c74356b41. И да, $test.result работает и показывает результат, как написано в моем вопросе, поэтому $test не может быть пустым.   -  person BastianW    schedule 04.03.2017
comment
@PetSerAl Конечно, я запустил его, но нет никакой разницы между запуском $test | gm и вашим ,$test | gm, иначе я его не видел. Вывод $test | gm вставлен в исходный вопрос.   -  person BastianW    schedule 04.03.2017
comment
@BastianW На данный момент вы отредактировали свой квест и предоставили совсем другой результат для $test | gm. Вы должны четко видеть, что в именах свойств фактически нет пробела. Это должно быть $test.TargetUri, а не $test.'Target Uri'.   -  person user4003407    schedule 04.03.2017
comment
@PetSerAl да, похоже, что иногда тестовая команда производит своего рода тайм-аут, тогда результат другой, и поэтому отображаются разные имена свойств. Я могу это воспроизвести. Каждые 2–3 попытки показывали разные результаты для $test | gm ... довольно странно ... @ 4c74356b41, поскольку вы, когда первый попытался указать на $test | gm, которые привели к решению, вы можете дать ответ?   -  person BastianW    schedule 04.03.2017


Ответы (3)


Как видно при передаче переменной $ test в get-member

$test | gm

Предоставленные выходные данные показывают, что свойство Target URI на самом деле представляет собой одно слово, поэтому простое использование следующего будет работать для вас в вашем скрипте.

$test.TargetUri
person Random206    schedule 04.03.2017

Как упоминалось в комментариях: использование «имен», показанных в выходных данных, не означает, что они идентичны именам недвижимости. Однако при использовании Get-Member (или короткого сокращения GM) имена недвижимого имущества, хранящиеся внутри переменной, могут быть проверены.

Итак, используя

$test | gm

or

$test | Get-Member

Показано, что "Целевой Uri" равен "TargetUri":

[...]
TargetUri      Property   string TargetUri {get;}
[...]

Итак, используя:

$test.TargetUri

решил этот вопрос здесь.

person BastianW    schedule 05.03.2017

Попробуйте получить доступ к такому значению:

$test.PSObject.Properties["Target Uri"].Value
person Kirill Pashkov    schedule 06.03.2017