Как объединить и переименовать свойства массивов в powershell? - PullRequest
0 голосов
/ 30 октября 2018

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

код:

Function Get-CWConfiguration
{
[string]$BaseUri     = "$CWServerRoot"
[string]$Accept      = "application/vnd.connectwise.com+json; version=v2015_3"
[string]$ContentType = "application/json"
[string]$Authstring  = $CWInfo + '+' + $CWCredentials1 + ':' + $CWCredentials2 
$encodedAuth         = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(($Authstring)));

$Headers=@{"Authorization"="Basic $encodedAuth"}
Invoke-RestMethod -URI $BaseURI -Headers $Headers -ContentType $ContentType -Method Get
}

$username = (Get-CWConfiguration).questions | Where-Object {($_.questionid -eq 419)} | Sort-Object -Property questionid | select answer
$password = (Get-CWConfiguration).questions | Where-Object {($_.questionid -eq 420)} | Sort-Object -Property questionid | select answer

Все, что выше переменной $username, - это то, что связано с API, и я не изменял это. Код ниже - лучший способ найти нужную мне информацию. Это возвращает каждую переменную как массив, что нормально, но если это произойдет, мне нужно иметь массив с 2 столбцами. 1 с именем пользователя и другой с именем пароля. если я сделаю $username | Get-Member, то вернется:

Name        MemberType   Definition                         
----        ----------   ----------                         
Equals      Method       bool Equals(System.Object obj)     
GetHashCode Method       int GetHashCode()                  
GetType     Method       type GetType()                     
ToString    Method       string ToString()                  
answer      NoteProperty string answer=admin@admin.com

Моя конечная цель состоит в том, чтобы переменная типа $credentials выводила что-то похожее на:

Username             Password
--------            ----------                         
admin1@admin.com      Password1
admin2@admin.com      Password2
admin3@admin.com      Password3

Большинство методов, которые я пробовал, приводили ко всему выводу в 1 строку или 1 столбец. Я не уверен, следует ли мне комбинировать массивы и переименовывать поля $username.answer и $password.answer или создавать PSObject? Моя основная трудность заключалась в том, что обе переменные имеют один и тот же answer NoteProperty

1 Ответ

0 голосов
/ 30 октября 2018

Вы хотите создать новые объекты с расширенными свойствами текущих объектов. Все это может выглядеть примерно так (обратите внимание, что я вручную создаю аналоги того, с чем вы все имеете дело, и игнорируете манипуляции со строками, которые вам, вероятно, придется делать)

$Username = New-Object -TypeName pscustomobject -Property @{Answer = "Answer:Hithisispatrick"}
$Password = New-Object -TypeName pscustomobject -Property @{Answer = "Answer:HelloThisisSquidward"}

$UsernameAnswer = $Username | Select -ExpandProperty Answer
$PasswordAnswer = $Password | Select -ExpandProperty Answer


$Final = New-Object -TypeName pscustomobject -Property @{UserName= $UsernameAnswer ; Password = $PAsswordAnswer}

Это должно дать вам что-то вроде этого:

UserName               Password
--------               --------
Answer:Hithisispatrick Answer:HelloThisisSquidward

Затем, если вы хотите параметризовать / развернуть его, вы сможете затем добавить его в цикл foreach и вывести его в произвольный объект, установив его равным массиву, который затем строится из этих объектов, например так (я пока воспользуюсь, чтобы упростить показ):

$Count = 0
$Username = New-Object -TypeName pscustomobject -Property @{Answer = "Answer:Hithisispatrick"}
$Password = New-Object -TypeName pscustomobject -Property @{Answer = "Answer:HelloThisisSquidward"}
$Array = While ($Count -lt 5){
$UsernameAnswer = $Username | Select -ExpandProperty Answer
$PAsswordAnswer = $Password | Select -ExpandProperty Answer

$Final = New-Object -TypeName pscustomobject -Property @{UserName= $UsernameAnswer ; Password = $PAsswordAnswer}
$Final
$Count += 1
}


$Array

Это производит что-то вроде этого:

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