我正在尝试获取不是我想要的版本的文件列表,我创建了一个包含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。
答案 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"