преобразование объекта system.array в json объект в powershell - PullRequest
2 голосов
/ 21 января 2020

Я вхожу в Azure, используя azure cli следующим образом:

$login = az login

Вывод выглядит следующим образом:

[
  {
    "cloudName": "AzureCloud",
    "id": "xxxxxxxxxxxxxxxxxxx",
    "isDefault": false,
    "name": "ABC",
    "state": "Enabled",
    "tenantId": "yyyyyyyyyyyyy",
    "user": {
      "name": "xxxxxxx",
      "type": "user"
    }
  },
  {
    "cloudName": "AzureCloud",
    "id": "xxxxxxxxxxxxxxxxxxxx",
    "isDefault": true,
    "name": "PQR",
    "state": "Enabled",
    "tenantId": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "user": {
      "name": "xxxxxxxxxx",
      "type": "user"
    }
  }
]

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

$login[1].id

Но оказывается, что $ login не является json объектом. Я пытался сделать $ логин | ConvertTo- Json. Не работает, как я хочу.

1 Ответ

1 голос
/ 21 января 2020

az login в этом случае просто даст вам массив строк вывода. Вы можете проверить это с помощью $login.GetType(), что даст вам System.Object[]. Вы можете использовать ConvertFrom-Json для преобразования массива в пользовательский объект PowerShell. Затем вы можете просто получить доступ к свойству id подписки второго объекта.

$login = az login

$json = $login | ConvertFrom-Json

Write-Output $json[1].id
# ID should be printed here

Вы можете просмотреть свойства PSCustomObject с помощью Get-Member:

PS C:\> $json | Get-Member

    TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition                                                                                
----        ----------   ----------                                                                                
Equals      Method       bool Equals(System.Object obj)                                                            
GetHashCode Method       int GetHashCode()                                                                         
GetType     Method       type GetType()                                                                            
ToString    Method       string ToString()                                                                         
cloudName   NoteProperty string cloudName=AzureCloud                                                               
id          NoteProperty string id=xxxx-xxxx-xxxx-xxxx                                        
isDefault   NoteProperty bool isDefault=True                                                                       
name        NoteProperty string name=xxxxxxx                                                 
state       NoteProperty string state=Enabled                                                                      
tenantId    NoteProperty string tenantId=xxxx-xxxx-xxxx-xxxx                               
user        NoteProperty System.Management.Automation.PSCustomObject user=@{name=xxxx@something.com; type=user}

Вы также можете взглянуть на Connect-AzAccount, то есть Azure PowerShell способ входа в систему. Полное руководство можно найти по адресу Войдите с помощью Azure PowerShell . az login - это Azure CLI метод входа в систему, который является кросс-платформенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...