- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有和 $object 我想内置函数。我似乎无法弄清楚如何对添加功能的参数强制执行规则。
强制规则适用于与对象无关的标准函数,但是当我测试对象并运行函数时,我可以在没有所需强制参数的情况下执行。
$object | Add-Member -Name ProcessFiles -MemberType ScriptMethod -Value {
param(
[Parameter(Mandatory=$true)]
[String[]]$FILES
)
$object.ProcessFiles()
最佳答案
嗯,这很有趣。我可以确认您看到的行为(使用 PowerShell 5.0,但我想它始终是相同的)。
我不能确切地说为什么会发生这种情况,但它一定与调用代码的方式有关。
通过做$object.ProcessFiles.Script.Ast.ParamBlock.Parameters.Attributes
你可以看到 Mandatory
参数被保留,它似乎被忽略了。
解决方法
一个简单的测试
如果您不需要强制参数的所有功能(也就是说,您不关心它是否提示输入值),您可以简单地测试和 throw
:
$object | Add-Member -MemberType ScriptMethod -Name test -Value {
param(
[String[]]
$Files
)
if (!$Files) {
throw [System.ArgumentException]'-Files is required.'
}
}
[ScriptBlock]
确实强制执行属性,所以我想出了这个技巧:
$object | Add-Member -MemberType ScriptMethod -Name ProcessFiles -Value {
param(
[String[]]
$Files
)
& {
param(
[Parameter(Mandatory=$true)]
[String[]]
$Files
)
$Files
} @PSBoundParameters
}
Add-Member
之外创建脚本 block ,有一种方法可以避免这种情况。称呼;您可以创建一个将脚本 block 作为参数的函数,然后使用 AST 对其进行解析并以编程方式创建一个嵌入并执行原始脚本 block 的新脚本 block 。这可能有点矫枉过正。也许我会写一篇关于它的博客文章。
关于validation - 如何让参数强制适用于添加的 ScriptMethod 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225763/
自定义 PowerShell 脚本或函数可以在其正文开头使用标准注释进行记录: function wellDocumented { param( [int]$foo ) }
我有和 $object 我想内置函数。我似乎无法弄清楚如何对添加功能的参数强制执行规则。 强制规则适用于与对象无关的标准函数,但是当我测试对象并运行函数时,我可以在没有所需强制参数的情况下执行。 $
在 ASP.net Web 服务中,如果不指定上述内容,默认的响应格式是什么?另外,如果我的网络服务如下: [WebMethod()] public List GenerateSamp
我对 powershell 相当陌生,正在不断挖掘、学习。 具体来说,我想知道如何查看与重写方法或添加的 ScriptMethod 相关的代码。 cmdlet:Get-Service 返回一个对象,该
我们目前正在重构我们的管理脚本。刚刚看来,WinRM、错误处理和 ScriptMethod 的组合极大地降低了可用的递归深度。 请参阅以下示例: Invoke-Command -ComputerNam
我有一个 .NET 3.5 aspx 位置,其中有一个用 [WebMethod] 属性标记的方法。我用 jQuery 调用它,双向发送 JSON。这一切都很好。我的问题是,[ScriptMethod]
我有一个存储在 session 中的对象列表。然后该列表出现在网页上,每个项目旁边都有小“X”。单击其中一个时,我使用 Javascript 从页面上的列表中删除该项目,然后我向服务器发送 AJAX
我是一名优秀的程序员,十分优秀!