xml - 如何使用 ForEach-Object 将项目添加到我的数组
问题描述
我正在尝试从 CRM 系统导出特定的请求属性以在 excel 中构建自定义报告。由于我无法直接访问它的 sql 服务器,因此我正在使用 API。API 响应可以是 XML 或 JSON。
我的第一个查询根据我在 CRM 中设置的视图返回大约 13 个请求及其基本详细信息,然后我需要使用第二个查询来获取每个请求的附加字段。所以我尝试创建一个数组,我可以在其中存储我需要的所有字段,然后可以稍后将其导出到单个 csv。
但是,当我尝试使用 ForEach-Object 将新项目添加到我的数组中时,它只会一遍又一遍地覆盖相同的项目。
同样在我的第二个 Invoke-RestMethod 为 -Uri 我应该使用“当前”请求号,但我不确定如何正确引用它。
$inputdata = @"
{
"operation": {
"details": {
"from": "0",
"limit": "200",
"filterby": "9304_MyView"
}
}
}
"@
$Params = @{OPERATION_NAME='GET_REQUESTS';INPUT_DATA=$inputdata;TECHNICIAN_KEY='mykey';format='json'}
$Response = Invoke-RestMethod -Uri http://myserver/request -Method Post -Body $Params
$RequestNumber = $Response.operation.details.WORKORDERID
$current = $RequestNumber[0]
$array = @()
ForEach-Object -InputObject $RequestNumber {
$Parameter = @{OPERATION_NAME='GET_REQUEST';TECHNICIAN_KEY='mykey'}
$data = Invoke-RestMethod -Uri http://myserver/request/$current -Method GET -Body $Parameter
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'RequestNumber' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[0]
$object | Add-Member -Name 'Subject' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[12]
$array += @($object)
}
有人可以解释我做错了什么吗?*对不起,英语不是我的母语,但我希望它有意义。
基于 Moerwald 建议的解决方案
我了解到,使用 -InputObject 参数将我的 $RequestNumber 视为单个对象并传递所有“票号”,因此我将数组创建移到 $RequestNumber 上方,然后将 $RequestNumber 通过管道传输到 ForEach-Object。
$inputdata = @"
{
"operation": {
"details": {
"from": "0",
"limit": "200",
"filterby": "9304_MyView"
}
}
}
"@
$Params = @{OPERATION_NAME='GET_REQUESTS';INPUT_DATA=$inputdata;TECHNICIAN_KEY='mykey';format='json'}
$Response = Invoke-RestMethod -Uri http://myserver/request -Method Post -Body $Params
$array = @()
$RequestNumber = $Response.operation.details.WORKORDERID |
ForEach-Object {
$Parameter = @{OPERATION_NAME='GET_REQUEST';TECHNICIAN_KEY='mykey'}
$data = Invoke-RestMethod -Uri http://myserver/request/$_ -Method GET -Body $Parameter
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'RequestNumber' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[0]
$object | Add-Member -Name 'Subject' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[12]
$array += $object
}
解决方案
$current
总是指向$RequestNumber[0]
因此$data
总是包含相同的数据。
$inputdata = @"
{
"operation": {
"details": {
"from": "0",
"limit": "200",
"filterby": "9304_MyView"
}
}
}
"@
$Params = @{OPERATION_NAME='GET_REQUESTS';INPUT_DATA=$inputdata; TECHNICIAN_KEY='mykey';format='json'}
$Response = Invoke-RestMethod -Uri http://myserver/request -Method Post -Body $Params
$RequestNumber = $Response.operation.details.WORKORDERID
$array = @()
ForEach-Object -InputObject $RequestNumber {
$Parameter = @{OPERATION_NAME='GET_REQUEST';TECHNICIAN_KEY='mykey'}
$data = Invoke-RestMethod -Uri http://myserver/request/$_ -Method GET -Body $Parameter
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'RequestNumber' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[0]
$object | Add-Member -Name 'Subject' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[12]
$array += $object
}
试图修复代码,见上文。我删除$current
了 ,并使用管道中的实际对象(= $_
,about_pipelines)为Invoke-RestMethod
. 我也更改$array += @($object)
为$array += $object
,因为您想向数组中添加一个对象,而不是向数组中添加一个新数组(这是@()
数组子表达式运算符所代表的内容)。
希望有帮助。
推荐阅读
- flask - 当 debug=False 时,带有 gevent 的烧瓶 socketIo 不起作用
- amazon-web-services - GeoSpark Zeppelin 氦气插件
- ionic-framework - 离子框架中的Playstore问题
- sql - 在一行中查找并保留唯一值
- plugins - CKeditor5 - 插件 - 小部件 - 状态
- javascript - 如何在点击时用 JavaScript 替换 HTML 文档中两个常量之间的变量?
- sql - 我可以在一个查询中选择两个表吗?
- node.js - 如何在 Node js 中使用 Google Hangout 聊天 space.message.get 获取消息
- typo3 - 具有多个选项的表单元素的翻译
- android - 用于在 Android 6.0 上返回 null 的 firebase 读取数据的 addValueEventListener