2015-10-22 4 views
0

Я создал скрипт для проверки сертификатов локального компьютера у определенного эмитента, истекающих в течение 400 000 дней (чтобы получить удар при его тестировании) на удаленном сервере, но я не могу просто выяснить как получить результат для отправки фактического сообщения электронной почты в качестве экспериментов с трубами после (и в) операторов IF, похоже, не работает. У меня был тихий многопользовательский секс (конечно), но поскольку я новичок в Powershell, и иногда мне трудно интерпретировать какой-то код.Отправить письмо от результата (должно быть легко)

Я ищу что-то вроде; если $ OutputFromtheIFStatement | Measure-Object -gt 0 {Отправить по электронной почте с помощью $ SendReportNow.}

Мой код:

$Servers = 'testserver1,'testserver2' 
$Threshold = 400000 
$Deadline = (Get-Date).AddDays($Threshold) 
$MailSMTP = '-SmtpServer smtpserver.domain.com -Port 25' 
$MailTo = "[email protected]" 
$MailFrom = "[email protected]" 
$MailSubject = '-Subject Certifikat expiring within 90 days' 
$MailBody = '-Body ?' 
$SendReportNow = 'Send-MailMessage $MailSMTP $MailFrom $MailTo $MailSubject' 
Invoke-Command -ComputerName $Servers { Get-ChildItem Cert:\LocalMachine\My } | ForEach { 
If ($_.NotAfter -le $Deadline -and $_.Issuer -like '*CertainCompanyName*') { $_ | Select @{Label="Servername";Expression={($_.PSComputerName)}}, Issuer, Subject, @{Label="Expiry Date & Time";Expression={($_.NotAfter)}}, @{Label="Expires In (Days)";Expression={($_.NotAfter - (Get-Date)).Days}} 
} 
} 

ответ

0

Я очистил свой код вверх, надеюсь, это легче усваивается.

$Servers = 'testserver1','testserver2' 
$Threshold = 400000 
$Deadline = (Get-Date).AddDays($Threshold) 

$certs = Invoke-Command -ComputerName $Servers { Get-ChildItem Cert:\LocalMachine\My } 

ForEach ($cert in $certs){ 
    If ($cert.NotAfter -le $Deadline -and $cert.Issuer -like '*CertainCompanyName*') { 
     $body = $cert | Select @{Label="Servername";Expression={($cert.PSComputerName)}}, Issuer, Subject, @{Label="Expiry Date & Time";Expression={($cert.NotAfter)}}, @{Label="Expires In (Days)";Expression={($cert.NotAfter - (Get-Date)).Days}} 
     $MailSubject = "[$($cert.PsComputerName)] Certifikat expiring within 90 days" 
     Send-MailMessage -SmtpServer smtpserver.domain.com -Port 25 -From [email protected] -To [email protected] -Subject $MailSubject -Body $body 
    } 
} 

Это приведет к электронной почте отправляется так:

Title:    [ServerA] Certifikat expiring within 90 days 
----- Body------- 
Servername   : ServerA 
Issuer    : CN=localhost 
Subject   : CN=localhost 
Expiry Date & Time : 4/5/2020 8:00:00 PM 
Expires In (Days) : 1627 
+0

... Благодаря почти идеально, за исключением, что выход электронной почты показать, как: @ {ServerA ....... .. а также необходимость форматирования вывода, поскольку все, что нужно, не требует разделения строк (я использую Lotus Notes при работе = сам вирус, это важно). Также время нужно отформатировать как «2015-10-23 12:22». Я сам работаю над этим, подумал, что я просто дам вам знать! –

+0

Мне удалось решить проблему ... видимо, я слишком сильно ударил головой о стену ... в вашей строке send-mailmessage. Добавить -Body ($ body | out-string). Это с Powershell 4 –

Смежные вопросы