如何格式化输出

时间:2015-04-13 14:15:53

标签: powershell powershell-v4.0

如何将输出格式化为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

谢谢

3 个答案:

答案 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>"