Ваша проблема была в том, что файл перезаписывался в каждом цикле. Теперь ваш скрипт сначала сохранит все в переменную, а затем в конце экспортирует.
еще несколько проблем с вашим скриптом:
- try / catch никогда не поймает ничего в данный момент, потому что нет завершающей ошибки.
- формат вашего сценария был ужасным - пожалуйста, отформатируйте его лучше, иначе его очень трудно прочитать.
- почему вы выбираете все в конце перед экспортом? если вы хотите экспортировать все, что вам не нужно выбирать вещи. если это для цели сортировки, измените
New-Object PSObject -property
на[pscustomobject]
, это уже заставит правильный порядок сортировки
вот обновленный скрипт
$computers = Get-ADComputer -SearchBase "DC=some,DC=web,DC=com" -Filter * | Select-Object -ExpandProperty Name $outtbl = foreach ($computer in $computers){ if(!(Test-Connection -CN $computer -BufferSize 16 -Count 1 -ea 0 -quiet)) { write-host "Cannot reach $computer offline." -f red } else { Try{ $sr = Get-WmiObject -Class Win32_BIOS -ComputerName $computer -ErrorAction Continue $Xr = Get-WmiObject -Class Win32_Processor -ComputerName $computer -ErrorAction Continue $ld = Get-ADComputer $computer -Properties * -ErrorAction Continue $r = " GB" -f ((Get-WmiObject Win32_PhysicalMemory -ComputerName $computer | Measure-Object Capacity -Sum).Sum / 1GB) $x = gwmi win32_computersystem -ComputerName $computer | select @ Else {'Desktop Or Other something else.'}}},Manufacturer,@ Else {$_.model}}},username -ErrorAction Continue New-Object PSObject -Property @{ ServiceTag = $sr.serialnumber ComputerName = $ld.name IPV4Address=$ld.ipv4Address Enabled=$ld.Enabled Description=$ld.description OU=$ld.DistinguishedName.split(',')[1].split('=')[1] Type = $x.type Manufacturer=$x.Manufacturer Model=$x.Model RAM=$R ProcessorName=($xr.name | Out-String).Trim() NumberOfCores=($xr.NumberOfCores | Out-String).Trim() NumberOfLogicalProcessors=($xr.NumberOfLogicalProcessors | Out-String).Trim() AddressWidth=($xr.Addresswidth | Out-String).Trim() OperatingSystem=$ld.operatingsystem OperatingSystemServicePack=$ld.OperatingSystemServicePack OperatingSystemVersion=$ld.OperatingSystemVersion OperatingSystemHotfix=$ld.OperatingSystemHotfix LastLogonDate=$ld.lastlogondate ObjectCreated=$ld.Created ObjectModified=$ld.whenChanged LoggedInUser=$x.username } } catch [Exception] { "Error communicating with $computer, skipping to next" } } } $outtbl | select Computername,ServiceTag,IPV4Address,Description,Enabled,OU,Type,Manufacturer,Model,RAM,ProcessorName,NumberOfCores,NumberOfLogicalProcessors,AddressWidth,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion,OperatingSystemHotfix,ObjectCreated,ObjectModified,LoggedInUser,LastLogonDate | Format-Table * -Wrap -AutoSize | Out-String -Width 4096 | Out-File $env:USERPROFILE\Desktop\AD-Inventory.txt