将名称和文件版本保存到 csv (Powershell)

Save names and file-versions to csv (Powershell)

我有一些包含 .exe 文件的文件夹,我想在其中获取名称和文件版本。 我可以得到这些,但我无法将它们保存为漂亮的 .csv 格式。

现在我有:

n1.exe

18.4.0.0

n2.exe

18.4.15.1

n3.exe

18.4.15.1

n4.exe

18.4.15.1

但我想保存为:

n1.exe;18.4.0.0;

n2.exe;18.4.15.1;

n3.exe;18.4.15.1;

n4.exe;18.4.15.1;

这是我的代码。我不知道如何用分号完成它

$folder1="D:\Service\Test";

$exeNames = Get-ChildItem -Filter *.exe -Path $folder1 -Name

#Programm Versionen
function efaFileVersionInfo ($efaprograms, $folder) {
    foreach ($efaprogram in $efaprograms) {
        echo $efaprogram
        [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$folder$efaprogram").FileVersion
    }
}


efaFileVersionInfo $exeNames $folder1 | Out-File D:\Service\folder1.csv

所以 - 使用内置的 PowerShell 函数,您可以通过使用类似这样的东西来实现它:

$folder1 = "D:\Service\Test";
$list = [System.Collections.Generic.List[PSObject]]@();
$exeNames = Get-ChildItem -Filter *.exe -Path $folder1 -Name;

#Programm Versionen
function efaFileVersionInfo ($efaprograms, $folder) {
    foreach ($efaprogram in $efaprograms) {
        $version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$folder$efaprogram").FileVersion;
        if (!([string]::IsNullOrEmpty($version))) { 
            $version = $version.Trim();
        }
        $obj = [PSCustomObject]@{
            FileName = $efaprogram
            FileVersion = $version
        }
        $list.Add($obj);
    }
}

efaFileVersionInfo $exeNames $folder1;
$list | Export-Csv -Path C:\Temp\asd.csv -NoTypeInformation -Delimiter ";";

以这种方式呈现数据:

"FileName";"FileVersion"
"7z1900-x64.exe";"19.00"
"azuredatastudio-windows-user-setup-1.27.0.exe";"1.27.0"
"Docker Desktop Installer.exe";"3.2.2.61853"
"Git-2.31.1-64-bit.exe";"2.31.1.1"
"GitHubDesktopSetup.exe";"2.7.2"
"Greenshot-INSTALLER-1.2.10.6-RELEASE.exe";"1.2.10.6"
"ideaIC-2021.1.1.exe";
"kubectl.exe";

如果它是您想要的 CSV,您需要让函数输出 objects 而不是纯文本。

类似

$folder1  = "D:\Service\Test"
$exeNames = Get-ChildItem -Path $folder1 -Filter '*.exe' -File

# Programm Versionen
function Get-efaFileVersionInfo ($efaprograms, $folder) {
    foreach ($efaprogram in $efaprograms) {
        # output an object
        [PsCustomObject]@{
            Name    = $efaprogram.Name
            Version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($efaprogram.FullName).FileVersion
        }
    }
}

# export to CSV file
Get-efaFileVersionInfo $exeNames $folder1 | Export-Csv -Path 'D:\Service\folder1.csv' -Delimiter ';' -NoTypeInformation

注意:我更改了函数名称,使其符合默认的 PowerShell Verb-Noun 约定