ChatGPT解决这个技术问题 Extra ChatGPT

如何在 PowerShell 中注释掉代码?

如何在 PowerShell(1.0 或 2.0)中注释掉代码?

注意 '#' 是许多 shell 和脚本语言中的注释:bash、python、php、ruby,现在还有 powershell。
这正是我认为 # 不是基于 Windows 或 Microsoft 的脚本语言中的注释的原因。
那是因为,显然,与他们所有的其他技术不同,MS 没有给 powershell 一个像样的参考。我在任何地方都找不到它。
@dudeNumber4 PowerShell 是所有语言中最全面的参考资料之一。为了将功能添加到语言中,它必须包含全面的 help 文档以及示例、方法和成员列表等。

P
Peter Mortensen

在 PowerShell V1 中,只有 # 可以将其后面的文本作为注释。

# This is a comment in PowerShell

在 PowerShell V2 中,<# #> 可用于块注释,更具体地用于帮助注释。

#REQUIRES -Version 2.0

<#
.SYNOPSIS
    A brief description of the function or script. This keyword can be used
    only once in each topic.
.DESCRIPTION
    A detailed description of the function or script. This keyword can be
    used only once in each topic.
.NOTES
    File Name      : xxxx.ps1
    Author         : J.P. Blanc (jean-paul_blanc@silogix-fr.com)
    Prerequisite   : PowerShell V2 over Vista and upper.
    Copyright 2011 - Jean Paul Blanc/Silogix
.LINK
    Script posted over:
    http://silogix.fr
.EXAMPLE
    Example 1
.EXAMPLE
    Example 2
#>
Function blabla
{}

有关 .SYNOPSIS.* 的更多说明,请参阅 about_Comment_Based_Help

备注:这些函数注释由 Get-Help CmdLet 使用,可以放在关键字 Function 之前,也可以放在代码本身之前或之后的 {} 内。


不知道 <# #> 块注释。好的
您可以在此处找到 PowerShell v3 的语法:microsoft.com/en-us/download/details.aspx?id=36389。查看第 B.1.2 Comments 部分。
我正在使用 Send-MailMessage 函数,使用反引号将每个参数放在新行上,并注释掉其中一个( -Bcc ),它在下一行导致错误( -Body :术语'-Body'是不被识别为 cmdlet 的名称 ...) 因此,似乎不支持在调用函数的过程中注释掉一行。也许是行延续,也许是别的东西,无论哪种方式,这都不是我期望的工作方式
像这样的评论实际上是在线的。您的命令最终会被解析为: Send-MailMessage -To bob@bob.com #This is a comment -Subject "Help Me!"等等
我发现在开始 {inside 函数)之后立即放置函数注释更可靠。特别是,我在使用脚本模块功能使其在外部工作时遇到了麻烦。
P
Peter Mortensen

您可以像这样使用井号:

# This is a comment in PowerShell

维基百科有一个很好的页面来跟踪如何用几种流行语言进行评论:

Comments


A
Alexander

单行注释以 hash symbol 开头,# 右侧的所有内容都将被忽略:

# Comment Here

在 PowerShell 2.0 及更高版本中,可以使用多行块注释:

<# 
  Multi 
  Line 
#> 

您可以使用块注释在命令中嵌入注释文本:

Get-Content -Path <# configuration file #> C:\config.ini

注意:因为 PowerShell 支持 Tab Completion,所以在评论前复制和粘贴 Space + TAB 时需要小心。


+1 用于在一行中显示块注释样式的使用。我来这里是为了寻找如何临时注释掉所有声明在一行上的数组的各个元素。
P
Peter Mortensen

这是#

请参阅 PowerShell - Special Characters And Tokens 了解特殊字符。


T
TylerH

在 PowerShell ISE 中,您可以按 Ctrl+J 打开 Start Snipping 菜单并选择 Comment block:

https://i.stack.imgur.com/caJt2.png


P
Peter Mortensen

这里

# Single line comment in PowerShell

<#
--------------------------------------
Multi-line comment in PowerShell V2+
--------------------------------------
#>

这对现有答案有什么补充?
保持简单直接
-------------------------------------- 在这里看起来像注释语法,但不是!
P
Peter Mortensen

为此使用主题标签,后跟空格(!):

 # Comment here

不要忘记这里的空白!否则会干扰内部命令。

例如,这不是评论:

#requires -runasadmin

您能否解释一下示例 (#requires -runasadmin) 中发生的情况?它以什么方式干扰内部命令?请通过 editing your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似内容 - 答案应该看起来像是今天写的)。
# 之后不需要空格,因为它是注释。
这不仅适用于 CMD/batch(REM 是一个实际命令,而不是语法。例如,“确保您的评论不包含任何 % 字符”),而不是 PowerShell?
@PeterMortensen 这是一个#Requires statement,它允许脚本指定它的一些先决条件。这个答案似乎建议始终将空格作为评论的第一个字符,以避免无意中将评论视为 #Requires 语句;这不仅看起来不太可能,而且如果 #Requires 语句不满足或格式不正确,那么无论如何都会引发错误。
P
Peter Mortensen

你(们)能做到:

 (Some basic code) # Use "#" after a line and use:

 <#
    for more lines
    ...
    ...
    ...
    ..
    .
 #>

这不会为现有答案添加任何内容。
W
Wasif

有一种插入注释的特殊方法添加脚本的末尾:

....
exit 

Hi
Hello
We are comments
And not executed 

exit 之后的任何内容都不会执行,其行为与注释非常相似。


P
Peter Mortensen

我参加这个聚会有点晚了,但似乎没有人真正编写所有用例。所以...

目前(2020 年秋季及以后)仅受支持的 PowerShell 版本是:

Windows PowerShell 5.1.x

PowerShell 7.0.x。

您不想或不应该使用不同版本的 PowerShell。

两个版本(或任何其他版本,您可以在某些过时的站点上使用 WPS 3.0-5.0、PS Core 6.xx)共享相同的评论功能。

一行注释

# Get all Windows Service processes <-- one line comment, it starts with '#'
Get-Process -Name *host*

Get-Process -Name *host* ## You could put as many ### as you want, it does not matter

Get-Process -Name *host* # | Stop-Service # Everything from the first # until end of the line is treated as comment

Stop-Service -DisplayName Windows*Update # -WhatIf # You can use it to comment out cmdlet switches

多行注释

<#
Everyting between '< #' and '# >' is
treated as a comment. A typical use case is for help, see below.

# You could also have a single line comment inside the multi line comment block.
# Or two... :)

#>

<#
.SYNOPSIS
    A brief description of the function or script.
    This keyword can be used only once in each topic.

.DESCRIPTION
    A detailed description of the function or script.
    This keyword can be used only once in each topic.

.NOTES
    Some additional notes. This keyword can be used only once in each topic.
    This keyword can be used only once in each topic.

.LINK
    A link used when Get-Help with a switch -OnLine is used.
    This keyword can be used only once in each topic.

.EXAMPLE
    Example 1
    You can use this keyword as many as you want.

.EXAMPLE
    Example 2
    You can use this keyword as many as you want.
#>

嵌套多行注释

<#
Nope, these are not allowed in PowerShell.

<# This will break your first multiline comment block... #>
...and this will throw a syntax error.
#>

在代码中嵌套多行注释

<#
The multi line comment opening/close
can be also used to comment some nested code
or as an explanation for multi chained operations..
#>
Get-Service | <# Step explanation #>
Where-Object { $_.Status -eq [ServiceProcess.ServiceControllerStatus]::Stopped } |
<# Format-Table -Property DisplayName, Status -AutoSize |#>
Out-File -FilePath Services.txt -Encoding Unicode

边缘案例场景

# Some well written script
exit
Writing something after exit is possible but not recommended.
It isn't a comment.
Especially in Visual Studio Code, these words baffle PSScriptAnalyzer.
You could actively break your session in VS Code.

这不会为已经存在的答案添加任何新内容。
感谢您涵盖嵌套评论。