在 PowerShell 中注释代码

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 使用注释符号 (#) 的 PowerShell 单行注释
  2. PowerShell 使用注释块注释多行代码
  3. 使用 Exit 命令的 PowerShell 边缘案例场景
在 PowerShell 中注释代码

如果你使用过其他语言,例如 Bash、Python 和 Ruby,则在 Windows PowerShell 中注释掉将是类似的。

本文将讨论可用于在 Windows PowerShell 中注释代码的所有用例。

使用注释符号 (#) 的 PowerShell 单行注释

从一开始,PowerShell V1.0 就已经发布并发布给公众,具有注释代码的功能。我们使用符号(#)注释代码。我们用许多名称来称呼这个符号,例如数字符号或哈希,但微软官方将其称为注释符号。

单个注释符号 (#) 将注释掉从第一个 # 到行尾的代码。当然,你也可以将多个注释符号放在一行中。

示例代码:

#######################################################
# Examples of one-line comments in Windows PowerShell #
#######################################################

Get-Process -Name *host* #### You could put more.

Get-Process -Name *host* # | Stop-Service # You can use it to comment out a part of a line.

# Get-Process -Name *host* # This will comment out the whole line.

注释代码时,最好在注释符号和代码之间留一个空格。一些 cmdlet 使用注释符号,但不用于注释代码。例如,#REQUIRES cmdlet 是一个众所周知的 PowerShell 语句,它将阻止脚本运行,除非满足模块或先决条件管理单元。

示例代码:

Get-Module AzureRM.Netcore | Remove-Module
#REQUIRES -Modules AzureRM.Netcore

使用这些最佳实践,我们可以避免脚本中出现不必要的错误。

PowerShell 使用注释块注释多行代码

要在不使用每行多个注释符号的情况下注释多行代码,我们可以方便地用小于 (<) 和大于 (>) 符号将我们的注释符号括起来。我们称之为注释块。

带有小于号 (<#) 的注释符号将作为我们注释块的开始标记,而带有大于号的注释符号将用作结束标记 (#>)。

示例代码:

<#
Get-Process -Name *host*
Stop-Service -DisplayName Windows*Update -WhatIf
#>

值得注意的是,你可以在注释块之间插入单个注释符号。

示例代码:

<#
Get-Process -Name 'host1'

#Tested up until this point

Stop-Service -DisplayName Windows*Update -WhatIf
#>

但是,通过插入一组新的注释块标签来嵌套注释块将导致错误。

示例代码:

<#
Nope, these are not allowed in PowerShell.

<# This will break your first multiline comment block... #>

...and this will throw a syntax error. #This line will execute the throw cmdlet
#>

或者,按下 Ctrl+J 并单击 Comment Block 将在你的脚本中生成一个代码块。

使用 Exit 命令的 PowerShell 边缘案例场景

请记住,Exit 命令将终止并关闭你的脚本环境。因此,在 Exit 命令之后写入的任何内容都不会执行。我们称之为边缘案例场景。在 Exit 命令之后写一些东西是可能的,但不推荐,因为其他脚本环境可能会误读这些额外的行并导致错误。

示例代码:

Get-Process -Name 'host1'
exit

Anything beyond the `<# exit #>` line is not executed inside the PowerShell scripting environment. However, as mentioned before, this is not recommended despite being possible.
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn