2012-12-01 143 views
0

即時通訊使用powershell進行一些測試,列出我的域中每臺計算機的硬件信息。我的腳本將從我使用PowerShell創建的文本文件中獲取計算機列表。轉換powershell腳本到csv

$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" 

} 

現在我沒有想法。我應該把它放入數組中嗎?

請指教。

謝謝

回答

1

的問題是,您在循環中導出爲CSV文件,所以最後一個項目將是唯一一個表現。嘗試這樣的事情。

循環之前:

# Create empty array 
$report = @() 

在循環結束後,在地方,你正在導出爲CSV的:

#Add item to report 
$report += $OutputObj 

最後,循環結束後:

$report | Export-CSV -NoTypeInformation "c:\powershell\report.txt" 
+0

非常感謝凱文。你只需保存我幾個小時就可以知道如何使用添加內容列出pso對象來生成我的列表。 – said

0

我建議你將foreach結果分配給一個變量,然後將它管道到Export-Csv。它應該比每個循環迭代中重新創建和更新數組的速度更快,效率更高。

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

$result | Export-CSV ... 

如果使用的是Foreach-Object' cmdlet to loop over computers you could skip the whole assignment or array creation, processing one object at a time (streamlined) and pipe directly to出口-CSV`:

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