2011-10-06 54 views
4

我有以下PowerShell脚本:如何将数组参数传递给powershell -file?

param(
    [Int32[]] $SomeInts = $null, 
    [String]$User = "SomeUser", 
    [String]$Password = "SomePassword" 
) 

New-Object PSObject -Property @{ 
    Integers = $SomeInts; 
    Login = $User; 
    Password = $Password; 
} | Format-List 

如果我执行.\ParameterTest.ps1 (1..10)我得到如下:

Password : SomePassword 
Login : SomeUser 
Integers : {1, 2, 3, 4...} 

但是,我没有得到预期的结果,如果我在一个单独的PowerShell中运行它像这样的例子powershell -file .\ParameterTest.ps1 (1..10)。在这种情况下,我得到如下:

Password : 3 
Login : 2 
Integers : {1} 

我的问题是如何传递的阵列,或通过命令行其他复杂的数据类型?

回答

2

答案是使用powershell.exe -EncodedCommand并对base64进行参数编码。对此的描述在PowerShell.exe Console Help technet页面上。我已经压缩了仪式的版本做成一个班轮这一点:

powershell.exe -EncodedCommand "$([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('.\ParameterTest.ps1 (1..10)')))" 
6

阵列(1..10)的各个元素被作为参数传递给脚本。

另一种方法是做:

powershell -command {.\test.ps1 (1..10)} 

对于无论从PowerShell控制台和CMD工作的版本:

powershell -command "&.\test.ps1 (1..10)" 
+0

这是简单的,然后-EncodeCommand,并将从CMD.EXE作为工作好。 –

相关问题