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