PowerShell-如何运行取决于服务启动的命令?

时间:2019-03-05 14:21:45

标签: powershell

我有一个脚本,可以选择发送电子邮件;这需要运行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

该脚本可以执行许多操作,除了启动服务外,不需要管理员即可运行。 我知道我可以保持服务运行,但是为什么它不起作用?

1 个答案:

答案 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的功能是打开端口,所以我只需要检查端口是否打开。 现在工作正常。

谢谢您的帮助!