Не удается отправить сообщение PowerShell для менеджеров - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь создать сценарий PS для электронной почты менеджеров о сотрудниках с истекающими учетными записями (НЕ ПАРОЛИ) в течение следующих 10 дней.Я знаю, что это уже обсуждалось несколько раз, но я не смог найти подходящего решения этой проблемы.

Это то, что я имею до сих пор:

$MyEmail = "email@domain.com"
$SMTP= "domain.com"
$To = "email@domain.com"    
$Subject = "Account expiring"
$Body = "Hi_,

the following account is due to expire, please reply to this email if 
you wish to extend the account for a further 3 months

Kind regards,

Tech Team"

$Users = Get-ADUser -filter * -SearchBase "OU=Powershell Test 
OU,DC=domain,DC=com" -Properties emailaddress, 
Manager,accountexpirationdate
$Users | Select 
Name,emailaddress,accountexpirationdate,@{label="Manager";expression= . 
{(Get-ADUser $_.Manager -Properties emailaddress).emailaddress}}

 Send-MailMessage -To $to -From $MyEmail -Subject $Subject -Body $Body 
-SmtpServer $SMTP 

Я считаю, что япропустить несколько штук.Кто-нибудь может помочь?Это будет высоко ценится.

Спасибо

1 Ответ

0 голосов
/ 21 ноября 2018

Итак, я отредактировал свой предыдущий комментарий, потому что я не мог вынести, что он все еще был не очень хорош:

$MyEmail = "email@domain.com"
$secpasswd = ConvertTo-SecureString "PlainTextPassword" -AsPlainText -Force
$SMTP= "domain.com"
$SMTPPort = "587"
$cred = New-Object System.Management.Automation.PSCredential ($MyEmail, $secpasswd)

$NeverExpires = 9223372036854775807;
$ExpireMin = (Get-Date).AddDays(0);
$ExpireMax = (Get-Date).AddDays(90);
$today = (Get-Date)

try{
    $expiringsoon = Get-ADUser -Filter * -SearchBase "OU=Powershell Test OU,DC=domain,DC=com" -Properties accountExpires | Where-Object {$_.accountExpires -ne $NeverExpires -and [datetime]::FromFileTime([int64]::Parse($_.accountExpires)) -lt $ExpireMax -and [datetime]::FromFileTime([int64]::Parse($_.accountExpires)) -gt $ExpireMin }
}catch{
    throw $_
}
foreach($user in $expiringsoon){
    try{
        $userDetails = Get-ADUser $user -Properties AccountExpirationDate,accountExpires,manager
    }catch{
        Write-Host "Error while searching for user '$user'" -ForegroundColor Red
    }
    $ExpiryDate = $userDetails.AccountExpirationDate
    $DaysLeft = ($ExpiryDate-$today).days
    $DateStr = $ExpiryDate.AddDays(-1).ToString("dd/MM/yyyy")
    $name = $user.Name
    $manager = $userDetails.manager
    try{
        $managerEmail = (Get-ADUser $manager -Properties emailAddress).emailAddress
        if(!$managerEmail){
            $managerEmail = $MyEmail
        }
    }catch{
        $managerEmail = $MyEmail
    }

    # Set Greeting based on Number of Days to Expiry. 

    # Check Number of Days to Expiry 
    $messageDays = $DaysLeft 

    if (($DaysLeft) -gt "1") 
    { 
        $messageDays = "in " + "$DaysLeft" + " days" 
    } 
    ElseIf (($DaysLeft) -eq "1") 
    { 
        $messageDays = "in 1 day" 
    } 
    else 
    { 
        $messageDays = "today"
    } 


   # Email Subject Set Here 
    $subject="The account of $name will expire $messageDays " 

    # Email Body Set Here, Note You can use HTML, including Images. 
    $body =" 
    Hi,
    <p>the following account '$name' is due to expire, please reply to this email if you wish to extend the account for a further 3 months<br>
    <p>Kind regards, <br>
    Tech Team  
    </P>"  

    #----- Show Details of sent mail -----#
    try{
        Send-MailMessage -to $managerEmail -from $MyEmail -SmtpServer $SMTP -subject $subject -body $body -bodyasHTML -priority High –Credential $cred -port $SMTPPort -UseSsl
        Write-Host "An e-mail has been send to $managerEmail about $name" -ForegroundColor Green
    }catch{
        Write-Host "Email to $managerEmail for $name failed with error: $($_.exception.message)" -ForegroundColor Red
    }
}

Хорошо, потому что я не мог не захотеть получить правильный сценарий,Вот мой тебе подарок.Отлично работающий скрипт, который отправляет электронные письма менеджерам, чей пользователь истекает в течение 90 дней.Я также включил обработку ошибок.Пожалуйста, используйте этот скрипт в качестве руководства для создания своего собственного, и если у вас есть какие-либо вопросы, не стесняйтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...