【发布时间】:2019-04-03 21:58:00
【问题描述】:
我正在从 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 列的数组。一个命名为用户名,另一个命名为密码。如果我执行 $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
【问题讨论】:
-
根据我的经验,输出到一行或一列的所有内容都是因为您正在明确处理字符串。您将要创建一个新的 CustomPSObject 并为其分配两个属性,一个是 $Username.Answer,另一个是 $Password.Answer,正如您所指出的。或者设置该属性,选中并展开,等于另一个变量,然后对其进行一些字符串操作以使其看起来正确。
-
好吧,是的,CustomPSObject 似乎是要走的路。我还没有完成字符串操作,我是 powershell 新手。我潜入这个兔子洞更深处!非常感谢您的回复。
标签: arrays powershell arraylist