免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5656 | 回复: 9
打印 上一主题 下一主题

请问如何在linux下使用perl,通过WMI来获取远程windows的信息? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-30 13:29 |只看该作者 |倒序浏览
请问如何在Linux下,通过perl模块,获取远程windows机器的信息?(不使用telnet)

我看了一些例子,通过Win32::OLE和DBD::WMI,来获取WINDOWS机器的CPU等信息,但是这些例子上的脚本,应该都是在windows上运行的,因为在linux上,无法安装Win32::OLE和DBD::WMI这两个模块。

请问在Linux下能够使用wmi来连接到远程windows吗?
或者有没有其他方法,能够在linux下使用perl,来获取远程windows信息?
比如说CPU使用率,某个进程状态,等等

谢谢!

以下是我查询到的windows上的perl脚本,希望能找到Linux上的相应解决方法,谢谢!

use Win32::OLE qw[in];
my $host = $ARGV[0] || '.';
my $wmi = Win32::OLE->GetObject( "winmgmts://$host/root/cimv2" )
        or die Win32::FormatMessage( Win32::OLE::LastError() );

my %instances = (
        Win32_PhysicalMemory => &get_pmem,
        Win32_PerfRawData_PerfOS_Memory => &get_amem,
        Win32_Processor => &get_load,
        Win32_LogicalDisk => &get_disk,
);

my $out = get_perf_data();
print "$out\n";

sub get_perf_data {
        my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
        $year = $year + 1900;
        $mon  = $mon + 1;
        my $str = sprintf "%4.4d-%2.2d-%2.2d",$year,$mon,$mday;
        my $timestr = sprintf "%2.2d:%2.2d:%2.2d",$hour,$min,$sec;

        my $mem;
        foreach ( keys %instances ) {
                my $class = $wmi->InstancesOf( $_ );
                $mem .= $instances{ $_ }->( $class );
        }

        my $out = "##nCollect Time: ".$str." ".$timestr."n".$mem."%%rn";
        return $out;
}

# get cpu loadavg
sub get_load {
        my $class = shift;
        my $total="";
        my $i = 0;
        $i++,$total = $total."CPU No. $i: ".$_->{LoadPercentage}."%n" foreach in($class);
        return $total;
}

# get total memory size
sub get_pmem {
        my $class = shift;
        my $total;
        $total += $_->{Capacity} foreach in($class);
        return "Physical Memory: $total Bytesn";
}

# get available memory size
sub get_amem {
        my $class = shift;
        my $amem;
        $amem .= join ' ', $_->{AvailableBytes} foreach in($class);
        return "Available Memory: $amem Bytesn";
}

# get free disk sizes
sub get_disk {
        my $class = shift;
        my $total = "";
        $total .= "DISK ".$_->{DeviceID}." Free: ".$_->{FreeSpace}." Bytesn" foreach in($class);

        return $total;
}

论坛徽章:
0
2 [报告]
发表于 2010-05-31 09:43 |只看该作者
WMI 本来就是 windows 提供的功能,这些模块能否做到独立OS,你去看看模块的document嘛,个人感觉不太可能

至于除了 WMI 的其他方法,这就和是否远程连接没有多大关系了,远程OS自身提供很多CLI的管理工具,调用不就可以了?比如 PsList, PsKill,tasklist 等

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
3 [报告]
发表于 2010-05-31 10:47 |只看该作者
通过snmp协议吧

论坛徽章:
0
4 [报告]
发表于 2010-05-31 12:33 |只看该作者
本机WMI信息知道弄,远程的不知道。

也等答案。

论坛徽章:
0
5 [报告]
发表于 2010-05-31 13:32 |只看该作者
回复 4# iamlimeng


    远程的WMI,如果脚本是在windows上运行,也好办,使用Win32::OLE或DBD::WMI,就可以。

我的问题在于,脚本必须是得在Linux上运行,Linux上不知道能用什么模块,连接到远程windows的WMI。

期待。

论坛徽章:
0
6 [报告]
发表于 2010-05-31 16:21 |只看该作者
回复  iamlimeng


    远程的WMI,如果脚本是在windows上运行,也好办,使用Win32::OLE或DBD::WMI,就 ...
jjqing 发表于 2010-05-31 13:32



    俺们用STAF
全部机器上安装STAF,然后加入信任你机器的STAF配置,远程调用staf process功能用wmic读东西
PS: STAF跨平台

论坛徽章:
0
7 [报告]
发表于 2010-06-01 22:01 |只看该作者
看看  samba套件里面的
rpcclient 这个工具 能满足你不

RPCCLIENT(1)                     User Commands                    RPCCLIENT(1)

NAME
       rpcclient - tool for executing client side MS-RPC functions

SYNOPSIS
       rpcclient [-A authfile] [-c <command string>] [-d debuglevel] [-h]
        [-l logdir] [-N] [-s <smb config file>] [-U username[%password]]
        [-W workgroup] [-I destinationIP] {server}

DESCRIPTION
       This tool is part of the samba(7) suite.

       rpcclient is a utility initially developed to test MS-RPC functionality
       in Samba itself. It has undergone several stages of development and
       stability. Many system administrators have now written scripts around
       it to manage Windows NT clients from their UNIX workstation.

论坛徽章:
0
8 [报告]
发表于 2010-06-03 15:24 |只看该作者
回复 7# SNYH


谢谢!
这个也不失为一个解决方法,目前在测试机上,关闭windows防火墙后,确实可以登录:
[root@dev snmp]# rpcclient 3.3.3.1 -U Administrator
Password:
rpcclient $> ?
---------------         ----------------------
        TESTING
         testme         Sample test
---------------         ----------------------
       SHUTDOWN
---------------         ----------------------
           ECHO
     echoaddone         Add one to a number
       echodata         Echo data
       sinkdata         Sink data
     sourcedata         Source data
---------------         ----------------------

论坛徽章:
0
9 [报告]
发表于 2010-06-03 17:37 |只看该作者
通过snmp协议吧
shijiang1130 发表于 2010-05-31 10:47



论坛徽章:
0
10 [报告]
发表于 2012-11-07 17:45 |只看该作者
在windows上用wmi生成文件,ftp传送到unix上监控呗。
不然你就windows上开启snmp管理吧,用snmp能监控部分信息,没有wmi的全。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP