为什么我不能将 cmdlet [CimInstance] 的 return 值存储在数组列表中?

Why can't I store the return value of a cmdlet [CimInstance] inside an arraylist?

我目前正在编写一个脚本,我在其中检索主机上的以下数据:

目前我只是这样实现的:

$installedPrinters = Get-Printer
$installedDrivers = Get-PrinterDriver | Sort-Object -Property Name
$usedDrivers = $printerList | Sort-Object -Property DriverName | Select-Object DriverName | Get-Unique -AsString

出于方便的原因,我现在尝试使用数组列表而不是 3 个不同的变量来存储此数据,但我似乎无法以某种方式使它起作用。 一旦我尝试了类似的东西...

$data.Add({Get-Printer})

Get-Printer | $data.Add($_)

... 我得到一堆错误或只是值 'Get-Printers' 作为存储在数组列表中的字符串。 奇怪的是,如果我首先将 Get-Printer cmdlet 返回的数据存储在一个专用变量中,然后将此变量添加到数组列表中,它似乎可以工作。

有人可以帮我解决这个问题吗?到目前为止,这种行为对我来说似乎没有任何意义。

你的语法有问题。

使用以下之一(假设 $data 包含一个 System.Collections.ArrayList 实例):

$data.AddRange((Get-Printer))

或者,效率较低:

Get-Printer | ForEach-Object { $null = $data.Add($_) }