DSC脚本资源 - 执行.exe,但不会等到完成

时间:2017-09-13 00:58:28

标签: sql powershell dsc

问题) 如何让DSC脚本资源等到代码完成后再继续? (代码是invoke-expression" path \ file.exe")

详细信息) 我使用的是powershell版本5 我正在尝试使用DSC设置来处理我们的sql server安装。 我的经理要我使用开箱即用的DSC组件。 即不下载可能有用的自定义模块。 我已经构建了处理基本服务器构建的配置文件 - 一切都很好。 安装sql server的脚本资源很好。 它会执行,并等待它完全安装,然后再继续。 当我到达安装sql server累积更新的脚本资源时,我遇到了问题。 可执行文件被调用并开始安装(它需要10-15分钟),但dsc配置不会等到它安装完毕,并在一秒钟之后继续运行。 这意味着在安装完成之前,将调用DependsOn以用于将来的步骤。 如何让脚本资源等到它完成后才能使用?

2 个答案:

答案 0 :(得分:2)

您是否尝试过关键字“DependsOn”?

Script MyNewSvc
{
    GetScript = {
        $SvcName = 'MyNewSvc'

        $Results = @{}
        $Results['svc'] = Get-Service $SvcName

        $Results
    }
    SetScript = {
        $SvcName = 'MyNewSvc'

        setup.exe /param
        while((Get-Service $SvcName).Status -ne "Running"){ Start-Sleep 10 }
    }
    TestScript = {
        $SvcName = 'MyNewSvc'
        $SvcLog = 'c:\svc.log'

        If (condition) { #like a a running svc or a log file
            $True
        }
        Else {
            $False
        }

    }
}


WindowsFeature Feature
{
    Name = "Web-Server"
    Ensure = "Present"
    DependsOn = "[Script]MyNewSvc"
}

答案 1 :(得分:0)

Invoke-Expression似乎还没有等到进程完成 - 在通用的PowerShell控制台中尝试这个,你会在关闭记事本之前看到命令返回:

Invoke-Expression -Command "notepad.exe";

您可以改为使用Start-Process:

Start-Process -FilePath "notepad.exe" -Wait -NoNewWindow;

如果你想检查退出代码,你可以这样做:

$process  = Start-Process -FilePath "notepad.exe" -Wait -NoNewWindow -PassThru;
$exitcode = $process.ExitCode;
if( $exitcode -ne 0 )
{
    # handle errors here
}

最后,使用命令行参数:

$process  = Start-Process -FilePath "setup.exe" -ArgumentList @("/param1", "/param2") -Wait -PassThru;
$exitcode = $process.ExitCode;