传递多个参数的Powershell问题

时间:2017-09-19 18:41:42

标签: powershell

我有以下函数将文件版本字符串与实际文件进行比较,如果文件较低则返回1:

function FileVersionDetectionCheck() {
param([string]$file)
$fileversion = (get-item $file).VersionInfo.ProductVersion
$fileversionobject = [System.Version]$fileversion
$targetversion = [System.Version]::Parse("11.0.9700")

Write-Output "File Version:" $fileversionobject
Write-Output "Target Version:" $targetversion

if($fileversionobject -ge $targetversion) {
    return 0
}
else {
    return 1
}
}

FileVersionDetectionCheck("C:\program files\internet explorer\iexplore.exe")

此代码工作正常。但是,如果我添加第二个字符串参数...

function FileVersionDetectionCheck() {
param([string]$file,[string]$version)
$fileversion = (get-item $file).VersionInfo.ProductVersion
$fileversionobject = [System.Version]$fileversion
#$targetversion = [System.Version]::Parse("11.0.9700")
$targetversion = [System.Version]$version

Write-Output "File Version:" $fileversionobject
Write-Output "Target Version:" $targetversion

if($fileversionobject -ge $targetversion) {
    return 0
}
else {
    return 1
}
}

FileVersionDetectionCheck("C:\program files\internet explorer\iexplore.exe", 
"11.0.9700")

它出错:

get-item:找不到路径'C:\ program files \ internet explorer \ iexplore.exe 11.0.9700',因为它不存在。

似乎是将两个参数作为单个字符串读取。

据我所知,这是将多个参数传递给函数的有效方法。我做错了什么或者这可能是个错误吗?

2 个答案:

答案 0 :(得分:2)

Powershell函数与其他语言的方法不同。从函数名function FileVersionDetectionCheck()中删除括号,然后在调用函数时不要使用逗号或括号。例如

myFunction firstParam secondParam

使用上面的代码,它看起来就像这样。

FileVersionDetectionCheck "C:\program files\internet explorer\iexplore.exe" "11.0.9700"

答案 1 :(得分:0)

再加上Jason的回答,这是两个参数的样子

function FileVersionDetectionCheck 
{
    param([string]$file,[string]$version)
    $fileversion = (get-item $file).VersionInfo.ProductVersion
    $fileversionobject = [System.Version]$fileversion
    #$targetversion = [System.Version]::Parse("11.0.9700")
    $targetversion = [System.Version]$version

    Write-Output "File Version:" $fileversionobject
    Write-Output "Target Version:" $targetversion

    if($fileversionobject -ge $targetversion) {
        return 0
    }else {
        return 1
    }
}

FileVersionDetectionCheck -file "C:\program files\internet explorer\iexplore.exe" -version "11.0.9700")