Это вопрос powershell / AD / Exchange ....
Я запускаю сценарий для нескольких пользователей, чтобы проверить некоторые их атрибуты, однако у меня возникают проблемы с передачей этого в CSV. Скрипт работает хорошо и делает именно то, что мне нужно, вывод на экран в порядке, у меня просто проблемы с его прямым экспортом в csv.
Входные данные представляют собой текстовый файл с разделенными запятыми именами пользователей (например, «username1, username2, username3»)
Я экспериментировал с созданием пользовательских объектов ps, добавляя к ним и затем экспортируя их, но это не работает ....
Любые предложения с благодарностью получены ..
Спасибо
George
$array = Get-Content $InputPath
#split the comma delimited string into an array
$arrayb = $array.Split(",");
foreach ($User in $arrayb)
{
#find group memebership
Write-Host "AD group membership for $User"
Get-QADMemberOf $User
#Get Mailbox Info
Write-Host "Mailbox info for $User"
Get-Mailbox $User | select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
#get profile details
Write-Host "Home drive info for $User"
Get-QADUser $User| select HomeDirectory,HomeDrive
#add space between users
Write-Host ""
Write-Host "******************************************************"
}
Write-Host "End Script"
EDITED ....
Методы, которые я пробовал для изучения (показ только для цикла for / export code)
Method1
$AllData = @()
foreach ($User in $arrayb)
{
#set title for this user
#Write-host "Details for $User"
#find out their group memebership
Write-Host "AD group membership for $User"
$AdMemberOf = Get-QADMemberOf $User
Write-Host "ad completed"
Write-Host ""
Write-Host ""
#Get Mailbox Info
Write-Host "Mailbox info for $User"
$ExInfo = Get-Mailbox $User | select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
Write-Host "ex completed"
Write-Host ""
Write-Host ""
#get profile details
Write-Host "Home drive info for $User"
$HomeInfo = Get-QADUser $User| select HomeDirectory,HomeDrive
Write-Host "home drive completed"
#add space between users
Write-Host ""
Write-Host "******************************************************"
$ReturnedObj = New-Object PSObject
$ReturnedObj | Add-Member NoteProperty -Name "AD Group Membership for $User" -Value $AdMemberOf
$ReturnedObj | Add-Member NoteProperty -Name "Exchange details for $User" -Value $ExInfo
$ReturnedObj | Add-Member NoteProperty -Name "Home drive info for $User" -Value $HomeInfo
Write-Host $ReturnedObj
$AllData += $ReturnedObj
}
Write-Host "starting csv export"
Write-Output $AllData |export-csv -Path $OutputPath -notype -force
Write-Host "End Script"
Method2
$ExportInfo = @()
foreach ($User in $arrayb)
{
$UserInfo = New-Object System.Object
#set title for this user
$ExportInfo += "Details for $User"
#Get Mailbox Info
$ExportInfo += Get-Mailbox $User
#find out their group memebership
$ExportInfo += Get-QADMemberOf $User
#get profile details
$ExportInfo += Get-QADUser $User| select HomeDirectory,HomeDrive
#add space between users
$ExportInfo += ""
$ExportInfo += ""
}
$ExportInfo | Export-Csv -Path $OutputPath ;
РЕДАКТИРОВАНИЕ:
Благодаря предложению Stej у меня теперь есть код ниже ... Все еще не работает правильно. Я добавил проверку, чтобы подтвердить, что пользователь также существует в AD. Первая проблема заключается в получении членства в группе пользователей AD - если я поставлю точку останова и посмотрю на значение членства в AD определенного пользователя, значение в varialbe равно error «Невозможно обработать аргумент, поскольку значение аргумента« obj »равно null. Измените значение аргумента "obj" на ненулевое значение. " Понятия не имею, что является причиной этого, поэтому я просто пока проигнорировал это и прокомментировал эти строки для членства в AD, чтобы сконцентрироваться на том, чтобы заставить остальных работать.
С закомментированными строками скрипт работает нормально и снова, с точкой останова внизу, я могу посмотреть на значение $ ExportInfo, и все они выглядят нормально, т.е. все они были правильно сохранены в переменной. Тем не менее, он не будет выводить. Как вы можете видеть, я поместил команду для вывода $ ExportInfo на экран, но это ничего не показывает. Когда он пытается выполнить строку экспорта (то есть «Export-Csv $ ExportInfo -Path $ OutputPath»), он выдает ошибку:
"Невозможно преобразовать System.Object [] в тип System.Char, требуемый параметром Delimiter. Указанный метод не поддерживается.
В: строка: 80 символов: 10
+ Export-Csv <<<< $ ExportInfo -Path $ OutputPath "</p>
Я поменял строку на "$ ExportInfo | Export-Csv -Path $ OutputPath", и теперь она экспортируется в CSV ... Не знаю, почему ??? Хотя есть две проблемы ... как отмечалось выше, группы AD не работают и поле Адреса электронной почты (которое должно возвращать что-то вроде {SMTP: j.smith@domain.com, smtp: j.smith@domain.com.au, smtp: smithj@exchange.domain.com.au и SIP: j.smith@domain.com.au}) просто отображаются в CSV как «Microsoft.Exchange.Data.ProxyAddressCollection». Опять же, проверяя в $ ExportInfo, адреса есть ...
Спасибо
$ExportInfo = @()
foreach ($User in $arrayb)
{
$CheckUser = Get-QADUser -Name $User
if (!$CheckUser)
{
$CountUser++
Write-Warning "############################################"
Write-Warning "$user not found in AD"
Write-Warning "############################################"
}
else
{
$CountUser++
$UserInfo = New-Object System.Object
#find out their group memebership
Write-Host "AD group membership for $User"
#$Temp = Get-QADMemberOf $User
#$UserInfo | Add-Member NoteProperty -Name "AD Group Membership" -Value $Temp.Name
#set title for this user
#Write-host "Details for $User"
#Get Mailbox Info
Write-Host "Mailbox info for $User"
$Temp = Get-Mailbox $User #| select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
$UserInfo | Add-Member NoteProperty -Name "ServerName" -Value $Temp.ServerName
$UserInfo | Add-Member NoteProperty -Name "Database" -Value $Temp.Database
$UserInfo | Add-Member NoteProperty -Name "Email Addresses" -Value $Temp.EmailAddresses
$UserInfo | Add-Member NoteProperty -Name "Primary SMTP" -Value $Temp.PrimarySmtpAddress
$UserInfo | Add-Member NoteProperty -Name "Windows Email Address" -Value $Temp.WindowsEmailAddress
#$ReturnedObj | Add-Member NoteProperty -Name
#get profile details
Write-Host "Home drive info for $User"
$Temp = Get-QADUser $User #| select HomeDirectory,HomeDrive
$UserInfo | Add-Member NoteProperty -Name "Home Directory Location" -Value $Temp.HomeDirectory
$UserInfo | Add-Member NoteProperty -Name "Home Drive Mapped To" -Value $Temp.HomeDrive
#add space between users
Write-Host ""
Write-Host "******************************************************"
$ExportInfo += $UserInfo
}#end else
}
Write-Host "blah"
Write-Host $ExportInfo
Export-Csv $ExportInfo -Path - $OutputPath
Write-Host "Number of Users processed: $CountUser"