有没有一种明智的方法来限制用于函数的参数类型,当它可能被封装在一个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 与 WMI 的实现不可知,以便它只关心对象是 SecurityDescriptor/Access Control Entry?
即我的要求只是第一个参数是安全描述符,我的第二个是ACE;但是因为我在当前的实现中使用 CIM 来获取这些,所以它们恰好是CimInstance
. 然后我希望强制它们代表正确的底层对象,因此必须使用ValidateScript
来检查CimClass
. 但是,从这个功能的角度来看,CIM 的使用是一个任意的细节;它