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

时间:2019-01-02 14:15:57

标签: 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

我想将AddDays更改为AddMinutes以测试不同的结果集,但是我想保留原始行,以便可以轻松地来回切换。在下面,我复制了要保留的行并将其注释掉,然后在新行中将AddDays更改为AddMinutes。添加#会破坏多行功能。有没有一种简便的方法可以解决此问题,而不必剪切复制的行并将其移出命令?还是有一种将命令拆分/拆分成多行的方法?

$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

(以上由于注释行而无法使用)

4 个答案:

答案 0 :(得分:4)

您的问题是[讨厌的,讨厌的]反引号。 [ grin ] 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

答案 1 :(得分:3)

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

$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

答案 2 :(得分:1)

使用多行注释语法代替#。

<# comment #> 

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

但是,仅当您使用Powershell 2.0时,此方法才有效

答案 3 :(得分:0)

尝试一下,可以将其作为多行注释示例

$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