不能把有WhatIf参数当成可以放心运行任意脚本的依据。SupportsShouldProcess会给函数增加WhatIf和Confirm参数,但参数存在不等于每条副作用路径都受控,WhatIf也不是隔离沙箱。惠州惠城区台式电脑遇到来源不明或业务脚本时,先静态核代码与原日志,不以带上WhatIf为由启动客户脚本。

适用:本文依据Microsoft PowerShell 7.5官方说明,讨论高级函数中的ShouldProcess接入和偏好传递。实际版本仍须核对,不能反过来说其他版本一概没有这些机制。函数内部直接调用.NET方法、外部程序,和调用本身支持ShouldProcess的cmdlet,是不同执行路径,不能只看最外层函数声明。
观察:先从每个可能写文件、修改配置或调用外部业务的语句向上核其控制条件。如果动作由ShouldProcess返回值决定是否执行,要检查判断实际包住的是哪段代码,有没有判断之前或之外的额外动作。再核被调用命令自己的支持和偏好传递方式。部分子命令确实会继承WhatIf偏好;因此没有外层显式if不能单独证明子命令未受保护,但也不能假定所有命令都继承并遵守。需要按具体被调用命令和原代码逐条确认,直接方法或外部程序也不能因外层声明而自动视为受控。
结果分支:若只有参数列表而没有实现,就把副作用是否被拦住记为待核。若实现显示直接动作绕开有效判断,而该动作自身又不处理相应偏好,才有依据标出该路径风险。若已有WhatIf输出,它只说明有相应描述出现,不能替代其余路径审阅;若已有变更日志,也先核时间、调用和操作者对应关系,不能把同时间其他程序的变更直接归因到该函数。ShouldProcess在WhatIf下输出描述并返回假,是该方法的约定,不是任意代码执行的安全证明。
风险:把WhatIf当沙箱,可能遗漏直接写入或外部调用;只看到Confirm提示也不能替代权限、原备份和变更授权。为核对而临时执行未知脚本,会先触发本来要审查的风险。本文不以试运行来证明安全,也不承诺完整代码审查就能覆盖未知环境中的所有行为。
下一步:提供去敏的函数声明、所有副作用语句及其调用关系、相关命令版本和已有输出,先由原维护方确认路径。需要本地协助可拨400-877-9605,说明要核的是脚本变更范围;电脑快修网提供信息展示和第三方维修对接,具体范围、能力与安排需当次确认,不提交客户原脚本中的凭据。