【问题标题】:Comparing installed and current versions比较已安装和当前版本
【发布时间】:2017-11-30 02:25:02
【问题描述】:

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

$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]:比较产品版本 - 已安装 [1.2.0.10]、当前 [1.2.0.10]

尝试第一个解决方案,我得到一个错误:

【问题讨论】:

  • 您究竟将什么称为“硬编码”?
  • 如果我将字符串的位置指定为 7,那么这将是硬编码。在某些情况下,位置可能不同,因此我不会得到正确的输出。
  • 抱歉,水晶球在清洁工那里。请提供示例输入并解释您要从中提取的内容。 Edit您的问题。
  • ISS_LOG [14:45:36]: Comparing Product Versions - Installed[1.2.0.10], Current[1.2.0.10] 这是日志文件中的一行我想使用正则表达式在一行中获取输出 $installed=1.2.0.10 并在下一行中获取 $current=1.2.0.10

标签: regex powershell powershell-2.0


【解决方案1】:

您可以使用正则表达式字符串Installed\[(.*)\],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

【讨论】:

  • 执行 $installedVersion 后出现错误,错误是无法索引到空数组
  • 在 PowerShell 5.1 中工作正常 - 添加了输出屏幕截图。请记住,只有当该行具有 Installed[ver],Curent[ver]... 时才能正常工作...否则将找不到匹配项并且数组将为空。您可以在try/catch 中处理此问题,或使用if($myString -like ... 仅处理您知道将包含这些字段的字符串。
  • 根据你的截图,我会接受你的回答,但我的问题还没有解决,我已经附上了screenshort作为答案,我希望你能给我一个解决方案。无论如何谢谢哥们
  • @SumithChalil 编辑您的问题以发布更多信息,或在评论中发布链接...我很好奇为什么这不起作用!
  • @SumithChalil Aaa,它是 PowerShell 2.0 引擎。请参阅编辑;看起来它处理组的方式不同。
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
相关资源
最近更新 更多