比较已安装的版本和当前版本
Comparing installed and current versions
我想从日志文件中获取已安装的版本和当前版本,我已经使用以下命令获得了输出:
$versions = Select-String -Path $path -Pattern "Comparing product versions" |
% { $_.Line.Split() }
$installed = $versions[6]
$installed = echo "$installed".Trim(",")
$current = $versions[7]
问题是:我不想硬编码。有没有像正则表达式这样的方法来替换它并分别获取安装版本和当前版本。
这是相关日志行的样子:
ISS_LOG [14:45:36]: Comparing Product Versions - Installed[1.2.0.10], Current[1.2.0.10]
尝试第一个解决方案时,出现错误:
您可以使用正则表达式字符串 Installed\[(.*)\],
和 Current\[(.*)\]
,假设您的模式是 installed/current 后跟带有版本号的方括号。
此 returns 组具有完全匹配(不是您想要的)和匹配方括号中的内容(您想要的)。 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
我想从日志文件中获取已安装的版本和当前版本,我已经使用以下命令获得了输出:
$versions = Select-String -Path $path -Pattern "Comparing product versions" |
% { $_.Line.Split() }
$installed = $versions[6]
$installed = echo "$installed".Trim(",")
$current = $versions[7]
问题是:我不想硬编码。有没有像正则表达式这样的方法来替换它并分别获取安装版本和当前版本。
这是相关日志行的样子:
ISS_LOG [14:45:36]: Comparing Product Versions - Installed[1.2.0.10], Current[1.2.0.10]
尝试第一个解决方案时,出现错误:
您可以使用正则表达式字符串 Installed\[(.*)\],
和 Current\[(.*)\]
,假设您的模式是 installed/current 后跟带有版本号的方括号。
此 returns 组具有完全匹配(不是您想要的)和匹配方括号中的内容(您想要的)。 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