我有很好的PowerShell代码,可以远程从列表中获取序列号和型号(沿着其他详细信息),并将其导出到PowerShell中的漂亮视图。
但是,我想将它导出到一个安排好的csv文件,所以不是这样:
我要那个:
下面是原始代码:
$ArrComputers = "yakovcomputer"
#Specify the list of PC names in the line above. "." means local system
Clear-Host
foreach ($Computer in $ArrComputers)
{
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer
$computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer
$computerOS = get-wmiobject Win32_OperatingSystem -Computer $Computer
$computerCPU = get-wmiobject Win32_Processor -Computer $Computer
$computerHDD = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter drivetype=3
write-host "System Information for: " $computerSystem.Name -BackgroundColor DarkCyan
"-------------------------------------------------------"
"Manufacturer: " + $computerSystem.Manufacturer
"Model: " + $computerSystem.Model
"Serial Number: " + $computerBIOS.SerialNumber
"CPU: " + $computerCPU.Name
"HDD Capacity: " + "{0:N2}" -f ($computerHDD.Size/1GB) + "GB"
"HDD Space: " + "{0:P2}" -f ($computerHDD.FreeSpace/$computerHDD.Size) + " Free (" + "{0:N2}" -f ($computerHDD.FreeSpace/1GB) + "GB)"
"RAM: " + "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB) + "GB"
"Operating System: " + $computerOS.caption + ", Service Pack: " + $computerOS.ServicePackMajorVersion
"User logged In: " + $computerSystem.UserName
"Last Reboot: " + $computerOS.ConvertToDateTime($computerOS.LastBootUpTime)
""
"-------------------------------------------------------"
}
所以我尝试在开始时添加Import-Csv C:list.txt | ForEach-Object
(其中包含yakovcomputer名称)
(未决定是否使用$computers = Get-Content c:\list.txt
),
并在末尾添加export-csv c:\temp\list.csv
命令。
所以现在看起来是这样的(编辑代码):
Import-Csv C:list.csv | ForEach-Object
{
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer
$computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer
$computerOS = get-wmiobject Win32_OperatingSystem -Computer $Computer
$computerCPU = get-wmiobject Win32_Processor -Computer $Computer
$computerHDD = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter drivetype=3
}
export-csv c:\temp\list.csv
但它一直在给出错误。
我知道我在这里写错了一些东西(代码),但是,实现这一点的正确方法是什么?
2条答案
按热度按时间gwbalxhn1#
如果您的
list.txt
只是一个纯文本文件的计算机名称,每行一个名称,Get-Content
就足够了。您可以使用$_
或$PSItem
访问当前行(当前项)。Export-Csv
需要objects。所以你必须把你的数据转换成对象。有几种方法可以做到这一点,大多数都需要创建一个HashTable。下面是我的首选版本:注意
$($computerHDD|measure Size -sum).Sum
结构,如果有多个HDD,则将所有HDD的值相加。另外,请考虑使用CIM instead of WMI。
zyfwsgd62#
在powershell脚本中,仅HDD行无法工作
制造商:Hewlett-Packard型号:HP Pro3500系列序列号:CZC3191456 CPU:英特尔(R)酷睿(TM)i3-3220 CPU@3.30GHz方法调用失败,因为[System.Object[]]不包含名为“op_Division”的方法。第18行,字符:9
方法调用失败,因为[System.Object[]]不包含名为“op_Division”的方法。在第19行char:9
操作系统:Windows XPMicrosoft Windows 10(32-bit)Service Pack 10