将powershell脚本转换为csv

将powershell脚本转换为csv,powershell,Powershell,我正在使用powershell进行一些测试,以列出我所在域中每台计算机的硬件信息。我的脚本将从我使用powershell创建的文本文件中获取计算机列表 $arrComputers = get-Content -Path "C:\powershell\List.txt" foreach ($strComputer in $arrComputers) { $colItemsOs = get-wmiobject -class "Win32_OperatingSystem" -namespace

我正在使用powershell进行一些测试,以列出我所在域中每台计算机的硬件信息。我的脚本将从我使用powershell创建的文本文件中获取计算机列表

$arrComputers = get-Content -Path "C:\powershell\List.txt"
foreach ($strComputer in $arrComputers)
{
    $colItemsOs = get-wmiobject -class "Win32_OperatingSystem" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsOs)
   {
    Write-host  "Computer Name: " $strComputer
    Write-host  "OsName: " $objItem.Name
    Write-host  "Version: " $objItem.Version
   }

    $colItemsCompsys = get-wmiobject -class "Win32_ComputerSystem" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsCompsys)
   {
    Write-host  "Memory: " $objItem.TotalPhysicalMemory
    Write-host  "Manufacturer: " $objItem.Manufacturer
    Write-host  "Model: " $objItem.Model
    Write-host  "Domain: " $objItem.Domain
   }



     $colItemsSysEnc = get-wmiobject -class "Win32_SystemEnclosure" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsSysEnc)
   {
    Write-host  "SerialNumber: " $objItem.SerialNumber
   }

     $colItemsProcessor = get-wmiobject -class "Win32_Processor" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsProcessor)
   {
    Write-host  "Processor: " $objItem.Name
   }

    $colItemsIP = get-wmiobject -class "Win32_NetworkAdapterConfiguration " -namespace "root\CIMV2" `
    -computername $strComputer -Filter "IpEnabled = TRUE"
   foreach ($objItem in $colItemsIP)
   {
    Write-host  "IPAddress: " $objItem.IpAddress
   }

    Write-host | Out-File c:\powershell\reportbeta.csv

}
但是,我不能这样做。如何在csv文件中生成结果,稍后可以使用sqlcmd将其上载到我的数据库

我错过了什么

多谢各位


我设法用文本文件显示输出。但是,仅显示1条记录

$arrComputers = get-Content -Path "C:\powershell\List.txt"
foreach ($strComputer in $arrComputers)
{
    $colItemsOs = get-wmiobject -class "Win32_OperatingSystem" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsOs)
   {
      $strComputer
      $Name =$objItem.Name
      $Version = $objItem.Version
   }

    $colItemsCompsys = get-wmiobject -class "Win32_ComputerSystem" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsCompsys)
   {
      $TotalMemory = $objItem.TotalPhysicalMemory
      $Manufacturer = $objItem.Manufacturer
      $Model = $objItem.Model
      $Domain = $objItem.Domain
   }



     $colItemsSysEnc = get-wmiobject -class "Win32_SystemEnclosure" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsSysEnc)
   {
      $SerialNUmber = $objItem.SerialNumber
   }

     $colItemsProcessor = get-wmiobject -class "Win32_Processor" -namespace "root\CIMV2" `
    -computername $strComputer
   foreach ($objItem in $colItemsProcessor)
   {
     $Processor = $objItem.Name
   }

    $colItemsIP = get-wmiobject -class "Win32_NetworkAdapterConfiguration " -namespace "root\CIMV2" `
    -computername $strComputer -Filter "IpEnabled = TRUE"
   foreach ($objItem in $colItemsIP)
   {
      $IPV4 = $objItem.IpAddress
   }

    $OutputObj  = New-Object -Type PSObject
    $OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $strComputer.ToUpper()


    $OutputObj | Add-Member -MemberType NoteProperty -Name Name -Value $Name 
    $OutputObj | Add-Member -MemberType NoteProperty -Name Version -Value $Version
    $OutputObj | Add-Member -MemberType NoteProperty -Name TotalPhysicalMemory -Value $TotalMemory 
    $OutputObj | Add-Member -MemberType NoteProperty -Name Manufacturer -Value $Manufacturer
    $OutputObj | Add-Member -MemberType NoteProperty -Name Model -Value $Model

    $OutputObj | Add-Member -MemberType NoteProperty -Name Processor -Value $ProcessorSpeed
    $OutputObj | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $SerialNo
    $OutputObj | Add-Member -MemberType NoteProperty -Name Domain -Value $Domain
    $OutputObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPV4 
    $OutputObj | Export-CSV -NoTypeInformation "c:\powershell\report.txt"

}
我现在没有主意了。我应该把它做成数组吗

请告知


谢谢

问题是您正在循环中导出为csv,因此最后一个项目将是唯一显示的项目。试试这样的

循环之前:

# Create empty array
$report = @()
$report | Export-CSV -NoTypeInformation "c:\powershell\report.txt"
在循环结束时,代替当前导出到CSV的位置:

#Add item to report
$report += $OutputObj
最后,在循环结束后:

# Create empty array
$report = @()
$report | Export-CSV -NoTypeInformation "c:\powershell\report.txt"

我建议您将foreach结果分配给一个变量,然后将其输送到
Export Csv
。与每次循环迭代中重新创建和更新数组相比,它应该执行得更快,效率更高

$result = foreach($strComputer in $arrComputers)...

$result | Export-CSV ...
如果使用
Foreach Object'cmdlet在计算机上循环,则可以跳过整个分配或数组创建,一次处理一个对象(流线型),并直接通过管道传输到
Export CSV`:

Get-Content -Path C:\powershell\List.txt | Foreach-Object{
    ...
} | Export-Csv ...

非常感谢凯文。你只要帮我省下几个小时,弄清楚如何使用添加内容来生成我的列表来列出pso对象。