繁体   English   中英

在Powershell中,如何将数组作为参数传递,该数组是Start-Process -ArgumentList的多个参数之一

[英]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.

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