【发布时间】:2015-11-22 07:19:41
【问题描述】:
所以今天有一些不错的老式 Powershell 挫败感。我需要做的是:
- 从文件中获取计算机列表
- 从 Win32_OperatingSystem 查询这些计算机的“CSName”和“InstallDate”
- 将 InstallDate 转换为可用的日期格式。
- 将所有内容导出为 .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