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



我对脚本/编程和 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";
}

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

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

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

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

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

最新更新