Как я могу отформатировать свой вывод

Как я могу отформатировать свой вывод в сценарии 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        
}

Спасибо

Я хотел бы, чтобы мой вывод выглядел как

Привет Администратор,

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

Пользователь1 Пользователь2

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

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

Спасибо


person software is fun    schedule 13.04.2015    source источник


Ответы (3)


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

$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
person FoxDeploy    schedule 13.04.2015

Вам необходимо получить прямой доступ к свойству 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
"@
person arco444    schedule 13.04.2015

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

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

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

 $message = $message + " " + $user.SamAccountName.ToLower() + " is locked out" + "<br>"
person software is fun    schedule 13.04.2015