Ограничьте вывод PowerShell VersionInfo только тремя десятичными разрядами, где задано 4 десятичных знака, или удалите десятичное место в VersionInfo - PullRequest
3 голосов
/ 08 сентября 2011

Я старался изо всех сил, чтобы найти ответ самостоятельно в течение почти 2 дней перед публикацией.Я заранее извиняюсь, если где-то на этом сайте уже есть ответ.

Короче говоря, мне нужно извлечь VersionInfo из .dll, которую я сейчас использую:

[System.Diagnostics.FileVersionInfo] :: GetVersionInfo ('C: \ PathHere.dll'). FileVersion |New-Item -ItemType file c: \ test.txt

Это работает для меня, хотя, если у кого-то есть то, что, по его мнению, является более чистым методом, я весь слух ... или точнее...все глаза.Сценарий примет полное значение версии и запишет в текстовый файл так, как я хочу, но я проблема в том, что мне нужны только первые 3 десятичных знака, и в этом случае я получаю полную информацию о версии, которая всегда4 знака после запятой.

Итак, если VersionInfo - 1.3.102310.0345, я хочу, чтобы этот файл .txt содержал только 1.3.102310. Очень важно, чтобы оставшееся число НЕ было округлено.

Поскольку конечным результатом являются полные значения для этих первых трех десятичных знаков, мне все равно, если вывод версии каким-то образом ограничен отображением только первых трех десятичных знаков или полная информация о версии записана в.TXT, а затем надежно удаляется из файла.

Ответы [ 4 ]

3 голосов
/ 09 сентября 2011

Попробуйте это:

$value = [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...)
$version = [version]$value.ProductVersion
$output = $version.tostring(3) # show x.y.z
$output | out-file c:\test.txt
0 голосов
/ 09 сентября 2011

Эти ответы превосходны, и все сделали свое дело.После публикации этого вопроса я замедлил шаг, сделал шаг назад и во время разговора с другом меня ударил другой возможный ответ.

$ VersionInfo = [System.Diagnostics.FileVersionInfo] :: GetVersionInfo ('C: \ Builds \ Agent1 \ QACodeLine \ Sources \ WebPublicBuild \ Binaries \ PowerWallet.Common.CommonTypes.dll'). FileVersion $ VersionInfo.split ('.') |выберите первый 3 |out-File "C: \ testies.txt"

Этот метод сначала разбивает вывод на 4 части, используя .split ('.'), а затем принимает только первые 3 с помощью select -first3 (выберите только первые 3 выхода. Выход можно затем присоединить или, если это более полезно, сохранить построчно в файл, но я думаю, что я пойду с одним из методов, представленных здесь, так как в конце я буду лучшезапись в текстовый файл с первыми 3 октетами в правильном формате информации о версии.

Еще раз спасибо за быстрые ответы - помощь очень ценится! PowerShell невероятна, а сообщество поддержки даже более того!

0 голосов
/ 08 сентября 2011

Это еще один способ:

$a = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\my.dll').fileversion; $a.Substring(0, $a.LastIndexOf('.')) |  New-Item –ItemType file c:\test.txt
0 голосов
/ 08 сентября 2011

Это должно сделать это:

[string]::Join('.', (Get-Item C:\PathHere.dll).versionInfo.FileVersion.Split('.')[0..2]) |  New-Item –ItemType file c:\test.txt

Или регулярное выражение, если вам нужны две проблемы:

(Get-Item C:\PathHere.dll).versionInfo.FileVersion -replace '^(\d+\.\d+\.\d+)\.\d+$', "`$1" | New-Item –ItemType file c:\test.txt
...