在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
(以上由于注释行而无法使用)
答案 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