.\exam-6ren">
gpt4 book ai didi

powershell - 将 Powershell 命令的冗长程度降低到最小形式

转载 作者:行者123 更新时间:2023-12-03 16:31:50 25 4
gpt4 key购买 nike

我正在我的 Powershell 脚本之一中执行以下命令:

New-Item -ItemType Directory -Path "MyFolder"

输出看起来像这样:

PS C:\> .\example.ps1


Directory: C:\


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/7/2015 9:52 PM MyFolder



PS C:\>

总共有行输出。我的脚本作为 msbuild 文件中任务的一部分运行,而 Visual Studio 中的输出空间有限,因此这非常令人烦恼。

现在我明白我可以通过管道输出到 Out-Null 来抑制所有这些行,但我确实喜欢一些关于命令发生。一行反馈是最佳的。

我想这个解决方法可能有效:

Write-Host "Creating folder MyFolder"
New-Item -ItemType Directory -Path "MyFolder" | Out-Null

但是一直记住/写这些是很乏味的。

我猜另一种解决方法是创建某种包装器功能,但由于 New-Item 只是一个示例,我必须编写许多包装器。相反,我正在寻找一种适用于 ***-Item cmdlet 的技术。

有什么方法可以稍微降低像 New-Item 这样的命令的详细程度,而不必求助于解决方法?

我已经浏览过the New-Item documentation但没有发现任何线索。也许我的解决方法是实现这一目标的唯一方法?

底线:是否有一种惯用的方法将 New-Item 输出压缩为一行?

最佳答案

New-Item 的管道输出是一个 System.IO.DirectoryInfo 对象,并且默认处理将 DirectoryInfo 发送到控制台是您看到的详细输出。

PS> cd d:\temp
PS> $output = New-Item -ItemType Directory -Path "MyFolder"
PS> $output

Directory: D:\temp

Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2015-12-07 13:15 foo

(这里的 $output 变量是多余的;我只是在示例中使用它来缩短行并避免在测试时创建一堆新目录。:)

减少冗长的一种方法是使用管道过滤器仅输出您感兴趣的数据,而不是整个 DirectoryInfo。将其格式化为字符串,输出只需要一行。通常这将是属性 NameFullName

PS> $output | Select-Object -ExpandProperty FullName
D:\temp\MyFolder

创建日志文件时,了解操作是什么也很有用。您可以使用 foreach 从 DirectoryInfo 对象创建自定义字符串。

PS> $output | % { "Created directory '$($_.Name)' in parent '$($_.Parent.FullName)'" }
Created directory 'MyFolder' in parent 'D:\Temp'

而且,如果您打算经常这样做,您甚至可以为其创建一个简写过滤器函数。

PS> filter Format-DirectoryOperation($verb) {
>> "$verb directory '$($_.Name)' in parent '$($_.Parent.FullName)'"
>> }
PS> $output | Format-DirectoryOperation('Created')
Created directory 'foo' in parent 'D:\temp'

关于powershell - 将 Powershell 命令的冗长程度降低到最小形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com