今天有一些好的旧时尚Powershell挫败感。我需要做的是:
我已经尝试了很多不同的脚本迭代。我遇到了两个主要问题。一个是即使用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做我想做的事。任何帮助将不胜感激!
答案 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