Function PowerShell在返回对象时添加项的int索引
我在这里看到了很多类似的问题,但没有一个解决方案适合我 我有一个像这样的函数Function PowerShell在返回对象时添加项的int索引,function,powershell,object,return,Function,Powershell,Object,Return,我在这里看到了很多类似的问题,但没有一个解决方案适合我 我有一个像这样的函数 函数获取管理设备{ #…(这里的参数和内容)。。。 $batchResponse=调用RestMethod@restParams $responses=@{} foreach($batchResponse.responses中的响应){ $responses.Add($response.id,$response.body)>$null } 返回$responses } 这被称为 $data=Get Devices-A
函数获取管理设备{
#…(这里的参数和内容)。。。
$batchResponse=调用RestMethod@restParams
$responses=@{}
foreach($batchResponse.responses中的响应){
$responses.Add($response.id,$response.body)>$null
}
返回$responses
}
这被称为
$data=Get Devices-AccessToken$AccessToken-DeviceIds$DeviceIds
当我在函数调用内部进行调试时,当我看到$response变量时,我得到了我期望的结果,它类似于
PS>$responses
名称值
---- -----
d1290207-c693-4663-88bf-58512…{@odata.context=https://graph.microsoft.com/v1.0/$metadat…
7ad71b70-b992-490f-8822-1561a…{@odata.context=https://graph.microsoft.com/v1.0/$metadat…
PS>$responses.count
1.
然而,当我尝试在函数调用之后使用$data
变量时,我得到了以下结果
PS>$data
0
1.
名称值
---- -----
d1290207-c693-4663-88bf-58512…{@odata.context=https://graph.microsoft.com/v1.0/$metadat…
7ad71b70-b992-490f-8822-1561a…{@odata.context=https://graph.microsoft.com/v1.0/$metadat…
PS>$data.count
3.
我太糊涂了。我用$null
将变量添加到哈希表中的$null。
我添加了带有return的一元运算符,如return$responses
,这是“about\u return”PowerShell文档中推荐的。
我试着省略return关键字,改用ArrayList,改用array,等等
到底是怎么回事,为什么我不能从这个函数返回哈希表?!我觉得我快疯了。文档中没有提到直接从函数返回哈希表。您提到的常见问题是能够返回整个数组,而不是沿着管道进行迭代
返回哈希表是一种常见且直接的方法。乍一看,您的代码可能是:
function Get-ManagedDevices {
# ...(params and stuff here)...
$batchResponse = Invoke-RestMethod @restParams
$responses = @{}
foreach ($response in $batchResponse.responses) {
$responses.Add($response.id, $response.body)
}
return $responses
}
这应该不会更复杂。删除逗号在返回哈希时无效。$null
对哈希表没有影响。Add(…)
方法
根据您的结果和示例,可能有您以前使用ArrayList尝试的一些工件。ArrayList上的.Add(…)
方法将发出它添加到的索引。当我们忘记[void]
或|Out Null
或$Null=…Add(…)
这通常会导致不必要的输出污染管道。当您获得2个索引号时,您的数据…文档中没有提到直接从函数返回哈希表。您所指的常见问题是能够返回整个数组,而不是沿着管道进行迭代
返回哈希表是一种常见且直接的方法。乍一看,您的代码可能是:
function Get-ManagedDevices {
# ...(params and stuff here)...
$batchResponse = Invoke-RestMethod @restParams
$responses = @{}
foreach ($response in $batchResponse.responses) {
$responses.Add($response.id, $response.body)
}
return $responses
}
这应该不会更复杂。删除逗号在返回哈希时无效。$null
对哈希表没有影响。Add(…)
方法
根据您的结果和示例,可能有您以前使用ArrayList尝试的一些工件。ArrayList上的
.Add(…)
方法将发出它添加到的索引。当我们忘记[void]
或|Out Null
或$Null=…Add(…)
这通常会导致不必要的输出污染管道。当您获得2个索引号时,您的数据…您似乎遗漏了所属集合类型的定义。.Add()
-ing things to。我猜它是一个ArrayList,tho。当你添加到它时,它总是输出一个索引号。修复方法是不要使用不推荐的ArrayList类型。相反,使用Generic.List
。我没有听说过不推荐使用它。谢谢你的提示。在这个示例中,我只是将$responses添加到哈希表中。作为其他人提到它一定是某个奇怪的会话或vscode工件,因为我重新启动了整个安装程序,现在它在返回中没有任何>$null或一元运算符的情况下按预期工作。非常欢迎并感谢您的澄清![grin]您似乎遗漏了所属集合类型的定义。.Add()
-ing things to。我猜它是一个ArrayList,tho。当你添加到它时,它总是输出一个索引号。修复方法是不要使用不推荐的ArrayList类型。相反,使用Generic.List
。我没有听说过不推荐使用它。谢谢你的提示。在这个示例中,我只是将$responses添加到哈希表中。作为其他人提到它一定是某个奇怪的会话或vscode工件,因为我重新启动了整个安装程序,现在它在没有返回任何>$null或一元运算符的情况下按预期工作。非常欢迎您&感谢您的澄清![grin]谢谢。这肯定是某种人工制品。我重新启动了计算机,在vscode中收到一些奇怪的错误消息。我重新安装了它,然后取出了>$null和一元返回运算符,它现在按预期工作。我很高兴你建议这样做,我想我快疯了。谢谢。这肯定是某种人工制品。我休息了我重新启动了我的计算机,在vscode中收到一些奇怪的错误消息。我重新安装了它,然后取出了>$null和一元返回运算符,它现在按预期工作。我很高兴你建议这样做,我想我快疯了。