【问题标题】:Get WMI Data From Multiple Computers and Export to CSV从多台计算机获取 WMI 数据并导出为 CSV
【发布时间】:2015-11-22 07:19:41
【问题描述】:

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

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

我已经尝试了很多不同的脚本迭代。我遇到了两个主要问题。一是即使使用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 做我想做的事。任何帮助将不胜感激!

【问题讨论】:

    标签: powershell csv wmi


    【解决方案1】:

    给你,

    $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
    

    【讨论】:

    • 当某些东西起作用时,这是一件美好的事情!我只做了 1 个小改动 - $Array 的导出方式只是将长度放入 .csv,所以我将其更改为: Export-Csv -Path Results.csv 我得到了返回的完整信息。非常感谢您提供如此快速而完整的答案!
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2020-09-09
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多