【问题标题】:Save names and file-versions to csv (Powershell)将名称和文件版本保存到 csv (Powershell)
【发布时间】:2021-08-09 13:30:30
【问题描述】:

我有一些包含一些 .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 csv export-to-csv


    【解决方案1】:

    所以 - 使用内置的 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";
    

    【讨论】:

      【解决方案2】:

      如果它是你想要的 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 约定

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 2018-12-13
        • 2018-07-07
        • 2013-02-28
        • 2012-12-09
        • 1970-01-01
        • 2018-05-04
        相关资源
        最近更新 更多