为了账号安全,请及时绑定邮箱和手机立即绑定

如何将变量严格键入为特定的 WMI 类?

如何将变量严格键入为特定的 WMI 类?

C#
ITMISS 2022-10-15 14:56:27
在大多数情况下,您对函数参数的期望是[wmiclass]. 但是,我正在使用自定义类在自定义命名空间中工作。当我使用Get-Member时,它显示类型为:System.Management.ManagementClass#ROOT\namespace\class_name如何将该 WMI 类指定为变量类型?此示例不起作用:param(    [wmiclass#root\namespace\class_name]    $Class)这返回Unable to find type [System.Management.ManagementClass#ROOT\namespace\class_name].出于这个问题的目的,假设我正在尝试定位ROOT\cimv2\Win32_Service标记c#,因为它是切线相关的,我很好奇这是否在那里解决
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

你能做这个吗?


Param (

    [PsTypeName("System.Management.ManagementClass#ROOT\namespace\class_name")]

    $Class

)

或者,如果使用 CIM 而不是 WMI,则:


Param (

    [PsTypeName("System.Management.Infrastructure.CimInstance#root/namespace/class_name")]

    $Class

)

测试用例:


function test {

    Param (

        [psTypename("System.Management.ManagementClass#ROOT\cimv2\StdRegProv")]

        $mine

    )

    $mine

}


$reg = [wmiclass]"\\.\root\cimv2:StdRegprov"

$reg | gm

#outputs:    TypeName: System.Management.ManagementClass#ROOT\cimv2\StdRegProv


[wmiclass]$wmi = ""

$wmi | gm

# outputs:    TypeName: System.Management.ManagementClass#\


test $wmi

# Errors:    test : Cannot bind argument to parameter 'mine', because PSTypeNames of the argument do not match the PSTypeName

# required by the parameter: System.Management.ManagementClass#ROOT\cimv2\StdRegProv.

# At line:1 char:6

# + test $wmi

# +      ~~~~

#     + CategoryInfo          : InvalidArgument: (:) [test], ParameterBindingArgumentTransformationException

#     + FullyQualifiedErrorId : MismatchedPSTypeName,test


test $reg

# outputs:    NameSpace: ROOT\cimv2

# Name                                Methods              Properties

# ----                                -------              ----------

# StdRegProv                          {CreateKey, Delet... {}

PowerShell V2 测试:


function testv2 {    

    param(

        [ValidateScript({($_ | Get-Member)[0].typename -eq 'System.Management.ManagementClass#ROOT\cimv2\StdRegProv'})]

        $mine

    )

    $mine

}


testv2 $reg


# outputs:    NameSpace: ROOT\cimv2

#

# Name                                Methods              Properties

# ----                                -------              ----------

# StdRegProv                          {CreateKey, Delet... {}


testv2 $wmi


# Error:    testv2 : Cannot validate argument on parameter 'mine'. The "($_ | gm)[0].typename -eq 'System.Management.ManagementClas

# s#ROOT\cimv2\StdRegProv'" validation script for the argument with value "" did not return true. Determine why the valid

# ation script failed and then try the command again.

# At line:1 char:7

# + testv2 <<<<  $wmi

#     + CategoryInfo          : InvalidData: (:) [testv2], ParameterBindingValidationException

#     + FullyQualifiedErrorId : ParameterArgumentValidationError,testv2


查看完整回答
反对 回复 2022-10-15
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号