如何在使用多个类的powershell中将数据导出到CSV



我基本上是在尝试从Windows物理机器中提取数据,我需要所有4个类来实现所需的数据。如果我在终端中使用$SysSummary变量,它会输出所有4个变量的数据。但是,当导出为CSV时,只会出现数组中的第一个添加项。有人能建议我如何将所有这些数据转换成CSV并进行良好格式化吗?

谢谢。

#Path variable that can be edited to appropriate location
$sysinfopath = 'PATHGOESHERE'
#Assign our required classes for the system details to a variable for easier access in our compiler.
$SysInfo = Get-CimInstance -ClassName Win32_ComputerSystem
$SysProcessor = Get-CimInstance -ClassName Win32_Processor
$SysDisk = Get-CimInstance -ClassName Win32_DiskDrive
$SysBios = Get-CimInstance -ClassName Win32_BIOS
# Compile the $SysInfo class data into our final summary variable.
$SysSummary = @($SysInfo | Select-Object @{N='Computer Name';E={$SysInfo.Name}}, @{N='Domain Name';E={$SysInfo.Domain}},@{N='Manufacturer';E={$SysInfo.Manufacturer}}, @{N='Model';E={$SysInfo.Model}}, @{N='Memory (GB)';E={[math]::Round($SysInfo.TotalPhysicalMemory/ 1GB)}})
# Compile the $SysProcessor class data into our final summary variable.
$SysSummary += $SysProcessor | Select-Object @{N='CPU Name';E={$SysProcessor.Name}}, @{N='Core Count';E={$SysProcessor.NumberOfCores}} 
# Compile the $SysDisk class data into our final summary variable.
$SysSummary += $SysDisk | Select-Object @{N='Serial No';E={$SysDisk.Model}}, @{N='Storage Size';E={[math]::Round($SysDisk.Size/ 1GB)}}
# Compile the $SysBios class data into our final summary variable.
$SysSummary += $SysBios | Select-Object @{N='Serial No';E={$SysBios.SerialNumber}}
# Export the $SysSummary variable to a CSV, path is set on line 25
$SysSummary | Export-Csv -path $sysinfopath

您可以使用PSCustomObject来组织数据,然后使用它导出到"适当的";格式:

$SysInfo = Get-CimInstance -ClassName Win32_ComputerSystem
$SysProcessor = Get-CimInstance -ClassName Win32_Processor
$SysDisk = Get-CimInstance -ClassName Win32_DiskDrive
$SysBios = Get-CimInstance -ClassName Win32_BIOS
($SysSummary = [PSCUstomObject]@{
'Computer Name' = $SysInfo.Name
'Domain Name'   = $SysInfo.Domain
'Manufacturer'  = $SysInfo.Manufacturer
'Model'         = $SysInfo.Model
'Memory (GB)'   = [math]::Round($SysInfo.TotalPhysicalMemory/ 1GB)
'CPU Name'      = $SysProcessor.Name
'Core Count'    = $SysProcessor.NumberOfCores
'Disk Model'    = $SysDisk.Model
'Storage Size'  = [math]::Round($SysDisk.Size/ 1GB)
'Serial No'     = $SysBios.SerialNumber
}) | Export-Csv -Path $sysinfopath -NoTypeInformation

(..)将把变量赋值转换为一个表达式,允许值返回到管道中。这做了两件事。

  1. 将对象保存到$SysSummary
  2. 将对象传递给Export-Csv

最新更新