powershell变量目录返回null

时间:2017-05-15 15:28:02

标签: powershell

我正在尝试获取不是我想要的版本的文件列表,我创建了一个包含3个变量的函数:

  • 版本号
  • 文件夹名称
  • 文件夹的路径

如果文件版本与$version不匹配,我将该行写出来,以便知道文件名及其实际版本号。

Function Check-Version ($version, $folderName, $folderPath)
{
    Write-Host $version, $folderName, $folderPath
    $list = get-childitem $folderPath\* -include *.dll,*.exe
    foreach ($one in $list)
    {
        If ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($one).FileVersion -ne $version)
        {
            $line = "{0}`t{1}" -f [System.Diagnostics.FileVersionInfo]::GetVersionInfo($one).FileVersion, $one.Name
            Write-Host $line
        }
    }
}

Check-Version ("1.0", "bin", "C:\bin")

我的问题是当我使用get-childitem时路径变量为NULL,但如果我使用write-host则它是正确的。

顶部的Write-Host行返回正确的值。

如果我尝试cd $folderPath,我会收到错误:

  

cd:无法处理参数,因为参数“path”的值为null。将参数“path”的值更改为非空值。

当我尝试去那个目录时,我不明白为什么$folderPath为NULL。

1 个答案:

答案 0 :(得分:1)

您的问题是您将3个参数作为数组传递给第一个参数,而不是传递三个单独的参数。更改Check-Version ("1.0", "bin", "C:\bin") - > Check-Version "1.0" "bin" "C:\bin"

您可以通过将Write-Host分成3行来看到差异:

Function Check-Version ($version, $folderName, $folderPath) {
    Write-Host "Version: $version"
    Write-Host "FolderName: $folderName"
    Write-Host "FolderPath: $folderPath"
    $list = get-childitem $folderPath\* -include *.dll,*.exe
    Set-Location $folderPath
    foreach ($one in $list) {
        If ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($one).FileVersion -ne $version) {
            $line = "{0}`t{1}" -f [System.Diagnostics.FileVersionInfo]::GetVersionInfo($one).FileVersion, $one.Name
            Write-Host $line
        }
    }
}

Check-Version "1.0" "bin" "C:\bin"