【发布时间】:2011-01-28 23:22:56
【问题描述】:
这是一个 powershell/AD/Exchange 问题......
我正在针对多个用户运行一个脚本来检查他们的一些属性,但是我无法将其输出到 CSV。该脚本运行良好,完全符合我的需要,屏幕上的输出很好,我只是无法将其直接导出到 csv。
输入是一个逗号分隔的用户名txt文件(例如“username1,username2,username3”)
我已经尝试过创建自定义 ps 对象,添加到它们然后导出它们,但它不起作用....
任何建议都非常感谢..
谢谢
乔治
$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"
已编辑.... 我尝试过的方法(仅显示 for 循环/导出代码) 方法1
$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"
方法二
$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 成员身份的值,变量中的值是错误“无法处理参数,因为参数“obj”的值是空。将参数“obj”的值更改为非空值。不知道是什么原因造成的,所以我暂时忽略了它,并为 AD 成员注释了这些行,以便专注于让其余的工作。
注释掉这些行后,脚本再次运行良好,底部有一个断点,我可以查看 $ExportInfo 的值,它们看起来都很好,即它们都已正确保存到变量中。但是,它不会输出。如您所见,我输入了一个命令以将 $ExportInfo 写入屏幕,但没有显示任何内容。当它尝试执行导出行(即“Export-Csv $ExportInfo -Path $OutputPath”)时,它会出错: “无法将'System.Object []'转换为参数'Delimiter'所需的类型'System.Char'。不支持指定的方法。 在 :line:80 字符:10 + 导出-Csv
我将该行更改为“$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"
【问题讨论】:
-
不起作用和遇到麻烦是什么意思?有任何错误信息吗?文件是空的吗?你能分享你用于 csv 导出的代码吗?
标签: powershell csv loops export for-loop