什么';这个PowerShell脚本有什么问题?

什么';这个PowerShell脚本有什么问题?,powershell,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 #G

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

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

我确信脚本中缺少了一些东西,但我不太熟悉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 
}

您在
$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-WMIOObject调用现在连接到远程计算机,循环只使用您关心的属性计算PSCustomObject,这些属性不在管道中,所有customobjects的整个输出在最后一次导出到CSV。

您在
$computerHDD
行的
}
处有一个断开的循环,它在不使用数据的情况下反复覆盖相同的变量,以及一组断开的“Get WMIOObject”从未尝试联系任何远程计算机的呼叫

抓取所有属性并将其丢弃,保存到一个文件并重新加载,计算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,这些属性不在管道中,所有customobjects的整个输出在最后一次导出到CSV。

非常感谢。今天我测试时,脚本运行得非常好。我试图向计算机添加ping选项,并且只从联机计算机获取详细信息。如何实现这一点?如果我添加:get content Z:\test.txt If{test connection${u}Else{code>get content Z:\test.txt | ForEach{If(test connection${uuuuu向上)}Else{test connection${uu向下}非常感谢。今天我测试时,脚本运行得非常好。我试图向计算机添加ping选项,并且只从联机计算机获取详细信息。如何实现这一点?如果我添加:get content Z:\test.txt If{test connection$\}Else{“$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\代码>