2017-09-13 43 views
0

问题) 如何获取DSC脚本资源以等到代码完成后再继续? (代码是调用表达“路径\ file.exe程式”)DSC脚本资源 - 执行.exe,但不等到完成

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

回答

1

您是否尝试过关键字“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" 
} 
+0

感谢这个,是的,我曾试图依赖。自从这篇文章以来,我已经找出造成这个问题的原因。执行sql修补的累积更新文件产生一个拆包窗口(类似于解压缩),当这开始解包所需文件时,焦点返回到powershell,并且powershell认为任务已完成并继续前进。作为解决方案,我手动解包了所有的sql修补文件,现在直接调用安装程序。它占用更多的空间,但它让我超越了我的问题。 –

0

调用,表达似乎并没有等到过程结束 - 在一个普通的PowerShell控制台试试这个,你会看到你之前的命令返回关闭记事本:

Invoke-Expression -Command "notepad.exe"; 

你可以使用开始处理代替:

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; 
+0

感谢这个mclayton,我会试试看看它是否解决了我的问题。我发现问题是什么。执行sql修补的累积更新文件产生一个拆包窗口(类似于解压缩),当这开始解包所需文件时,焦点返回到powershell,并且powershell认为任务已完成并继续前进。作为一种解决方法,我手动解压文件,现在它可以工作。但是如果我能够实现这个目标,它将会更加清洁。 –