【问题标题】:Why can't I store the return value of a cmdlet [CimInstance] inside an arraylist?为什么我不能将 cmdlet [CimInstance] 的返回值存储在数组列表中?
【发布时间】:2021-10-28 07:06:18
【问题描述】:

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

  • 已安装的打印机列表
  • 已安装的打印机驱动程序列表
  • 使用的打印机驱动程序列表

目前我只是通过这种方式实现它:

$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 返回的数据存储在专用变量中,然后将此变量添加到数组列表中,它似乎可以工作。

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

【问题讨论】:

    标签: arrays powershell arraylist cmdlets


    【解决方案1】:

    你的语法有缺陷。

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

    $data.AddRange((Get-Printer))
    

    或者,效率较低:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多