【发布时间】:2015-03-15 00:59:41
【问题描述】:
我正在从我们的 MSSQL HR 数据库中提取数据并运行一个 foreach 循环,并将行集中的各个字段与用户的 AD 属性进行比较。这工作正常。在这个循环中,当我继续记录我对每个用户所做的事情时,我还附加到一个字符串,并且还记录了一条错误消息。例如:
foreach ($user in $users) {
# Try and find the AD User
$ADUser = $(try {Get-ADUser $user.SamAccountName -Properties Office,OfficePhone,MobilePhone,Department,Title,City,PostalCode,StreetAddress} catch {$null})
#Check if we found it
if ($ADuser -ne $null) {
$ADUpdated = $false
#We did so check the HR data too before we try and use it
if (-Not ([string]::IsNullOrEmpty($user.Title))) {
if (($user.Title -ne $ADUser.Title)) { #Check if we need to update
# Update the Job Title attribute
Write-Verbose ("Updating Job Title to " + $user.Title + " for " + $user.SamAccountName + " (" + $user.DisplayName + ")")
Set-ADUser $user.SamAccountName -Title $user.Title
$messagebody += "Updating Job Title to " + $user.Title + " for " + $user.SamAccountName + " (" + $user.DisplayName + ")" + " `r`n"
$ADtitleUpdated++
$ADUpdated = $true
}
} else {
#HR Database is wrong
$HRnoTitle++
$messagebody += "Missing Job Title in HR Record for " + $user.DisplayName + " `r`n"
Write-Warning ("Missing Job Title in HR Record for " + $user.DisplayName)
if ($ADUpdated) {$ADrecordsUpdated++}
}
else {
#User is missing in AD but Exists in HR Database
$ADmissing++
Write-Warning ($user.SamAccountName + " (" + $user.DisplayName + ")" + " exists in HR Database but doesn't in AD!")
$messagebody += $user.SamAccountName + " (" + $user.DisplayName + ")" + " exists in HR Database but doesn't in AD!`r`n"
}
所以$messagebody 有一个多行字符串,告诉我人力资源数据库中的用户记录是否存在问题,或者是否存在任何 AD 帐户。当我用Write-Host 打印出来时,我得到了正确的信息。但是,当我通过Send-MailMessage 发送此信息时,缺少 CRLF。我可以做些什么来保存 CRLF?邮件客户端是 Outlook 2010。
【问题讨论】:
-
不是你必须这样做,而是你在我们看不到的任何地方声明了
$messagebody?在脚本的结尾,这个$messagebody.GetType().FullName的结果是什么?我想知道它是否是一个字符串数组,应该是一个字符串。 -
@GeoffKing 您提供给我们的代码中没有
Send-MailMessage行。此外,您似乎在该示例中的几个地方缺少闭包花括号 (}) -
好的,这是我的脚本@Matt
$messagebody = @" AD Import From HR Database Results "@和Send-MailMessage -From $smtpFrom -To $smtpTo -Subject $messageSubject -Body $messagebody -SmtpServer $smtpServer中的额外代码位,代码标签错过了一个}。该代码确实有效。我只是没有全部展示。 -
@matt $messagebody.GetType().FullName 返回为
System.String -
MailMessage sent string as body without newline in outlook 的可能副本。有点解释了这个问题和一些解决它的好方法。不是 powershell 问题。