将参数限制为特定类型;使用CimInstance时

时间:2019-08-14 12:40:26

标签: powershell parameters wmi powershell-v5.1 cim

在将函数封装在CimInstance中时,是否存在一种合理的方法来限制用于函数的参数类型?

例如说我有如下方法:

function Add-DaclAce {
    [CmdletBinding()]
    [OutputType([System.Void])] #just for the MVP
    Param (
        [Parameter(Mandatory)]
        [ValidateScript({$_.CimClass.CimClassName -eq 'Win32_SecurityDescriptor'})]
        [System.Management.Infrastructure.CimInstance]$SecurityDescriptor
        ,
        [Parameter(Mandatory)]
        [ValidateScript({$_.CimClass.CimClassName -eq 'Win32_ACE'})]
        [System.Management.Infrastructure.CimInstance]$NewDaclAce
    )
    $SecurityDescriptor.DACL.Add($NewDaclAce) | Out-Null
}

问题?

  • 是否有更好的方法来强制参数的类型;即使用参数类型,而不是验证脚本?
  • 是否有一种方法可以使实现与CIM vs WMI无关,从而仅关心对象是SecurityDescriptor /访问控制项?

即我的要求仅是第一个参数是security descriptor,第二个参数是ACE;但是由于我在当前的实现中使用CIM来获取它们,因此它们恰好是CimInstance类型的。然后,我希望强制它们代表正确的基础对象,因此必须使用ValidateScript来检查CimClass。但是,从此功能的角度来看,CIM的使用是任意的。

0 个答案:

没有答案