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和一元返回运算符,它现在按预期工作。我很高兴你建议这样做,我想我快疯了。