[英]How to pass an If statement to the Argumentlist of Start-process for PowerShell?
[英]In Powershell how can I pass an array as an argument, which is one of multiple arguments to Start-Process -ArgumentList
ScriptToInvoke.ps1:
[CmdletBinding()]
param (
[Parameter(Mandatory=$True)]
[string[]]$StringArray,
[ValidateSet('Mode1', 'Mode2', 'Mode3')]
[string]$Mode = 'Mode1'
)
$count = $StringArray.Count
Write-Verbose ("String array count ($count): $StringArray")
ScriptCallingStartProcess.ps1:
$stringArray = @('String1','String2','String3')
Start-Process powershell -Verb RunAs
-ArgumentList "-NoExit -File ScriptToInvoke.ps1 -StringArray ""$stringArray"" -Mode Mode3 -Verbose"
在这种情况下, $stringArray
被视为包含一个元素的数组:
我尝试了传递$stringArray
参数的多个变体:
-StringArray $stringArray
-StringArray @($stringArray)
-StringArray @(,@($stringArray))
每个都具有相同的错误:
据我了解,ArgumentList值周围的双引号会导致任何变量被解析。 有可能防止这种情况发生吗? 还是有替代方法?
我的用例涉及尝试以提升的权限重新运行Powershell脚本以卸载Windows更新,这就是为什么我将Start-Process
与-Verb RunAs
一起使用的原因。
我对双引号进行了转义,似乎可以正常工作:
Start-Process powershell -Verb RunAs -ArgumentList "-NoExit -File test.ps1 -StringArray `"$stringArray`" -Mode Mode3 -Verbose"
这是一种方法。 ScriptCallingStartProcess.ps1
:
$stringArray = @('String1','String2','String3')
$OFS=","
Start-Process powershell.exe -Verb Runas "-NoExit -File \ScriptToInvoke.ps1 $stringArray -Mode Mode3 -Verbose"
ScriptToInvoke.ps1
:
[CmdletBinding()]
param (
[Parameter(Mandatory=$True)]
[String] $InputData,
[ValidateSet('Mode1', 'Mode2', 'Mode3')]
[string]$Mode = 'Mode1'
)
$StringArray = $InputData -split ','
$count = $StringArray.Count
Write-Verbose ("String array count ($count): $StringArray")
(即,以逗号分隔的字符串作为第一个参数,然后在第二个脚本内拆分)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.