我有一个脚本,可以选择发送电子邮件;这需要运行tunnel。 如果该服务正在运行,然后我执行该脚本,则它可以正常运行:
cmd /c "blat -subject `"Test`" -body `"Test`" -ss -base64 -html -r -noh2 -to $emailto -u $username -attach $anexo -pw $password -f $username -server 127.0.0.1:25 -debug -log $blatLog"
但是,如果我尝试在脚本中启动该服务不起作用,则仅发送电子邮件就不会出错。
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -Command `"
Start-Service stunnel;
cmd /c ""blat -subject `"Hello`" -body `"Hi`" -ss -base64 -html -r -noh2 -to $emailto -u $username -pw $password -f $username -server 127.0.0.1:25 -debug"" | Out-Null;
Stop-Service stunnel;
`"" -Wait -Verb RunAs
该脚本可以执行许多操作,除了启动服务外,不需要管理员即可运行。 我知道我可以保持服务运行,但是为什么它不起作用?
答案 0 :(得分:0)
所以,这是我想出的解决方案:
$ScriptBlock = {
function CheckStunnel {
$t = New-Object System.Net.Sockets.TcpClient '127.0.0.1', 25;
while ($t.Connected -ne 'True') {
If ((Get-Service stunnel).Status -ne 'Running') { Start-Service stunnel }
Start-Sleep -seconds 3;
$t = New-Object System.Net.Sockets.TcpClient '127.0.0.1', 25;
}
}
}
Start-Process PowerShell "-NoProfile -ExecutionPolicy Bypass -Command `"
& {$ScriptBlock CheckStunnel}
Blat -subject `"Test`" -body `"Test`" -ss -base64 -html -r -noh2 -to $emailto -u $username -attach $anexo -pw $password -f $username -server 127.0.0.1:25 -debug -log $blatLog;
if ($LASTEXITCODE -eq 0) { Stop-Service stunnel }
`"" -Verb RunAs
由于stunnel的功能是打开端口,所以我只需要检查端口是否打开。 现在工作正常。
谢谢您的帮助!