czwartek, 2 marca 2023

Pobranie wersji pliku w PowerShell

 Za pomocą PowerShell możemy w łatwy sposób pobrać wersję pliku (biblioteki). Może się do przydać np. gdy chcemy sprawdzić czy na maszynie na pewno wrzucona jest poprawna wersja. Inną sytuację kiedy może się przydać ta wiedza jest sytuacja kiedy operujemy na wielu aplikacjach i chcemy sprawdzić jakiej wersji biblioteki używa dana aplikacja. 

Na początek oczywiście musimy znaleźć interesującą nas bibliotekę:

 $files = Get-ChildItem -Path "$directory\*.dll" -Recurse -Filter $dllName  

Powyższy kod zwróci wszystkie znalezione pliki. Teraz pozostaje już sprawdzenie właściwości VersionInfo.FileVersion:

 foreach ($file in $files) {            
   Write-Host $file.VersionInfo.FileVersion  
 }  

Używając komendy Invoke-Command możemy powyższy przykład przekształcić do skryptu który przeszukuje wiele hostów i zapisuje rezultat do pliku

 $hostsList = "host1", "host2", "host3"  
 $directoriesToSearch = "C:\directory1", "C:\directory2"  
 $dllNameVersionYouWantToLog = "Aspnet.dll"  
 $report = "c:\temp\report.txt"  
 New-Item -Path $report -ItemType File  
 foreach ($vmHost in $hostsList) {  
   $result = Invoke-Command -ComputerName $vmHost -ArgumentList ($vmHost, $dllNameVersionYouWantToLog, $directoriesToSearch) -ScriptBlock {  
     Param ($vmHost, $dllName, $directoriesToSearch)  
     Write-Host $vmHost  
     $pathsWithVersion = New-Object -TypeName "System.Text.StringBuilder";  
     foreach($directory in $directoriesToSearch) {  
       if (Test-Path -Path $directory){  
         $files = Get-ChildItem -Path "$directory\*.dll" -Recurse -Filter $dllName  
         foreach ($file in $files) {  
           [void]$pathsWithVersion.AppendLine("$($vmHost);$($file);$($file.VersionInfo.FileVersion)")  
         }  
       }  
     }  
     return $pathsWithVersion.ToString()  
   }  
   if($result) {  
     Add-Content $report -Value "$($result)"  
   }  
 }  

Oczywiście nic nie stoi na przeszkodzie aby parametry do skryptu przesłać z lini komend, bądź wczytać z pliku. Jedynym ograniczeniem jest wyobraźnia :)

Brak komentarzy:

Prześlij komentarz