如何在powershell中组合和重命名数组的属性



我正在从ConnectWise提供的API中提取数据。我试图提取一个用户名和密码列表,并将它们放入一种格式中,我可以在另一个脚本中引用(或与此脚本组合(,也可以导出到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?我的主要困难是两个变量都有相同的answerNoteProperty

您希望使用当前对象的扩展属性创建新对象。这一切看起来可能都是这样的(注意,我正在为你们正在处理的事情手动创建模拟,而忽略了你们可能必须进行的字符串操作(

$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循环中,并让它输出自定义对象,将其设置为一个数组,然后由这些对象构建,就像这样(我将使用while使其更容易显示(:

$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

最新更新