2015-04-13 5 views
0

Как я могу отформатировать вывод сценария PowerShell вКак я могу отформатировать вывод

Мой вывод выглядит

Привет @ {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   
} 

Спасибо

Я хотел бы мой выход выглядеть

Здравствуйте Administrator,

Следующие счета заблокированы по состоянию на 10:31 13 апреля, 2015.

User1 User2

Спасибо Автоматизированная система

Как вы можете увидеть в моем токовый выход, я не могу понять, как получить новую строку и выводит @ {SamAccountName = user1} вместо user1

Спасибо

ответ

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

Здесь, попробуйте этот подход вместо. Если вы используете здесь-нить (которая изображена как так:

$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 
0

Я понял это.Поскольку Тело HTML, я использовал стандартные HTML-теги при формировании строки

<br> = new line 
<strong></strong> = bold 
<font color='red'></font> = red font 

Для имен учетных записей, я сделал

$message = $message + " " + $user.SamAccountName.ToLower() + " is locked out" + "<br>" 
Смежные вопросы