有没有从微软何时添加任何正式指引-Confirm,-Force以及-WhatIf自定义PowerShell命令参数?关于何时/如何使用这些参数似乎没有明确的共识.例如这个问题.
在没有正式指导方针的情况下,是否有最佳实践或经验法则?这是一些更多的背景,我目前(可能有缺陷)的理解:
该-WhatIf标志显示cmdlet 在不实际执行任何操作的情况下将执行的操作.这对于潜在的不稳定操作的干运行非常有用,可以看到实际结果.如果cmdlet的Cmdlet属性的SupportsShouldProcess属性设置为true,则会自动添加该参数.
看起来好像(但我希望在这里看到更多的官方指导),-WhatIf如果你要添加或删除资源,你应该添加.(例如删除文件.)更新现有资源的操作可能不会从中受益.对?
该-Force开关用于声明"我知道我在做什么,我确信我想这样做".例如,复制文件(Copy-File)时,-Force参数表示:
允许cmdlet复制无法以其他方式更改的项目,例如复制只读文件或别名.
所以对我来说,似乎(再次,我喜欢这里的一些官方指导),-Force当你遇到cmdlet失败的情况时,你应该添加一个可选参数,但可以说服它完成动作.
例如,如果您要创建一个新资源,它将破坏具有相同名称的现有资源.cmdlet的默认行为将报告错误并失败.但是如果你添加-Force它将继续(并覆盖现有资源).对?
如果cmdlet 设置为true,则会-Confirm自动添加该标志.在cmdlet中,如果您调用,则会提示用户执行操作.如果添加了标志,则不会有提示.(即通过cmdlet调用添加确认.)-WhatIfSupportsShouldProcessShouldProcess-Confirm
因此,-Confirm只要cmdlet对系统有很大影响,就应该可用.就像这样,-WhatIf只要添加或删除资源,就应该添加.
考虑到我可能不正确的理解,这里有一些我想要具体回答的问题:
-WhatIf/ -Confirm?-Force?-Confirm和-Force?我还没有研究文档是否详细,但以下是基于我的观察:
你应该使用-WhatIf任何改变的东西.更新是可以从中受益的更改-WhatIf(例如,如果您想进行大量更新,该怎么办?).
-Force表示"强制覆盖现有项"或"覆盖只读文件系统属性".在任何一种情况下,动作的成功取决于用户是否具有权限.
-Confirm而-Force不是相互排斥的.例如,您可以确认写入文件的操作,但该文件可能受只读属性的保护.在这种情况下,除非您还指定,否则操作将失败-Force.
作为补充观察,-Force它不应否决-WhatIf。或者换句话说:-WhatIf他优先于-Force。
如果您使用:
Get-ChildItem -Recurse | Remove-Item -Recurse -Force -WhatIf
Run Code Online (Sandbox Code Playgroud)
它将产生以下输出:
如果:在目标“E:\some directory”上执行“删除目录”操作。
-Force即使指定了,它也不会实际删除这些项目。
这意味着你永远不应该写:
if($Force -or $Pscmdlet.ShouldProcess($)) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果您想验证这些通用参数的实现是否符合准则(例如,Set-Xxx cmdlet 应该具有 -Confirm 和 -WhatIf),那么您可以使用 Excellent 模块PsScriptAnalyzer(基于代码分析)。
确保模块已安装:
PS E:\> Install-Module -Name 'PsScriptAnalyzer'
Run Code Online (Sandbox Code Playgroud)
然后运行PowerShell代码分析,如下所示:
PS E:\> Invoke-ScriptAnalyzer -Path . | FL
RuleName : PSUseShouldProcessForStateChangingFunctions
Severity : Warning
Line : 78
Column : 10
Message : Function 'Update-something' has verb that could change system state.
Therefore, the function has to support 'ShouldProcess'.
Run Code Online (Sandbox Code Playgroud)
文档(和来源)可以在 GitHub 上找到: https ://github.com/PowerShell/PSScriptAnalyzer
| 归档时间: |
|
| 查看次数: |
15299 次 |
| 最近记录: |