Perl作业的输入文件

时间:2011-06-01 20:58:35

标签: perl parsing

我有一个简单的批处理作业,可以从Active Directory中查找组中的用户。如果用户数超过阈值,则会发送电子邮件。我在下面包含了一个简化版本的代码,只是为了让您了解我想要实现的目标。我需要帮助的是弄清楚如何使用来自另一个文件的值填充$ Group和$ t值(当前是硬编码的)。不确定我是否应该使用简单的日志文件或xml,但是另一个文件包含组名列表以及我们应该为每个组拥有的用户数阈值。

  • Security_Group_X 50
  • Security_Group_Y 40

然后我希望这个作业从输入文件中读取这些值并执行一个很大的For Each语句。不确定输入文件应该格式化的内容以及读取文件的简便方法,使其处理文件中每个组的下面代码。

    my $Group = "Security_Group_X";
    Win32::NetAdmin::GetDomainController('',$Domain,$Server);

    if(! Win32::NetAdmin::GroupGetMembers($Server,$Group,\@UserList)){
print "error connecting to group " . $Group;
    }
    else {
$i=0;
$t=50;

foreach $user (@UserList){
            $i++.
            print " $user\n";
        }   
    print $i . " Current users in this group.\n";

    if ($i > $t){
    ### i have some code here that would email the count and users ###
    }
    else { 
    print $Group . " is still under the limit. \n";
    }
    }

提前感谢任何建议。

2 个答案:

答案 0 :(得分:1)

这是我的解决方案:

config.txt的示例。只是一个普通的制表符分隔文件,每行有2个值:

  • Security_Group_X 50
  • Security_Group_Y 40

代码示例:

$CONFIGFILE = "config.txt";
open(CONFIGFILE) or die("Could not open log file.");
foreach $line (<CONFIGFILE>) {

@TempLine = split(/\t/, $line);

 $GroupName = $TempLine[0];
 $LimitMax = $TempLine[1];

  # sample code from question (see question above) using the $GroupName and $LimitMax values
}

答案 1 :(得分:0)

我认为您可能正在寻找设置配置文件。

查看cpan上的Config :: name-space。

以下是一种基于Config::Auto的可能解决方案。我选择将配置文件格式化为YAML。

测试计划test.pl

#!/usr/bin/perl
use common::sense;

use Config::Auto;
use YAML;

my $config = Config::Auto::parse();

print YAML::Dump {config => $config};

my %groups = %{ $config->{groups} || {} };

print "\n";

foreach my $group_name (sort keys %groups) {
    my $group_limit = $groups{$group_name};

    print "group name: $group_name has limit $group_limit\n";
}

配置文件test.config的内容:

---
# Sample YAML config file
groups:
  Security_Group_X: 50
  Security_Group_Y: 40

这会产生:

---
config:
  groups:
    Security_Group_X: 50
    Security_Group_Y: 40

group name: Security_Group_X has limit 50
group name: Security_Group_Y has limit 40

更新: test.config可以轻松地包含XML:

<config>
  <!-- Sample XML config file -->
  <groups>
    <Security_Group_X>50</Security_Group_X>
    <Security_Group_Y>40</Security_Group_Y>
  </groups>
</config>