微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Powershell中设置对象的多重属性

如何解决在Powershell中设置对象的多重属性

我想在Powershell中为数据收集器设置对象设置多个属性。我该怎么做,

这是我尝试失败的代码

$hash_table=@{
        displayName = "Test"
        RootPath = "C:\Test"
        Segment = -1
        SegmentMaxDuration = 600
        SegmentMaxSize = 0
        subdirectoryFormat = 1
    }
$dcs = New-Object -COM Pla.DataCollectorSet @hash_table

错误详细信息:

   New-Object : A parameter cannot be found that matches parameter name 'displayName'.
At line:9 char:45
+ $dcs = New-Object -COM Pla.DataCollectorSet @hash_table
+                                             ~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-Object],ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

    

有没有更好的方法来一次设置所有必需的属性,而不是一个一个地设置它们?

解决方法

您不能像这样飞溅对象属性,当前代码所做的是尝试将哈希表参数作为参数传递给New-Object,而不是传递给您要实例化的COM对象。您要做的是使用-Property参数设置您在对象的哈希表中命名的属性。这应该为您工作:

$hash_table=@{
        DisplayName = "Test"
        RootPath = "C:\Test"
        Segment = -1
        SegmentMaxDuration = 600
        SegmentMaxSize = 0
        SubdirectoryFormat = 1
}
$dcs = New-Object -COM Pla.DataCollectorSet -Property $hash_table

如果您想对New-Object参数使用splatting,则您的代码需要看起来像这样:

$hash_table=@{
    COMObject = 'Pla.DataCollectorSet'
    Property = @{
        DisplayName = "Test"
        RootPath = "C:\Test"
        Segment = -1
        SegmentMaxDuration = 600
        SegmentMaxSize = 0
        SubdirectoryFormat = 1
    }
}
$dcs = New-Object @hash_table

有关更多信息,请参见New-Object上的this example from Microsoft's documentation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。