在Windows上获取特定应用程序的安装日期

时间:2016-09-08 10:18:17

标签: windows perl wmi wmic

我在Windows系统上安装了一个应用程序。我有一个Perl脚本,每天都会重新安装相同的软件。

我想知道软件是否真的安装好了。

我想到的一种方法是检查应用程序的安装日期。

2 个答案:

答案 0 :(得分:1)

您可以通过WMIC

来完成
  

Windows Management Instrumentation命令行(WMIC)使用   Windows Management Instrumentation(WMI)的强大功能,可以启用系统   从命令行管理。

要使用Perl与WMIC交互,您可以考虑使用Net::WMIClient

简而言之,您只需要直接或通过相关模块调用WMIC。

您正在寻找wmic product命令,该命令将提供有关所有已安装软件的完整信息。

没有模块:

my @all_installed_products_info = `wmic product`;
print "@all_installed_products_info";

使用Net :: WMIClient:

use Net::WMIClient qw(wmiclient);
my $options = {Username => 'u1', Password => 'pass', Host => '...', Timeout => '...'};
($status, $output) = wmiclient($options, "wmic product");

另见:

编辑:引用README来回答Borodin的评论。

  

依赖

     

此模块需要以下其他模块和库:

     

来自wmi包的lib_async_wmilib.so以及已配置的   构建时的源代码。当前来源位于http://www.edcint.co.nz/checkwmiplus/wmi-1.3.14.tar.gz

答案 1 :(得分:1)

我从未成功安装Net::WMIClient模块:它需要一个难以捉摸的外部库,该库不在模块文档链接到的包中

在Perl中使用反引号直接使用wmic命令是相当简单的。你需要记住这些事情

  • 该实用程序返回的每一行都将以CR LF对结束。我已使用s/\R\z//在下面的代码中删除了这些内容,\R使用@data模式匹配任何行终止符序列

  • 该实用程序的输出在开头有一个空行。我已从数组/format:csv的开头删除元素,直到第一个元素包含非空格字符

  • 第一个非空行是一系列列名

  • 除非另行指定,否则实用程序的输出包含固定宽度的数据列。如果您使用选项wmic

  • 请求CSV格式,则会更容易处理
  • %perl%实用程序速度不快:该命令在我的系统上执行大约需要十五秒

此程序读取与给定模式匹配的所有产品的名称,版本和安装日期。我使用过@products,但您会想要使用能够选择您感兴趣的产品的东西

数组InstallDate中的CSV数据行将转换为哈希值,并以标题行中的值键入。请注意,与SQL不同,这些值不会按照命令行中的请求顺序显示

请注意,version字段日期,因此如果产品在同一天更新两次,则该值不会更改。这就是为什么我还包含了Win32_Product字段,如果您的软件保留了正确的版本系统,它将正确区分更新

Data::Dumpon the Microsoft Developer Network here有一个完整的属性和方法列表(我们只对这里的属性感兴趣)。您可能会发现其他有用的字段

我使用@products来显示数组use strict; use warnings 'all'; my @products = `wmic product where "name like '%perl%'" get name, version, installdate /format:csv `; s/\R\z// for @products; shift @products until $products[0] =~ /\S/; my @keys = split /,/, shift @products; for ( @products ) { my %item; @item{@keys} = split /,/; $_ = \%item; } use Data::Dump; dd \@products; 的最终内容,仅用于演示目的。我相信你能够从那里开展工作来执行你需要的检查

[
  {
    InstallDate => 20160517,
    Name => "Strawberry Perl (64-bit)",
    Node => "CALAMUS",
    Version => "5.24.1",
  },
]

输出

w