gpt4 book ai didi

powershell - 将成员添加到 PSCustomObject 变量 - 了解发生了什么

转载 作者:行者123 更新时间:2023-12-02 23:34:12 24 4
gpt4 key购买 nike

我试图弄清楚这里发生了什么,我想知道是否有人知道一种资源可以为我指明正确的方向,或者可以为我解释一下。

我正在尝试创建一个 PSCustomObject 变量,然后是它的成员,如下所示:

$myObject += [PSCustomObject]@{
FirstName = 'Bill'
LastName = 'Bobbins'
Age = '30'
}

$myObject += [PSCustomObject]@{
FirstName = 'Ben'
LastName = 'Bobbins'
Age = '40'
}

因此,代码的第一位执行正常,但第二位导致错误“方法调用失败,因为 [System.Management.Automation.PSObject] 不包含名为‘op_Addition’的方法。”此外,如果我通过管道将 $myObject 传递给 get-member,我可以看到 $myObject 是 TypeName:System.Management.Automation.PSCustomObject。

现在,如果我先将 $myObject 设置为空数组,然后尝试添加成员,我就成功了。这段代码可以正常工作:
$myObject=@()

$myObject += [PSCustomObject]@{
FirstName = 'Bill'
LastName = 'Bobbins'
Age = '30'
}

$myObject += [PSCustomObject]@{
FirstName = 'Ben'
LastName = 'Bobbins'
Age = '40'
}

如果我现在通过管道将 $myObject 传递给 get-member,我仍然会得到 TypeName:System.Management.Automation.PSCustomObject。所以我的问题是,当两个示例的数据类型相同时,为什么我可以在第二个示例中向 $myObject 添加多个成员,而不是在第一个示例中?

非常感谢任何帮助!

谢谢

最佳答案

这里的问题是如何Get-Member/管道工作 - 之前它让我绊倒了!

这将展开数组,并为您提供 的类型每个元素当它通过管道时:

$myObject | Get-Member

这将通过 整个对象 ,并正确地为您提供类型 System.Object[]
 Get-Member -InputObject $myObject

您可以通过例如添加 $myObject += "test string" 来测试这一点。到您的代码末尾并尝试以两种方式获取成员。第一个将同时返回 PSObjectString类型。

旁注: $myObject = @()可以通过在第一次声明时指定创建数组来避免行 $myObject .例子:
[array]$myObject = [PSCustomObject]@{

[PSCustomObject[]]$myObject = [PSCustomObject]@{

关于powershell - 将成员添加到 PSCustomObject 变量 - 了解发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com