是否可以在 Powershell 多行命令中使用注释?

Whi*_*uit 4 powershell powershell-ise

在 Powershell ISE 中调试和测试多行命令多年来一直困扰着我。我喜欢多行命令,因为它们易于阅读,但它们使调试变得更加困难。例如,我使用以下命令来获取早于$days(顺便说一下)的文件夹。

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Sort-Object -Property LastWriteTime
Run Code Online (Sandbox Code Playgroud)

我想更改AddDaysAddMinutes测试不同的结果集,但我想保留原始行,以便我可以轻松地来回切换。下面我复制了我想保留的行并将其注释掉,并在新行上更改AddDaysAddMinutes添加#中断多行功能。有没有一种简单的方法可以解决这个问题,我不必剪切复制的行并将其从命令中“移出”?或者有没有办法将命令拆分/拆分为多行?

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
#    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) `
    | Sort-Object -Property LastWriteTime
Run Code Online (Sandbox Code Playgroud)

(由于注释掉的行,以上不起作用)

elM*_*ero 7

使用多行注释语法而不是#。

command <# comment #>
-parameter1=value1 <# comment #>
-parameter2=value2 <# comment #>
Run Code Online (Sandbox Code Playgroud)

这应该允许您在多行命令中注释文本。

但是,这仅在您使用 Powershell 2.0 时有效


Lee*_*ley 5

你的问题是 [icky, nasty] 反引号。[咧嘴笑] powershell知道管道后面还有更多……因此,如果将管道放在正在管道传输的段的末尾,则无需添加反引号。像这样 ...

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
    # Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) |
    Sort-Object -Property LastWriteTime
Run Code Online (Sandbox Code Playgroud)


小智 5

由于 powershell 期望在 a|或 a之后继续,
作为行中的最后一个字符,因此您不需要反引号,并且
可以采用不同的格式,那么较长管道中的单行注释仍然有效:

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
#   Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $minutes) |
    Sort-Object -Property LastWriteTime
Run Code Online (Sandbox Code Playgroud)