我想通过bat文件将文件发送到我的Gmail帐户,并在该bat文件中加密我的电子邮件信息,这样,如果有人打开bat文件,他们将无法从中获取电子邮件信息。
逻辑例如:
检查互联网是否正常工作
检查互联网是否正常工作
如果没有,则计划将其以后再添加或添加到启动中
完成后,将其从计划表中删除或启动!
如果您需要通过使用带有用于生成和发送电子邮件的逻辑的PowerShell脚本来发送电子邮件(甚至带有附件),则可以通过将敏感值作为参数传递的批处理脚本来执行它,而不是将敏感值硬编码到其中脚本逻辑。
在PowerShell脚本逻辑可以接受的参数,如Gmail的本地邮箱的用户名,密码进行身份验证以发送电子邮件,和其他任何你不想硬编码在脚本中。
在脚本或函数中,您可以使用$ args数组引用未命名的参数,例如,将所有参数传递给cmdlet。您还可以通过其位置引用特定的参数:
“第一个参数是“ +
$Args[0]
”“第二个参数是“ +
$Args[1]
”
您还可以将逻辑放入批处理脚本中,以便它也具有参数,您可以在执行时将敏感值传递给它,并使用参数占位符而不是对敏感值进行硬编码。
您可以
%
在命令行上使用后跟数字位置的形式获取任何参数的值。传递的第一个项目始终%1
是第二个项目始终%2
以此类推%*批处理脚本是指所有的参数(如
%1 %2 %3 %4 %5
...%255
)只有参数%1
来%9
可以通过编号来引用。
这样,如果打开了脚本,您需要保护的敏感值将不会暴露或硬编码到脚本逻辑中,任何人都可以看到谁对该脚本具有读取权限。
重要说明: 每个PowerShell脚本示例名称“批处理执行脚本”的底部都有一个部分,具有可从批处理脚本执行的逻辑或执行的逻辑,因此您将使用传递用户名,密码和/或附件完整路径作为批处理脚本的适当参数,即sendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>"
$Username = $args[0]
$EmailPassword = $args[1]
$Username = $Username
$EmailTo = "[email protected]"
$EmailFrom = "[email protected]"
$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)
批处理执行脚本
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 = "[email protected]"
$EmailFrom = "[email protected]"
$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)
批处理执行脚本
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 = "[email protected]" >> "%PSScript%"
ECHO $EmailFrom = "[email protected]" >> "%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
您可以像这样执行批处理脚本。。。
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 = "[email protected]" >> "%PSScript%"
ECHO $EmailFrom = "[email protected]" >> "%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
可变替代(FOR /?)
此外,FOR变量引用的替换已得到增强。现在,您可以使用以下可选语法:
%~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only %~fI - expands %I to a fully qualified path name
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句