用于收集屏幕保护程序使用情况的WMI数据的Perl脚本

时间:2014-02-13 17:16:34

标签: perl scripting

我是脚本/编程和WMI的新手,但我的任务是从系统列表中收集信息,以查看屏幕保护程序是否处于活动状态。我需要能够将信息存储到文件中,并且每10分钟左右运行一次cron作业,并将结果附加到所述文件。

在那里还有注释要写入文件,因为我只是让它首先返回正确的信息。

你们可以提供的任何指示都会很棒。

这是我到目前为止所做的:

#!/usr/bin/perl

use strict;

my $file = 'hosts.txt';
open my $info, $file or die "Could not open $file: $!";

while( my $line = <$info>)  { 
    my $user = "uid";
    my $password = "pwd";
    my $server = $line;
    my $result = `wmic -U domain/$user%"$password" //$server "select * from Win32_Process WHERE Name = 'LogonUI.exe'"`;
    my @results = split(/\n/,$result);
    my @tmparray = split(/\|/, @results[2]);
    my $isActive = 0;

    use POSIX qw/strftime/;

    if (@tmparray[0] eq 'LogonUI.exe') {
        $isActive = 1;
    }
    else {
        $isActive = 0;
    }

    print strftime("Date:%Y-%m-%d %H:%M:%S, ", localtime(time));
    print "Host:$server, Screensaver IsActive:$isActive,\n";
}

1 个答案:

答案 0 :(得分:0)

Win32::OLE支持创建管理对象。我这样用过它:

Win32::OLE->GetObject( "winmgmts:\\\\$host\\$path" );

然后使用该对象调用ExecQuery方法:

$wmi->ExecQuery( 
      $query
     , 'WQL'
     , (  ( $flags // 0 ) 
       || wbemFlagReturnImmediately | wbemFlagForwardOnly
       )
     );

我只在本地计算机上使用它来自动更改我的IP配置。