powershell - 在 Powershell 中动态使用数组值作为 API POST 参数
问题描述
我正在尝试创建一个 API 来使用 powershell 创建天蓝色组,但我遇到了一些死胡同。我需要动态创建多个组,每个组具有不同的成员,但似乎我不能只将数组传递给 API 请求正文。每个数组值都应该用双引号括起来,如下所示:
$membersArray = "johnp.com","RIF@gmail.com", "aao@gmail.com", "imz@gmail.com"
Write-Host "$($membersArray)"
[string[]]$testArr ="allen@gmailcom", "JohnMartin@gmail.com"
$Method="Post"
$Header = @{"content-type"="application/json";
"Authorization"="Bearer $token"}
$Body =@"
{
"Tenant":"organization.onmicrosoft.com",
"Group": "TEST_GROUP_MADE_BY_ALLEN7",
"ApplicationId" : "",
"DelegatedServiceId": "",
"Owners":["$($testArr[0])", "$($testArr[1])"],
"Members": ["$($membersArray)"],
"Description":"test can be deleted for group creation",
"ResultFormat": "json"
}
"@
$Result =Invoke-WebRequest -Uri $URL -Method $Method -Headers $Header -Body $Body
$result.RawContent
$Result.StatusCode
我已经编辑了 URL 端点和正确的租户名称,因为这是我的公司工作,这是我的测试脚本,然后将其应用到我创建的从 csv 文件中获取输入数据的循环。
如果我们打印出 $Body 变量,我们将得到:
Write-Host "$Body"
{
"Tenant":"organization.onmicrosoft.com",
"Group": "TEST_GROUP_MADE_BY_ALLEN7",
"ApplicationId" : "",
"DelegatedServiceId": "",
"Owners":["allen@gmailcom", "JohnMartin@gmail.com"],
"Members": ["johnp.com RIF@gmail.com aao@gmail.com imz@gmail.com"],
"Description":"test can be deleted for group creation",
"ResultFormat": "json"
}
如果我们查看 $Body 对象的成员参数,数组值没有用双引号和逗号分隔,例如:“arrayValue”、“arrayValue2”。
所以我的问题是:有没有办法在不使用 switch case 语句的情况下做到这一点,因为每个组的成员从 10 到 45 不等,如果我用 switch 语句强行这样做,它会使脚本完全不可读,并且可以在脚本开发中造成很多人为错误。任何帮助,将不胜感激。谢谢!
解决方案
我似乎明白了。这部分代码将变量 $Body 设置为 JSON:
$Body =@"
{
"Tenant":"organization.onmicrosoft.com",
"Group": "TEST_GROUP_MADE_BY_ALLEN7",
"ApplicationId" : "",
"DelegatedServiceId": "",
"Owners":["$($testArr[0])", "$($testArr[1])"],
"Members": ["$($membersArray)"],
"Description":"test can be deleted for group creation",
"ResultFormat": "json"
}
"@
因此,要修复它,您必须将 $Body 变量设置为普通哈希表,方法是删除{ 之前的 " 和右大括号 }@ 并以正确的语法设置值,如下所示:
$Body = @{
"Tenant"="organization.onmicrosoft.com"
"Group"= "TEST_GROUP_MADE_BY_ALLEN8"
"ApplicationId" = ""
"DelegatedServiceId"= ""
"Owners"= $testArr
"Members"= $membersArray
"Description"="test can be deleted for group creation"
"ResultFormat"= "json"
}
之后,我们必须创建另一个变量来保存 $body 的数据,然后将其转换为 Json,以便我们可以将其用作我们的 API Post Body,如下所示:
$JSON= $Body | ConvertTo-Json
#The result of this will be this:
Write-Host $JSON
#Result of Write-Host $JSON
{
"Owners": [
"allen@gmail.com",
"John@gmail.com"
],
"ApplicationId": "",
"Group": "TEST_GROUP_MADE_BY_ALLEN8",
"DelegatedServiceId": "",
"ResultFormat": "json",
"Description": "test can be deleted for group creation",
"Members": [
"john@gmail.com",
"RIF@gmail.com",
"aao@gmail.com",
"ilmz@gmail.com"
],
"Tenant": "organization.onmicrosoft.com"
}
#Just use it like so:
$Result =Invoke-WebRequest -Uri $URL -Method $Method -Headers $Header -Body $JSON
$Result.StatusCode
然后我们可以在循环等中使用它来动态地使用数组作为 API 发布请求主体的参数。
推荐阅读
- python - Raspi 相机模块不在单独的进程中工作
- r - R中的聚类变量和内存使用
- mysql - 将大型 csv 导入规范化关系数据库(具有多个表)的最佳实践是什么
- javascript - 按重复 ID 对对象数组进行排序
- java - 将命名空间添加到根元素和所有子 JDOM 的前缀
- memory-management - CRITICAL_SECTION 结构是否需要对齐?
- java - Hibernate Projection 查询坏了
- django - 如何在不复制粘贴的情况下创建多个卡片视图
- oracle - maven 本地存储库包含 2 个用于 oracle 依赖的路径
- python - python中的字符串日期转换