powershell - 将参数限制为特定类型;使用 CimInstance 时
问题描述
有没有一种明智的方法来限制用于函数的参数类型,当它可能被封装在一个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 的使用是一个任意的细节;它
解决方案
推荐阅读
- python - 通过比较散列密码登录
- java - 为什么在链表的节点中插入值时需要一个临时节点?
- javascript - npm 中的 ERR_SSL_WRONG_VERSION_NUMBER
- python - TypeError: __init__(): 构造函数参数与 face_recognition 调用不兼容
- sql - 如何在 sqlite 中过滤 SUM(flag) OVER (...)
- c++ - 为什么这种替换失败会产生错误?
- flutter - 根据警报对话框响应更改开关按钮颜色
- c - 在IDE中为什么不自动出现;(分号)?
- javascript - 更改文本时可以触发 contenteditable 文本吗?HTML Javascript
- javascript - Discord.js v12 - deleteMessage 抛出旧消息错误