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

时间:2015-08-27 18:53:30

标签: powershell csv wmi

今天有一些好的旧时尚Powershell挫败感。我需要做的是:

  1. 从文件中获取计算机列表
  2. 从Win32_OperatingSystem
  3. 查询这些计算机的“CSName”和“InstallDate”
  4. 将InstallDate转换为可用的日期格式。
  5. 将所有内容导出到.Csv
  6. 我已经尝试了很多不同的脚本迭代。我遇到了两个主要问题。一个是即使用Export-Csv -Append我也无法导出和附加到.Csv。它只需要第一个值,而其余部分则不做任何事情。第二是我在管道|时无法使日期时转换器工作。

    以下是我尝试过的一些样本 - 没有一个可行。

    这个样本只是错误很多。似乎没有从管道中的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
    }
    

    这个确实得到了数据,但当我尝试选择任何东西时,我得到空值,但我可以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做我想做的事。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

你走了,

$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