min*_*geh 2 windows gmail email batch batch-file
我想通过 bat 文件向我的 Gmail 帐户发送一个文件,并在该 bat 文件中加密我的电子邮件信息,这样如果有人打开 bat 文件,他们就无法从中获取电子邮件信息。
逻辑如:
检查互联网是否正常工作
检查互联网是否正常工作
如果没有安排它稍后执行或将其添加到启动中
完成后将其从计划或启动中删除!
如果您需要通过PowerShell 脚本与构建和发送电子邮件的逻辑来发送电子邮件(即使带有附件),您可以通过批处理脚本执行它,将敏感值作为参数传入,而不是将敏感值硬编码到脚本逻辑。
在PowerShell脚本逻辑可以接受的参数,如Gmail的本地邮箱的用户名,密码进行身份验证以发送电子邮件,和其他任何你不想硬编码在脚本中。
在脚本或函数中,您可以使用 $args 数组引用未命名的参数,例如将所有参数传递给 cmdlet。您还可以通过它们的位置来引用特定参数:
"第一个参数是" +
$Args[0]
""第二个参数是" +
$Args[1]
"
您还可以将逻辑放在批处理脚本中,以便它也有参数,您可以在执行时将敏感值传递给它,并使用参数占位符而不是硬编码敏感值。
您可以使用 a
%
后跟它在命令行上的数字位置来获取任何参数的值。传递的第一项始终%1
为第二项%2
,以此类推%*批处理脚本是指所有的参数(如
%1 %2 %3 %4 %5
...%255
)只有参数%1
来%9
可以通过编号来引用。
这样,如果脚本被打开,您需要保护的敏感值将不会暴露或硬编码到脚本逻辑中,以便任何人查看谁可能对脚本具有读取权限。
重要说明: 在每个 PowerShell 脚本示例名称Batch Execute Script的底部都有一个部分,该部分具有要从批处理脚本中使用的逻辑来执行或其他任何内容,因此您将使用传递用户名、密码和/或附件完整路径作为批处理脚本的适当参数,即sendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>"
$Username = $args[0]
$EmailPassword = $args[1]
$Username = $Username
$EmailTo = "EmailAddress@domain.com"
$EmailFrom = "noreply@Whatever.notify"
$Subject = "Email Subject"
$Body = "Email Body"
$SMTPServer = "smtp.gmail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword);
$SMTPClient.Send($SMTPMessage)
Run Code Online (Sandbox Code Playgroud)
批量执行脚本
Run Code Online (Sandbox Code Playgroud)SET GmailAccount=%~1 SET GmailPassword=%~2 SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& 'C:\Scripts\SendEmail.ps1' '%GmailAccount%' '%GmailPassword%'"
$Username = $args[0]
$EmailPassword = $args[1]
$Attachment = $args[2]
$Username = $Username
$EmailTo = "EmailAddress@domain.com"
$EmailFrom = "noreply@Whatever.notify"
$Subject = "Email Subject"
$Body = "Email Body"
$SMTPServer = "smtp.gmail.com"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body)
$Attachment = New-Object System.Net.Mail.Attachment($Attachment)
$SMTPMessage.Attachments.Add($Attachment)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword);
$SMTPClient.Send($SMTPMessage)
Run Code Online (Sandbox Code Playgroud)
批量执行脚本
Run Code Online (Sandbox Code Playgroud)SET GmailAccount=%~1 SET GmailPassword=%~2 SET Attachment=%~3 SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& 'C:\Scripts\SendEmail.ps1' '%GmailAccount%' '%GmailPassword%' '%Attachment%'"
这是一个多合一的动态批处理脚本,您只需传递 Gmail 帐户用户名、Gmail 帐户密码和附件的完整路径即可。
@ECHO OFF
SET GmailAccount=%~1
SET GmailPassword=%~2
SET Attachment=%~3
CALL :PowerShell
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'"
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 $EmailPassword = $args[1]>> "%PSScript%"
ECHO $Attachment = $args[2]>> "%PSScript%"
ECHO >> "%PSScript%"
ECHO $Username = $Username >> "%PSScript%"
ECHO $EmailTo = "EmailAddress@domain.com" >> "%PSScript%"
ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%"
ECHO $Subject = "Email Subject" >> "%PSScript%"
ECHO $Body = "Email Body" >> "%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
Run Code Online (Sandbox Code Playgroud)
您可以像这样执行批处理脚本。. .
Run Code Online (Sandbox Code Playgroud)sendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>"
该脚本将在的变量设定的硬编码值GmailAccount=
,GmailPassword=
以及Attachment=
但是一旦执行,将完全删除[本身]脚本通过"%~FN0"
其中0
的脚本本身。这意味着您需要确保复制此脚本,然后仅从您将在不希望暴露此信息的地方执行的机器上运行该副本。
@ECHO OFF
SET GmailAccount=<GmailAccountName>
SET GmailPassword=<GmailPassword>
SET Attachment=<FullAttachmentPath>
CALL :PowerShell
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'"
IF EXIST "%~FN0" DEL /Q /F "%~FN0"
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 $EmailPassword = $args[1]>> "%PSScript%"
ECHO $Attachment = $args[2]>> "%PSScript%"
ECHO >> "%PSScript%"
ECHO $Username = $Username >> "%PSScript%"
ECHO $EmailTo = "EmailAddress@domain.com" >> "%PSScript%"
ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%"
ECHO $Subject = "Email Subject" >> "%PSScript%"
ECHO $Body = "Email Body" >> "%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
Run Code Online (Sandbox Code Playgroud)
变量替换 (FOR /?)
此外,还增强了 FOR 变量引用的替换。您现在可以使用以下可选语法:
Run Code Online (Sandbox Code Playgroud)%~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only %~fI - expands %I to a fully qualified path name
归档时间: |
|
查看次数: |
28466 次 |
最近记录: |