今天有一些不错的老式Powershell挫折。我需要做的是:
- 从文件 中获取计算机列表
- 在Win32_OperatingSystem 中查询"CSName"one_answers"InstallDate"
- 将InstallDate转换为可用的日期格式。
- 导出为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