我在Windows系统上安装了一个应用程序。我有一个Perl脚本,每天都会重新安装相同的软件。
我想知道软件是否真的安装好了。
我想到的一种方法是检查应用程序的安装日期。
答案 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
%perl%
实用程序速度不快:该命令在我的系统上执行大约需要十五秒
此程序读取与给定模式匹配的所有产品的名称,版本和安装日期。我使用过@products
,但您会想要使用能够选择您感兴趣的产品的东西
数组InstallDate
中的CSV数据行将转换为哈希值,并以标题行中的值键入。请注意,与SQL不同,这些值不会按照命令行中的请求顺序显示
请注意,version
字段仅日期,因此如果产品在同一天更新两次,则该值不会更改。这就是为什么我还包含了Win32_Product
字段,如果您的软件保留了正确的版本系统,它将正确区分更新
Data::Dump
类on 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