【发布时间】:2017-10-14 18:53:47
【问题描述】:
在 Internet 的帮助下,我设法编写了一个基本的 PowerShell 脚本,用于收集硬件信息并将其导出为 CSV 文件。它收集:
- 主机名
- CPU
- 核心数
- GPU
- 内存
我的脚本仍然需要获取硬盘信息(容量、可用空间、ID)、IPv4 地址和 MAC。
$Name = hostname
$Motherboard = Get-WmiObject Win32_BaseBoard
$CPU = Get-WmiObject Win32_Processor
$GPU = Get-WmiObject Win32_VideoController
$RAM = Get-WmiObject Win32_ComputerSystem
$To_File = new-object PSObject -property @{
'Name' = $Name
'Motherboard' = $Motherboard.Product
'CPU' = $CPU.Name
'Cores' = $CPU.NumberOfCores
'GPU' = $GPU.Name
'RAM' = "{0:N2}" -f ($RAM.TotalPhysicalMemory/1GB)
}
$To_File | Select-Object Name, Motherboard, CPU, Cores, GPU, RAM |
Export-Csv G:\$Name.csv
之前,我也有一条用于获取 IP 和 MAC 的线路,但它并不能通用。它看起来像这样:
$IP = gwmi Win32_NetworkAdapterConfiguration | Where ($_.DNSDomain -eq 'lan')
$MAC = gwmi Win32_NetworkAdapterConfiguration | Where ($_.DNSDomain -eq 'lan')
然后我会在 $To_File 对象中使用 'IP' = $IP.IPAddress 和 'MAC' = $MAC.MacAddress
这不好,因为并非所有适配器都被命名为“lan”。
对于我写的硬盘:
$Disk = Get-WmiObject Win32_LogicalDisk -Filter drivetype=3
$DiskInfo = foreach ($zm in $Disk) {
'ID: ' + $zm.DeviceID
'Capacity: ' + "{0:N2}" -f ($zm.Size/1GB)
'Free Space: ' + "{0:N2}" -f ($zm.FreeSpace/1GB)
}
由于有些计算机有多个硬盘,但我不知道如何将这两个东西结合在一起,这样我就可以将上面的所有信息和硬盘放在一个文件中。
我无法远程完成所有这些工作,因此脚本位于 USB 驱动器上,我会自己前往每台计算机运行它。我仍然需要做大约 20 台机器。
我还想知道如何将新行添加到现有 CSV 文件,因为拥有 15 个 CSV 并将它们“合并”在一起很痛苦。
【问题讨论】:
-
这是几个问题。请一次只关注一个问题,展示您为解决该问题所做的尝试,展示您期望的实际输出,并说明未按预期工作的内容(包括您遇到的所有错误)。
标签: windows powershell csv windows-7 hardware