电源外壳; foreach-对象;如何再次创建正确的输出到管道

Joh*_*ger 2 powershell foreach

我已经搜索了相当多的内容来找到一个令人满意的答案,但找不到它(无论是在这里还是通过谷歌)。

我当前正在使用以下命令从打印服务器上的所有打印机驱动程序中获取名称和产品版本,并将其通过管道传输到管道:

Get-WmiObject -Class Win32_PrinterDriver | select name, driverpath | %{ $Name = $_.name; $version = (get-item -LiteralPath $_.driverpath).VersionInfo.ProductVersion; write-output ($Name, $Version) }
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这是可行的,但管道输出很丑陋。输出看起来像这样:

远程桌面轻松打印,3,Windows x64
6.1.7601.17514
用于通用打印的 PCL6 驱动程序,3,Windows x64
3.4.100.1
MS Publisher 彩色打印机,3,Windows x64
6.1.7600.16385

我想要实现的目标类似于以下内容(例如未通过 foreach-object 进行管道传输的对象的标准输出) - 例如。来自以下命令:

Get-WmiObject -Class Win32_PrinterDriver | select name, driverpath
Run Code Online (Sandbox Code Playgroud)

上述命令的输出如下所示:

name                                                        driverpath
----                                                        ----------

Remote Desktop Easy Print,3,Windows x64                     C:\Windows\system32\spool\DRIVERS\x64\3\mxdwdrv.dll
PCL6 Driver for Universal Print,3,Windows x64               C:\Windows\system32\spool\DRIVERS\x64\3\ricu00gr.dll
Run Code Online (Sandbox Code Playgroud)

问题: 如何在 foreach-object 中准备输出以类似于上述格式/对象管道?

感谢您的任何意见。

亲切的问候

Vin*_*t K 5

使用 Select-Object cmdlet 创建自定义属性。

Get-WmiObject -Class Win32_PrinterDriver | select Name,Driverpath,@{l='Version';ex={(get-item -LiteralPath $_.driverpath).VersionInfo.ProductVersion}}
Run Code Online (Sandbox Code Playgroud)