2016-02-20 3 views
0

Имейте следующий скрипт, который должен возвращать версии Exchange серверов в домене. Однако на выходе отображаются столбцы/поля Name правильно, но в версии и роли просто есть «System.Object []» в каждом.Экспортировать-csv показывая system.object [] вместо значений

Import-Module ActiveDirectory 
$domain = read-host "Enter the domain" 
$ServerArray [email protected]() 
Get-ADComputer -SearchBase "OU=Servers,DC=$($domain),dc=local" -Filter {Name -like '*MBX*'} | Select -Exp Name | sort | 
% { 
Write-Host "Processing $_"  
$obj = "" | Select "Name","Version","ServerRole" 
$obj.Name = $_ 
$obj.Version = (Get-ExchangeServer).AdminDisplayVersion 
$obj.ServerRole = (Get-ExchangeServer).ServerRole 
$ServerArray += $obj 
$obj = $null 
} 
$ServerArray | export-csv c:\users\$env:username\desktop\"$domain-ExchVer".csv -NoType 

ответ

2

Get-ExchangeServer явно возвращает массив объектов здесь. У вас есть потенциал иметь более одного сервера Exchange, поэтому я ожидаю иметь более одного результата. Также нет необходимости вызывать командлет каждый проход цикла. Информация не подходит изменить.

С другой стороны, возможно, у вас есть один сервер? Вам нужно разбить массив и просто вернуть строку. Не единственный подход ...

$exchangeServerDetails = Get-ExchangeServer | Select -First 1 

Get-ADComputer -SearchBase "OU=Servers,DC=$($domain),dc=local" -Filter {Name -like '*MBX*'} | 
     Select-Object -ExpandProperty Name | 
     Sort-Object | ForEach-Object{ 
      Write-Host "Processing $_"  
      $obj = "" | Select "Name","Version","ServerRole" 
      $obj.Name = $_ 
      $obj.Version = $exchangeServerDetails.AdminDisplayVersion 
      $obj.ServerRole = $exchangeServerDetails.ServerRole 
      # Pass the completed object down the pipeline. 
      $obj 
} | Export-Csv "c:\users\$($env:username)\desktop\$domain-ExchVer.csv" -NoTypeInformation 
Смежные вопросы