如何从输出中获取版本号

康斯坦丁五世

研发部门已要求我们在公司的所有系统中部署新的Outlook插件...但是,有一个陷阱。如果您有其他任何我们公司过时的插件,则会破坏它们。.因此,我们需要确定端点是否安装了该插件以及它的版本。如果已安装且版本低于“ X”,那么我们需要对其进行更新。另一个问题是,并非每个人都使用这些插件,因此我们不能仅将其推给所有人并每天使用。

这样,我们发现了一个查询,该查询将调用WMI并吐出输出,然后将其写入文件。跑步

"wmic product where "Vendor like '%Microsoft%'" get Name, Version > C:\temp\test.txt" 

给我们输出:

名称版本  
Microsoft Outlook 1.1.9.0的第一个插件  
Microsoft Outlook 2.0.2.0的第二个插件  
Microsoft Outlook 1.2.5.0的第三个插件  
等等。

我们要做的是解析每个版本,并将版本写入文件中,这样我们就可以查看是否需要部署新插件。

前任:

First.txt包含1.1.9.0
Second.txt包含2.0.2.0
等等。

例如,如果Test.txt中没有“ First”,则根本不制作文件。我们几乎必须使用批处理文件来执行此操作,但是应该也可以使用PowerShell来执行此操作(尽管由于我们的部署系统功能不十分强大,因此需要进行一些调整)。

因此,我想知道是否有人可以为我指出有关在Windows系统上执行此操作的正确方向。

mklement0

注意:此答案回答了所述问题从正则表达式匹配的角度来看可能会很有趣,但是要想从根本上获得更好的解决方案,请参见rojo对这个问题的评论


以下Powershell管道.txt根据请求写入单个文件,这些文件以产品命名(带有扩展名)并包含版本号:

Get-Content C:\temp\test.txt | Select-Object -Skip 1 | ForEach-Object `
  { 
     if ($_ -match '^(.*[^ ]) +([^ ]+) *$') { 
       $fname = $matches[1] + '.txt'
       $ver = $matches[2]
       $ver > $fname 
     } 
  }

请注意,输出文件将写入当前目录。

  • Get-Content C:\temp\test.txt 通过管道逐行发送文件的内容。

  • Select-Object -Skip 1 跳过标题行。

  • $_ -match '^(.*[^ ]) +([^ ]+) *$'$_将正则表达式)与使用捕获组((...))捕获可通过特殊match-info变量元素访问的产品名称和版本号子字符串的正则表达式进行匹配$matches

  • $fname = $matches[1] + '.txt'追加.txt到第一个捕获组-产品名称-并将其存储在变量中$fname

  • $ver = $matches[2]保存版本号-第二个捕获分组变量$ver

  • $ver > $fname 只需将版本号写入输出文件即可。

    • 请注意,当您使用输出重定向(>时,PowerShell会创建UTF-16 LE编码的文件要使用其他编码,请使用$ver | Out-File -Encoding utf8

如果要从cmd.exe(批处理文件)调用整个PowerShell命令,请使用以下命令:

powershell.exe -noprofile -command "Get-Content C:\temp\test.txt | Select-Object -Skip 1 | ForEach-Object { if ($_ -match '^(.*[^ ]) +([^ ]+) *$') { $fname = $matches[1] + '.txt'; $ver = $matches[2]; $ver > $fname } }"

要将插件名称的第二个用空格分隔的标记用作文件名,请执行以下操作:

在以上两个命令中,替换为:

$fname = $matches[1] + '.txt'

和:

$fname = (-split $matches[1])[1] + '.txt'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在POM中获取Maven版本号

来自分类Dev

如何在Java中获取Tomcat版本号

来自分类Dev

如何在OS X中获取Bash版本号

来自分类Dev

如何在 Android 中获取 Jenkins 内部版本号?

来自分类Dev

如何获取快照包的版本号?

来自分类Dev

如何获取快照包的版本号?

来自分类Dev

如何使用sed获取版本号

来自分类Dev

从文件中获取版本号

来自分类Dev

如何从数据库的版本表中获取最大版本号?

来自分类Dev

获取应用版本号

来自分类Dev

如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

来自分类Dev

如何在TfvcTemplate.12.xaml中获取内部版本号

来自分类Dev

如何在C#中获取已安装的操作系统版本号

来自分类Dev

如何从结帐中获取SVN版本号以在DSL中使用

来自分类Dev

如何在简单的Shell脚本中获取发行名称和版本号?

来自分类Dev

如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

来自分类Dev

如何在Jenkins工作流程插件中获取SVN版本号?

来自分类Dev

如何在C#中获取已安装的操作系统版本号

来自分类Dev

如何在批处理文件中获取程序的主要、次要等版本号?

来自分类Dev

如何在 React-Native 中获取 Android 版本号?(不是 API 级别编号)

来自分类Dev

如何在iOS SDK中优化获取数据文件版本号?

来自分类Dev

angularjs如何从该指令获取版本号

来自分类Dev

如何使用SVN和Maven获取内部版本号?

来自分类Dev

如何以编程方式获取露天版本号

来自分类Dev

如何使用Maven获取Jenkins内部版本号

来自分类Dev

如何获取上次成功构建的版本号?

来自分类Dev

如何在墙纸上获取Ubuntu版本号?

来自分类Dev

如何使用shell命令仅获取PHP的版本号?

来自分类Dev

如何仅获取 bash ssh 版本号?

Related 相关文章

  1. 1

    如何在POM中获取Maven版本号

  2. 2

    如何在Java中获取Tomcat版本号

  3. 3

    如何在OS X中获取Bash版本号

  4. 4

    如何在 Android 中获取 Jenkins 内部版本号?

  5. 5

    如何获取快照包的版本号?

  6. 6

    如何获取快照包的版本号?

  7. 7

    如何使用sed获取版本号

  8. 8

    从文件中获取版本号

  9. 9

    如何从数据库的版本表中获取最大版本号?

  10. 10

    获取应用版本号

  11. 11

    如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

  12. 12

    如何在TfvcTemplate.12.xaml中获取内部版本号

  13. 13

    如何在C#中获取已安装的操作系统版本号

  14. 14

    如何从结帐中获取SVN版本号以在DSL中使用

  15. 15

    如何在简单的Shell脚本中获取发行名称和版本号?

  16. 16

    如何以编程方式在Android设备中获取设备(AOSP)内部版本号?

  17. 17

    如何在Jenkins工作流程插件中获取SVN版本号?

  18. 18

    如何在C#中获取已安装的操作系统版本号

  19. 19

    如何在批处理文件中获取程序的主要、次要等版本号?

  20. 20

    如何在 React-Native 中获取 Android 版本号?(不是 API 级别编号)

  21. 21

    如何在iOS SDK中优化获取数据文件版本号?

  22. 22

    angularjs如何从该指令获取版本号

  23. 23

    如何使用SVN和Maven获取内部版本号?

  24. 24

    如何以编程方式获取露天版本号

  25. 25

    如何使用Maven获取Jenkins内部版本号

  26. 26

    如何获取上次成功构建的版本号?

  27. 27

    如何在墙纸上获取Ubuntu版本号?

  28. 28

    如何使用shell命令仅获取PHP的版本号?

  29. 29

    如何仅获取 bash ssh 版本号?

热门标签

归档