比较已安装和当前版本

时间:2017-06-27 06:16:14

标签: regex powershell powershell-v2.0

我想从日志文件中获取已安装的版本和当前版本,并使用以下命令获取输出:

$versions = Select-String -Path $path -Pattern "Comparing product versions" |
            % { $_.Line.Split() }

$installed = $versions[6]
$installed = echo "$installed".Trim(",")
$current   = $versions[7]

问题是:我不想要硬编码。有没有像regex这样的方法来替换它并单独安装版本和当前版本。

这是相关日志行的样子:

ISS_LOG [14:45:36]: Comparing Product Versions - Installed[1.2.0.10], Current[1.2.0.10]

尝试第一个解决方案,我收到一个错误: Error - cannot index into null array

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式字符串Installed\[(.*)\],Current\[(.*)\],假设您的模式是您已安装/ current后跟方括号和版本号。

这将返回具有完全匹配(不是您想要的)的组,并匹配方括号(您想要的)的内容。 More regex explanation

代码:

$myString = "ISS_LOG [14:45:36]: Comparing Product Versions - Installed[1.2.0.10], Current[1.2.0.10]"

$installedRegex = "Installed\[(.*)\],"
$currentRegex   = "Current\[(.*)\]"

$installedVersion = $([regex]::Matches($myString,$installedRegex)).Groups.value[1]
$CurrentVersion   = $([regex]::Matches($myString,$currentRegex)).Groups.value[1]

<强>输出 On PowerShell 5.1

编辑 - PowerShell 2.0版本

$installedVersion = $([regex]::Matches($myString,$installedRegex)).Groups[1].value
$CurrentVersion   = $([regex]::Matches($myString,$currentRegex)).Groups[1].value