Ограничьте вывод PowerShell VersionInfo только тремя десятичными знаками, где указано 4 десятичных знака, или удалите десятичный знак в VersionInfo.

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

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

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

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

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

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


person ShowStopper    schedule 08.09.2011    source источник


Ответы (4)


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

$value = [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...)
$version = [version]$value.ProductVersion
$output = $version.tostring(3) # show x.y.z
$output | out-file c:\test.txt
person x0n    schedule 08.09.2011
comment
Я думаю, вам нужно это, чтобы это работало: - person CB.; 09.09.2011
comment
нет! ему нужно: [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...).ProductVersion ! - person CB.; 09.09.2011
comment
Я попробовал это, но не смог заставить его работать - несомненно, это ошибка пользователя, поэтому я продолжу пробовать, просто чтобы лучше понять, если ничего другого. Большое спасибо за быстрый ответ и поддержку как manojlds, так и Cristian. - person ShowStopper; 09.09.2011
comment
У меня сработало после замены первого ToString() на ProductVersion. - person JasonMArcher; 10.09.2011

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

$a = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\my.dll').fileversion; $a.Substring(0, $a.LastIndexOf('.')) |  New-Item –ItemType file c:\test.txt
person CB.    schedule 08.09.2011
comment
Еще раз спасибо, Кристиан. Это абсолютно работает, и еще раз, я ценю тщательный ответ и поддержку! - person ShowStopper; 09.09.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
person EBGreen    schedule 08.09.2011
comment
Это работает очень хорошо и кажется намного чище, чем направление, которое я использовал с разделением, выбором первых 3 и повторным объединением (хотя этот метод имеет другие применения в том, что я делаю). Большое спасибо за невероятные ответы - оба метода наверняка будут полезны мне и другим, ищущим подобное решение! - person ShowStopper; 09.09.2011

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

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

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

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

person ShowStopper    schedule 09.09.2011