用bat脚本运行sh脚本



我正在使用一个脚本在我的机器上发送电子邮件,该脚本是一个sh脚本,我需要通过另一个批处理脚本自动执行该脚本,问题是当我直接复制Powershell命令上的代码时,代码运行良好,将发送电子邮件,但当我尝试使用脚本运行它时,它总是失败:这是我的电子邮件代码:

$EmailFrom = “whatever@gmail.com” 
'$EmailTo = “whatever@gmail.com”
'$Subject = “helooo2o”
$Body = “test test test”
$SMTPServer = “smtp.gmail.com”
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“whatever@gmail.com”, “pwd”);
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

当我把它直接放在CMD上,然后Powershell上时,它工作得很好,但当我使用这个脚本时它不起作用:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe  -windowstyle hidden -command 'C:Usersuser1Desktoptest.sh'

此外,当我将PowerShell与命令Bash test.sh一起使用时,它会显示以下内容:

bash /test.sh: cannot execute binary file

你们能帮我吗?我需要用批处理脚本自动运行这个脚本,提前谢谢。

  • 将PowerShell代码保存在扩展名为.ps1的文件中,而不是.sh。这样可以确保PowerShell知道该文件是PowerShell脚本(请参阅下文(。

  • 保存文件时,使用字符编码UTF-8和BOM,以确保Windows PowerShellCLIpowershell.exe相对于文件中的非ASCII范围字符正确解释脚本文件,尤其是代码中使用的引号(左双引号,U+201C(

    • 使用这样的排版引号-与通常的ASCII范围引号("(引用标记,U+0022(和'(APOSTROPHE,U+0027(,用作单引号(在PowerShell中工作良好,但前提是PowerShell引擎识别出脚本文件的实际字符编码;有关详细信息,请参阅此答案

背景信息

  • 您在Windows上运行,在那里,它纯粹是一个脚本文件的文件名扩展名,例如.sh,决定执行它的解释器。

    • Unix世界中,使用扩展名.sh是一种(不明智的(约定,表明给定文件是一个shell脚本设计用于由POSIX兼容shell(如/bin/sh(解释;但是,除非文件通过其文件权限标记为可执行文件,并且通过shebang行指定要使用的实际解释器,否则您不能直接调用此类文件:您需要将它们作为参数传递给目标解释器的可执行文件。

    • 例如,在Windows上,是Git Bash将扩展名.sh注册为使用bash执行,这就是为什么您试图调用.sh文件时会导致bash错误消息的原因。

  • 此外,在PowerShell内部,.ps1文件在进程内运行,类似于批处理文件(.cmd.bat(在cmd.exe进程内运行的方式。

相关内容

  • 没有找到相关文章

最新更新