PSScriptAnalyzer 规则和建议

以下准则来自 PowerShell 团队和社区的共同努力。 这些准则按类型进行组织。 每种类型内都有一套规则。 规则按 PSScriptAnalyzer 规则实现中定义的 严重性 分组。 标记的 TBD 严重程度表示“待定”。标注为待定的项目是目前没有规则定义的推荐。

Cmdlet 设计规则

严重性:错误

未定义任何规则。

严重性:警告

严重性:信息

未定义任何规则。

严重性:TBD

  • 支持 Force 参数进行交互式会话。 如果 cmdlet 以交互方式使用,请始终提供 Force 参数来替代交互式操作,例如提示或读取输入行。 Force参数很重要,因为它允许你的命令小工具在非交互式脚本和主机中使用。
  • 文档输出对象
  • 模块必须可加载
  • 没有语法错误
  • 未解析的依赖项是错误
  • 派生自 Cmdlet 或 PSCmdlet 类
  • 指定 Cmdlet 属性
  • 重写输入处理方法
  • 指定 OutputType 属性
  • 将单个记录写入管道
  • 使 cmdlet 不区分大小写和保留大小写

脚本函数

严重性:错误

未定义任何规则。

严重性:警告

严重性:信息

未定义任何规则。

严重性:TBD

  • 避免使用 Clear-Host
  • 避免使用 UNC 文件路径
  • 错误处理
    • 调用 cmdlet 时使用 -ErrorAction Stop
    • 调用 noncmdlets 时使用$ErrorActionPreference设置为 或StopContinue
    • 避免使用标志来处理错误
    • 避免使用 $?
    • 避免将 null 变量作为错误条件进行测试
    • $Error[0] 复制到自己的变量
  • 避免在脚本中使用管道
  • 如果声明了返回类型,则 cmdlet 必须返回该类型。 如果返回类型,则必须声明返回类型。

脚本样式

严重性:错误

未定义任何规则。

严重性:警告

严重性:信息

严重性:TBD

  • 提供用法示例
  • 有关工具工作原理的详细信息,请使用“说明”部分
  • 每个导出的命令都应有帮助(包括参数文档)
  • 记录为脚本编写的 PowerShell 版本
  • 缩进代码
  • 避免反杆

脚本安全性

严重性:错误

严重性:警告

严重性:信息

未定义任何规则。

严重性:TBD

  • 避免初始化API密钥和凭证变量(信息泄露)

严重性:错误

严重性:警告

未定义任何规则。

严重性:信息

  • ReturnCorrectTypesForDSCFunctions 规则介绍了以下三项建议
    • 避免从 Set-TargetResource 或 Set(基于类)函数返回任何对象
    • Test-TargetResource 或 Test(基于类)函数返回布尔值
    • Get-TargetResource 或 Get(基于类)函数返回对象
  • DSC 资源应具有 DSC 测试 DSCTestsPresent
  • DSC 资源应具有 DSC 示例 DSCExamplesPresent

严重性:TBD

  • 对于 Windows PowerShell v4,资源模块应为每个资源配备 .psd1 一个 and schema.mof 文件
  • 资源模块应具有 .psd1 文件(始终)和 schema.mof(对于非类资源),请参阅 问题 #116
  • 资源模块应有一个包含资源的 DscResources 文件夹——参见 问题 #130
  • MOF 应为每个元素提供说明 - 请参阅 问题 #131
  • Set DSC 方法使用 ShouldProcess

引用