我想从日志文件中获取已安装的版本和当前版本,并使用以下命令获取输出:
$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]
答案 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]
编辑 - PowerShell 2.0版本
$installedVersion = $([regex]::Matches($myString,$installedRegex)).Groups[1].value
$CurrentVersion = $([regex]::Matches($myString,$currentRegex)).Groups[1].value