从多台计算机获取 WMI 数据并导出到 CSV

Get WMI Data From Multiple Computers and Export to CSV

所以今天有一些不错的老式 Powershell 挫折。我需要做的是:

  1. 从文件中获取计算机列表
  2. 从 Win32_OperatingSystem
  3. 中查询 "CSName" 和 "InstallDate" 的那些计算机
  4. 将 InstallDate 转换为可用的日期格式。
  5. 将所有内容导出到 .Csv

我已经尝试了很多不同的脚本迭代。我 运行 分为 2 个主要问题。一是即使使用 Export-Csv -Append,我也无法导出并附加到 .Csv。它只接受第一个值,对其余值不做任何处理。第二个是在管道 |.

时我无法让日期时间转换器工作

这是我尝试过的一些示例 - none 其中有效。

这个例子简直就是错误多多。似乎没有从管道中的 WMI 查询中携带 $_。看起来它正在尝试使用第一个管道中的数据,但我不确定。

    Get-Content -Path .\Computernames.txt | Foreach-Object {
        gwmi Win32_OperatingSystem -ComputerName $_) |
            Select-Object $_.CSName, $_.ConvertToDateTime($OS.InstallDate).ToShortDateString()
    } | Export-Csv -Path Filename -Force -Append -NoTypeInformation
}

这个只导出第一个值,导出.Csv时放弃其余值

$Computers = Get-Content -Path .\Computernames.txt
foreach ($Computer in $Computers) {
  echo $Computer
  $OS = gwmi Win32_OperatingSystem -ComputerName $Computer
  $OS | Select-Object
  $OS.CSName,$OS.ConvertToDateTime($OS.InstallDate).ToShortDateString() |
      Export-Csv -Path $Log.FullName -Append
}

这个确实获取了数据,但是当我尝试 select 任何东西时,我得到空值,但我可以 echo 就好了。

$OS = gwmi Win32_OperatingSystem -ComputerName $Computers
$OS | Foreach-Object {
    Select-Object $_.CSName,$_.ConvertToDateTime($OS.InstallDate).ToShortDateString() |
        Export-Csv -Path $Log.FullName -Force -Append -NoTypeInformation
}

这感觉应该简单得离谱。我几乎可以毫不费力地在 C# 中做到这一点,但我就是无法让 PS 做我想做的事。任何帮助将不胜感激!

给你,

$Array = @() ## Create Array to hold the Data
$Computers = Get-Content -Path .\Computernames.txt

foreach ($Computer in $Computers)
{
    $Result = "" | Select CSName,InstallDate ## Create Object to hold the data
    $OS = Get-WmiObject Win32_OperatingSystem -ComputerName $Computer

    $Result.CSName = $OS.CSName ## Add CSName to line1
    $Result.InstallDate = $OS.ConvertToDateTime($OS.InstallDate).ToShortDateString() ## Add InstallDate to line2
    $Array += $Result ## Add the data to the array
}

$Array = Export-Csv c:\file.csv -NoTypeInformation