什么';这个PowerShell脚本有什么问题?
我正在尝试从域计算机获取一些系统信息。我运行这个脚本,但它永远不会结束 脚本将计算机名生成一个文本文件,但随后无法从每台计算机获取所需信息 我确信脚本中缺少了一些东西,但我不太熟悉PS脚本 任何帮助都将不胜感激什么';这个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
# 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{“$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\代码>