如何将输出格式化为PowerShell的脚本
我的输出看起来像
Hello @ {SamAccountName = user1}已被锁定 @ {SamAccountName = user2}被锁定
我的PowerShell代码是
if ($users)
{
foreach($user in $users)
{
$message = $message + " " + $user + " is locked out" + "`r`n"
Write-Host $user
}
Send-MailMessage -To $to -Subject "Locked Accounts" -BodyAsHtml $message -From $from -Credential $cred -SmtpServer $server -Debug
}
谢谢
我希望我的输出看起来像
Hello Administrator,
以下帐户截至4月13日上午10:31已被锁定, 2015。
User1 User2
谢谢你自动化系统
正如您在我当前的输出中所看到的,我无法弄清楚如何获得一个新行并输出@ {SamAccountName = user1}而不是user1
谢谢
答案 0 :(得分:1)
您需要直接访问sAMAccountName
对象上的$user
属性:
if ($users)
{
foreach($user in $users)
{
$message = $message + " " + $user.SamAccountName + " is locked out" + "`r`n"
}
Send-MailMessage -To $to -Subject "Locked Accounts" -BodyAsHtml $message -From $from -Credential $cred -SmtpServer $server -Debug
}
如果你想做一些漂亮的东西,首先将用户名保存到数组:
$lockedUsers = @()
foreach($user in $users)
{
$lockedUsers += ,$user.SamAccountName
}
然后你可以构建你的消息:
$message = @"
Hi Admin,
The following accounts are locked as of $(get-date)
$($lockedUsers -join ", ")
Thank you, Automated System
"@
答案 1 :(得分:1)
在这里,尝试这种方法。如果你使用here-string(如下所示:
$message = @"
So
this
keeps
track of spaces?
"@
您可以在其中放置任意数量的文本并保留消息的间距,同时通过在您可能需要的内部放置任何变量,仍然可以在脚本中轻松使用它。
正如您在下面的完成答案中看到的那样,行距保留。我使用$($ variableName)格式允许我从更大的字符串中提取一个对象的值。如果我没有使用该格式,将列出整个对象,包括所有AD属性,这不是我们想要的。
if ($users)
{
$message = @"
Hello Administrator,
The following accounts are locked as of $((get-date).DateTime).
$($users | select -expand SamAccountName)
Thank You,
Automated System
"@
Send-MailMessage -To $to -Subject "Locked Accounts" -BodyAsHtml $message -From $from -Credential $cred -SmtpServer $server -Debug
}
消息将如下所示:
Hello Administrator,
The following accounts are locked as of Monday, April 13, 2015 10:22:30 AM.
localadmin Guest Stephen RDV GRAPHICS SERVICE Jim SCVMM81221tqYYJ stephen.owen krbtgt _svc_sccm azure_adfs
Thank You,
Automated System
答案 2 :(得分:0)
我明白了。由于Body是HTML,我在形成字符串
时使用了标准HTML标记<br> = new line
<strong></strong> = bold
<font color='red'></font> = red font
对于帐户名称,我做了
$message = $message + " " + $user.SamAccountName.ToLower() + " is locked out" + "<br>"