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



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

  1. 从文件
  2. 中获取计算机列表
  3. 在Win32_OperatingSystem
  4. 中查询"CSName"one_answers"InstallDate"
  5. 将InstallDate转换为可用的日期格式。
  6. 导出为csv文件

我已经尝试了很多不同的迭代我的脚本。我遇到了两个主要问题。一个是,我不能导出和追加到。csv甚至与Export-Csv -Append。它只取第一个值,其余的不做任何处理。第二个是,当管道|时,我无法获得日期时间转换器的工作。

这是我试过的几个例子——没有一个有效。

这个样本有很多错误。似乎没有从管道中的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做我想做的事情。任何帮助将非常感激!

给你,

$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

最新更新