2017-12-18 261 views
0

我想从具有参数的PowerShell脚本调用“PS App Deployment Toolkit”包(Link)。PowerShell启动过程与泼溅

提到的“PS应用程序部署工具包” - 包是一个powershell脚本,我想用参数调用。 (从.ps1调用.ps1)

我想使用splatting作为参数。
我想等待脚本结束。
我想从脚本中获取退出代码。

这里是我的代码,这是行不通的:

$PSADToolKitInstallWrapper = "C:\Temp\MyPackage\PS-AppDeploy.ps1" 

$PSADToolKitParameters = @{ 
    "DeploymentType" = "Uninstall"; 
    "DeployMode" = "Interactive"; 
    "AllowRebootPassThru" = $True; 
    "TerminalServerMode" = $False; 
    "DisableLogging" = $False; 
}   

$InstallStatus = Start-Process -FilePath "PowerShell.exe" -ArgumentList $PSADToolKitInstallWrapper @PSADToolKitParameters -Wait -PassThru 

Write-Host "Exit-Code: $($InstallStatus.ExitCode)" 

此线将正常工作,但我想在上面的例子中,设置参数,如:

$InstallStatus = Start-Process -FilePath "PowerShell.exe" -ArgumentList "$PSADToolKitInstallWrapper","-DeploymentType Install -DeployMode Silent -AllowRebootPassThru -TerminalServerMode" -Wait -PassThru 

请你帮助我得到这个工作?

谢谢!

+0

这不是在你的例子中溅起。如果你摆脱了'@ PSADToolKitParameters',它将工作 – TheIncorrigible1

+0

...和@InIncorrigible1是正确的。您的示例不包含溅射。查看我的答案,了解如何使用溅射。 –

回答

1

我认为你不需要这么努力。为什么在PowerShell脚本中运行powershell.exe?您已经在运行PowerShell。只要运行所需的命令行:

$PSADToolKitParameters = @{ 
    "DeploymentType" = "Uninstall" 
    "DeployMode" = "Interactive" 
    "AllowRebootPassThru" = $True 
    "TerminalServerMode" = $False 
    "DisableLogging" = $False 
} 
C:\Temp\MyPackage\PS-AppDeploy.ps1 @PSADToolKitParameters 

如果你想运行的路径和/或文件名的脚本包含空格,然后调用运营商(&)调用它,并且引用的文件名;例如:

& "C:\Temp\My Package\PS-AppDeploy.ps1" @PSADToolKitParameters 

检查脚本的结果取决于脚本返回的内容。如果返回的输出对象,那么你可以简单地给它分配:

$output = C:\Temp\MyPackage\PS-AppDeploy.ps1 ... 

如果脚本运行,设置退出代码的可执行文件,检查$LASTEXITCODE变量的值(这是类似于%ERRORLEVEL%动态变量在cmd.exe)。

+0

只是一个说明,他想要捕捉脚本的退出代码 – TheIncorrigible1

+0

是的,脚本得到正确调用,但我没有得到退出代码... – Walhalla

+0

@Walhalla如果添加'$ Var =&.. .'你应该得到'$ Var'变量中的任何脚本。 – TheIncorrigible1