Verschleiern Sie empfindliche Zeichenfolgen mit PowerShell, um eine E-Mail über ein Batch-Skript zu senden
Sie können eine strategische Variante des PowerShell-Codes verwenden, der im Beitrag "Einfache Verschleierung mit PowerShell unter Verwendung von Base64 Encoding" erwähnt wird, um ...
Kodieren Sie die sensiblen Zeichen, die verschleiert werden sollen, damit die nicht so leicht entschlüsselbaren für jeden ohne viel technisches Know-how verfügbar sind, das möglicherweise die Skriptlogik zur Laufzeit sehen oder kopieren kann
Richten Sie den Bereinigungs- und Bereinigungsprozess des Batch-Skripts und des dynamisch generierten PowerShell-Skripts ein, nachdem beide ausgeführt wurden und die erforderliche Logik ausführen
Codierte Zeichenkettenwerte abrufen
Welchen Wert Sie auch verschleiern möchten, Sie werden diesen Wert in doppelte Anführungszeichen setzen $SensitiveString
und dann ausführen $OString
, um den kodierten Wert zu erhalten.
Hierbei handelt es sich um die Werte, die Sie in das unten stehende Batch-Skript hartcodieren, anstatt die sensiblen Werte selbst in einem Nur-Text-Format zu verwenden.
$SensitiveString = "ARealDumbPassword" ## -- Put sensitive string value to encode here $OString = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($SensitiveString)) $ConvertedString = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($OString)) $OString ## -- Get encoded string value
Sie können das vorhandene Batch-Skript mit wenigen Anpassungen verwenden, sodass die codierten Werte in die Batch-Skript-Logik übergeben oder festgelegt werden können und über die andere Logik im PowerShell-Skript verfügen, um diese Werte für die Verwendung zu decodieren. Sobald dies geschehen ist, werden das PowerShell-Skript und das Batch-Skript gelöscht.
Batch-Skript
@ECHO OFF :: -- Set senvitive values and file attachment path SET "GmailAccount=RwBtAGEAaQBsAEEAYwBjAG8AdQBuAHQAVQBzAGUAcgBuAGEAbQBlAF8AXwBCAGkAdABjAGgA" SET "GmailPassword=QQBSAGUAYQBsAEQAdQBtAGIAQQBzAHMAUABhAHMAcwB3AG8AcgBkAA==" SET "Attachment=<FullAttachmentPath>" :: -- Set other email values SET "EmailTo=Bob@BobMail.com" SET "EmailSubject=This is the subject of the email" SET "EmailBody=This is the body of the email" CALL :PowerShell CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" IF EXIST "%~FN0" DEL /Q /F "%~FN0" IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" EXIT :PowerShell SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 SET PSScript=%temp%\~tmpSendeMail.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" ECHO $Username = $args[0] >> "%PSScript%" ECHO $Username = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Username)) >> "%PSScript%" ECHO $EmailPassword = $args[1] >> "%PSScript%" ECHO $EmailPassword = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EmailPassword))>> "%PSScript%" ECHO $Attachment = $args[2] >> "%PSScript%" ECHO $Attachment = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Attachment)) >> "%PSScript%" ECHO >> "%PSScript%" ECHO $Username = $Username >> "%PSScript%" ECHO $EmailTo = "%EmailTo%" >> "%PSScript%" ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%" ECHO $Subject = "%EmailSubject%" >> "%PSScript%" ECHO $Body = "%EmailBody%" >> "%PSScript%" ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%" ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%" ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%" ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%" ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%" ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%" ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%" ECHO $SMTPClient.Send($SMTPMessage) >> "%PSScript%" GOTO :EOF