这个PowerShell脚本有什么问题?

时间:2016-06-03 05:39:50

标签: powershell

我试图从域计算机获取一些系统信息。我运行这个脚本但它永远不会结束。

该脚本将计算机名称生成为文本文件,但随后无法从每台计算机获取所需信息。

我确定脚本中缺少某些内容,但我对PS脚本不太熟悉。

非常感谢任何帮助。

# Get a list of all computer names and export to text file
Get-ADComputer -Filter * -Property * | Select -Expand Name | Out-File Z:\test.txt

#Get the computer name and find the below infromation for each individual computer

get-content -path z:\test.txt | % { 

$computerSystem = get-wmiobject Win32_ComputerSystem
$computerOS = get-wmiobject Win32_OperatingSystem
$computerCPU = get-wmiobject Win32_Processor    
$computerHDD = Get-WmiObject Win32_LogicalDisk -Filter drivetype=3 }

#Prepare the below information for a CSV file
$csvObject = New-Object PSObject -property @{
    'PCName' = $computerSystem.Name    
    'Manufacturer' = $computerSystem.Manufacturer    
    'Model' = $computerSystem.Model   
    'RAM' = "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB)    
    'HDDSize' = "{0:N2}" -f ($computerHDD.Size/1GB)    
    'HDDFree' = "{0:P2}" -f ($computerHDD.FreeSpace/$computerHDD.Size)   
    'CPU' = $computerCPU.Name    
    'OS' = $computerOS.caption    
    'User' = $computerSystem.UserName    
    'BootTime' = $computerOS.ConvertToDateTime($computerOS.LastBootUpTime)
}

#Export the fields you want from above in the specified order

$csvObject | Select User, Model, PCName, OS, CPU, Ram  | Export-Csv 'system-info.csv' -NoTypeInformation -Append 
}

1 个答案:

答案 0 :(得分:0)

你有一个断开的循环,它在}行的$computerHDD处关闭,它在不使用数据的情况下一遍又一遍地覆盖相同的变量,以及一组破坏的" Get- WmiObject可以"从不尝试联系任何远程计算机的呼叫。

有点浪费的设计抓住所有属性并丢弃它们,保存到文件并重新加载,计算10个属性然后保持6。

一个破坏的导出,它只试图导出一个对象,并且看起来像是在循环中(使用export -append),但是不在循环中,并且将是如果它是笨重的。

我无法理解为什么它永远不会结束,但这就是为什么它无法正常运作。

我的重写尝试将是:

Get-ADComputer -Filter * | ForEach {

    $computerSystem = Get-WmiObject Win32_ComputerSystem -ComputerName $_.Name
    $computerOS = Get-WmiObject Win32_OperatingSystem -ComputerName $_.Name
    $computerCPU = Get-WmiObject Win32_Processor -ComputerName $_.Name

    [PSCustomObject]@{
        'PCName' = $computerSystem.Name    
        'Model' = $computerSystem.Model   
        'RAM' = "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB)    
        'CPU' = $computerCPU.Name    
        'OS' = $computerOS.caption    
        'User' = $computerSystem.UserName    
    }

} | Export-Csv 'system-info.csv' -NoTypeInformation

Get-WMIObject调用现在连接到远程计算机,循环只计算PSCustomObject,其中只包含您关注的属性,那些属于管道的属性,并且所有自定义对象的整个输出一次性导出为CSV最后。