Powershell中模块功能的参数

在尝试创建一个函数之前,我能够执行这个命令。

$unzip ="c:pathTomyZip.zip"
$dst = "c:destination"
saps "c:Program Fileswinzipwzunzip.exe" "-d $unzip $dst" -WindowStyle Hidden -Wait

然后我在一个模块中创建了这个函数,我试图传递参数给..

function RunCmd ($cmd){
    write-host "cmd: $cmd" 
    saps $cmd -WindowStyle Hidden -Wait 
}

我已验证模块已正确导入,但当我尝试将参数传递给函数时,出现错误,指出无法读取参数。

我已经尝试了多种方法来传递参数,但没有任何工作。

例子

$cmd = @{'FilePath'= '$unzip';
     'ArgumentList'= '-d $unzip dst';}
RunCmd  @cmd


RunCmd """$unzip"" ""-d $unzip $dst"""

我注意到,命令和参数将通过双引号传递给函数,做第二个选择,但那是当我得到参数null异常。

我也试图改变功能,分别传递命令和参数,但没有成功。

function RunCmd ($cmd, $args){
    write-host "cmd: $cmd" 
    saps $cmd $args -WindowStyle Hidden -Wait 
}

有任何想法吗?

更新:

这是我的新功能..

function RunCmd ($log, $cmd, $args){
    Log-Cmd $log
    saps -FilePath $cmd -ArgumentList $args -WindowStyle Hidden -Wait 
}

也试过..

> function RunCmd ($log, $cmd, [string[]]$args){
>     Log-Cmd $log
>     saps -FilePath $cmd -ArgumentList $args -WindowStyle Hidden -Wait  }

但是当函数试图执行时,我得到一个错误,说参数是空的。

启动过程:无法验证参数'ArgumentList'的参数。 参数为空,空或参数集合的元素包含空值。 提供一个不包含任何空值的集合,然后再次尝试该命令。 在c: path to module myModule.psm1:39 char:38 + saps -FilePath $ cmd -ArgumentList <<<< $ args -WindowStyle Hidden -Wait + CategoryInfo:InvalidData:(:) [Start-Process] ,ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StartProcessCommand

我已经尝试过多种方法来调用这个函数..

RunCmd -log $log -cmd $unzip -args '-d', '$unzip', '$dst'
RunCmd $log $unzip '-d', '$unzip', '$dst'
RunCmd $log $unzip "-d", "$unzip", "$dst"

您必须将参数作为字符串数组传递给Start-Process cmdlet。 这是一个非常基本的例子:

function Unzip-File ($ZipFile, $Destination)
{
    $wzunzip = 'c:Program Fileswinzipwzunzip.exe'
    Start-Process -WindowStyle Hidden -Wait -FilePath $wzunzip -ArgumentList (
        '-d',
        $ZipFile,
        $Destination
    ) 
}

Unzip-File 'c:pathTomyZip.zip' 'c:destination'

更新:

有没有办法将exe文件传递给函数? 我最终会有多个exe文件进入记录命令的函数,然后执行它。

当然:

function Start-ProcAndLog ($ExeFile, $CmdLine)
{
    Start-Process -WindowStyle Hidden -Wait -FilePath $ExeFile -ArgumentList $CmdLine
}

# Note commas in second parameter: '-arg1', '-arg2', '-arg3' is an array
Start-ProcAndLog 'c:pathtofile.exe' '-arg1', '-arg2', '-arg3'
链接地址: http://www.djcxy.com/p/37881.html

上一篇: Parameters to a function of a module in Powershell

下一篇: Powershell Get