2015-04-20 1 views
0

Это как моя строка ввода ($inputStr) выглядит следующим образом:Невозможно напечатать значение переменной внутри строки с помощью Write-Output

{ 
    "CloudId" : "67f8f457-1c4a-4622-a743-638318af04e3", 
    "ComputerName" : "Computer1", 
    "DeploymentErrorInfo" : { 
     "IsConditionallyTerminating" : null, 
     "MomAlertSeverity" : null, 
     "DisplayableErrorCode" : null, 
     "IsSuccess" : null, 
     "DetailedCode" : null, 
     "IsMomAlert" : null, 
     "DetailedSource" : null, 
     "CloudProblem" : null, 
     "IsTerminating" : null, 
     "DetailedErrorCode" : null, 
     "ExceptionDetails" : null, 
     "Code" : null, 
     "ShowDetailedError" : null, 
     "RecommendedActionCLI" : null, 
     "ErrorCodeString" : null, 
     "IsDeploymentBlocker" : null, 
     "ErrorType" : null, 
     "RecommendedAction" : null, 
     "Problem" : null, 
     "MessageParameters" : null 
    }, 
    "GrantedToList" : [], 
    "ID" : "00000000-0000-0000-0000-000000000000", 
    "LocalAdminUserName" : "administrator", 
    "Name" : "Computer1", 
    "NewVirtualNetworkAdapterInput" : [], 
    "OperatingSystemInstance" : { 
     "Architecture" : null, 
     "Edition" : null, 
     "Description" : null, 
     "Version" : null, 
     "Name" : null, 
     "OSType" : null, 
     "ProductType" : null 
    }, 
    "Owner" : { 
     "UserName" : null, 
     "RoleID" : null, 
     "RoleName" : null 
    }, 
    "StampId" : "23e6799c-33d4-45ea-8e4f-49ec7d5f26e0", 
    "StartVM" : true, 
    "VMNetworkAssignments" : [], 
    "VMTemplateId" : "fdc73f71-1c6d-4e8f-9d02-21c7f4756c2d" 
} 

Я превращаю- к объекту с помощью ConvertFrom-Json команды.

$paramObject = ConvertFrom-Json -InputObject $inputStr 

Я хочу, чтобы напечатать 'VM Computer1 is ready', но он не работает, и это на самом деле выводит всю строку:

Write-Host "VM $paramObject.Name is ready" # prints the entire thing 
Write-Host 'VM $paramObject.Name is ready' # prints command 
Write-Host $paramObject.Name # prints VM Name so I know I am able to get the VM Name. 
+0

Вы могли бы увидеть основную проблему, посмотрев на результат этой первой команды «Write-Host» немного ближе. То есть вы бы видели '.Name' на выходе сразу после закрытия'} 'из объекта, указывающего, что выбор элемента не работал правильно. –

ответ

5

При использовании строки интерполяции, вам нужно использовать sub-expression $(...) всякий раз, когда вы хотите доступа к члену объекта:

Write-Host "VM $($paramObject.Name) is ready" 

в противном случае, PowerShell будет рассматривать .Name часть как обычный текст.

+0

Cool. Это сработало. Спасибо за ответ. – Asdfg

Смежные вопросы