繁体   English   中英

具有Splatting的Powershell启动过程

[英]Powershell Start-Process with Splatting

我想从带有参数的PowerShell脚本中调用“ PS App Deployment Toolkit”程序包( Link )。

提到的“ PS App Deployment Toolkit”程序包是一个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

您能帮我解决这个问题吗?

谢谢!

我认为您不需要这么努力。 为什么要从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变量的值(这类似于cmd.exe%ERRORLEVEL%动态变量)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM