如何在 PowerShell 脚本中使用 Format-Custom 以自定义格式显示输出?
How to display output in a custom format using Format-Custom, in PowerShell scripting?
Get-CIMInstance -ClassName Win32_Printer | Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}}
以上命令给出了以下输出:
Name IPAddress
---- ---------
Webex Document Loader 100.100.100.100
OneNote (Desktop) 111.111.111.111
Microsoft XPS Document Writer 120.120.120.120
Microsoft Print to PDF 123.123.123.123
Fax 127.127.127.127
我正在寻找一些可以通过管道传输到上述命令中的 cmdlet,以便我可以将输出自定义为以下内容:
Webex Document Loader(100.100.100.100), OneNote (Desktop)(111.111.111.111), Microsoft XPS Document Writer(120.120.120.120), Microsoft Print to PDF(123.123.123.123), Fax(127.127.127.127)
提前致谢
自 PowerShell Core 7.0 可以使用 Join-String
:
Get-CIMInstance -ClassName Win32_Printer |
Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}} |
Join-String -Property { '{0}({1})' -f $_.Name, $_.IPAddress } -Separator ', '
Join-String
cmdlet 用于格式化输入对象并将其连接到单个字符串中。参数 -Separator
应为 self-explanatory。 -Property
的参数指定 calculated property that defines a script block which formats the input object. The format operator -f
用于干净地生成所需的格式。或者,它可以仅使用字符串插值来完成,例如。 G。 "$($_.Name)($($_.IPAddress))"
但我不喜欢所有括号。
PowerShell 版本早于 7.0 的替代解决方案,不提供 Join-String
:
(Get-CIMInstance -ClassName Win32_Printer |
Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}} |
ForEach-Object {'{0}({1})' -f $_.Name, $_.IPAddress}) -join ', '
此处 -join
operator is used to produce a single one-line string. The grouping operator 用于将管道转换为一个表达式,该表达式将所有输出收集到一个数组中,-join
运算符可以将其作为其 left-hand-side 参数。
Get-CIMInstance -ClassName Win32_Printer | Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}}
以上命令给出了以下输出:
Name IPAddress
---- ---------
Webex Document Loader 100.100.100.100
OneNote (Desktop) 111.111.111.111
Microsoft XPS Document Writer 120.120.120.120
Microsoft Print to PDF 123.123.123.123
Fax 127.127.127.127
我正在寻找一些可以通过管道传输到上述命令中的 cmdlet,以便我可以将输出自定义为以下内容:
Webex Document Loader(100.100.100.100), OneNote (Desktop)(111.111.111.111), Microsoft XPS Document Writer(120.120.120.120), Microsoft Print to PDF(123.123.123.123), Fax(127.127.127.127)
提前致谢
自 PowerShell Core 7.0 可以使用 Join-String
:
Get-CIMInstance -ClassName Win32_Printer |
Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}} |
Join-String -Property { '{0}({1})' -f $_.Name, $_.IPAddress } -Separator ', '
Join-String
cmdlet 用于格式化输入对象并将其连接到单个字符串中。参数 -Separator
应为 self-explanatory。 -Property
的参数指定 calculated property that defines a script block which formats the input object. The format operator -f
用于干净地生成所需的格式。或者,它可以仅使用字符串插值来完成,例如。 G。 "$($_.Name)($($_.IPAddress))"
但我不喜欢所有括号。
PowerShell 版本早于 7.0 的替代解决方案,不提供 Join-String
:
(Get-CIMInstance -ClassName Win32_Printer |
Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}} |
ForEach-Object {'{0}({1})' -f $_.Name, $_.IPAddress}) -join ', '
此处 -join
operator is used to produce a single one-line string. The grouping operator 用于将管道转换为一个表达式,该表达式将所有输出收集到一个数组中,-join
运算符可以将其作为其 left-hand-side 参数。