У меня есть интересная проблема со скриптом PowerShell, над которым я работаю, который отправляет электронное письмо нашей группе, чтобы сообщить нам, когда истекает срок действия сертификата на сервере.Из командной строки каждая строка кода работает отлично, но при запуске сценария переменная $ bodyMid не возвращает результаты команды Get-ChildItem.
Код:
# Extract information from Server Event Logs
$eventLog = Get-EventLog -LogName Application -EntryType Warning -Newest 1 -Source AutoEnrollment | Select EventID, MachineName, EntryType, Source, Message
$eventString = Out-String -InputObject $eventLog
$msgLength = $eventString.length
Write-Host "Length:" $msgLength
Write-Host "Message Body: " $eventString
# Extract the Thumbprint from the Certificate from the Event Logs
$thumbPrint = $eventString.Substring([int]$msgLength-69,69)
Write-Host "Thumbprint String: " $thumbPrint
$thumbPrint = $thumbPrint.Replace(" ", "")
$thumbPrint = $thumbPrint.Replace("'", "")
Write-Host "Processed Thumbprint: " $thumbPrint
# Extract the Certificate information from the Server
$certInfo = Get-ChildItem Cert:\ -Recurse | Where { $_.Thumbprint -eq $thumbPrint} | Select FriendlyName, Thumbprint, DnsNameList, PSPath, NotBefore, NotAfter
$bodyMid = Out-String -InputObject $certInfo
$bodyCount = $bodyMid.length
Write-Host "Mid-Body Count: " $bodyCount
Write-Host "Mid-Body: " $bodyMid
Когда он запускается, это результат:
PS C:\Scripts> .\ServiceNotify.ps1
Length: 543
Message Body:
EventID : 64
MachineName : ADFS-01.contoso.com
EntryType : Warning
Source : AutoEnrollment
Message : The description for Event ID '-2147483584' in Source 'AutoEnrollment' cannot be found. The local computer may not have the
necessary registry information or message DLL files to display the message, or you may not have permission to access them.
The following information is part of the event:'local system', '81 4d 26 bb ef 94 30 25 32 44 e1 c7 bb 51 92 79 8b c6 5d 29'
Thumbprint String: '81 4d 26 bb ef 94 30 25 32 44 e1 c7 bb 51 92 79 8b c6 5d 29'
Processed Thumbprint: 814d26bbef9430253244e1c7bb5192798bc65d29
Mid-Body Count: 0
Mid-Body:
Но когда я присваиваю переменные вне скрипта и просто запускаю их строку за строкой внутри PowerShell, она работает как следует:
PS C:\Scripts> $thumbPrint = "814D26BBEF9430253244E1C7BB5192798BC65D29"
PS C:\Scripts> $certInfo = Get-ChildItem Cert:\ -Recurse | Where { $_.Thumbprint -eq $thumbPrint} | Select FriendlyName, Thumbprint, DnsName
List, PSPath, NotBefore, NotAfter
PS C:\Scripts> $bodyMid = Out-String -InputObject $certInfo
PS C:\Scripts> $bodyCount = $bodyMid.length
PS C:\Scripts> Write-Host "Mid-Body Count: " $bodyCount
Mid-Body Count: 352
PS C:\Scripts> Write-Host "Mid-Body: " $bodyMid
Mid-Body:
FriendlyName : DC-WC-Cert-2016-2019
Thumbprint : 814D26BBEF9430253244E1C7BB5192798BC65D29
DnsNameList : {*.contoso.com, contoso.com}
PSPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My\814D26BBEF9430253244E1C7BB5192798BC65D29
NotBefore : 3/4/2016 11:00:00 AM
NotAfter : 6/4/2019 9:59:59 AM
Я не был бы против сделать это по-другому, но я пытаюсь понять, почему командлет не работает внутри скрипта, как я ожидал.Какие-либо предложения?Спасибо!