Входной файл для задания Perl - PullRequest
1 голос
/ 02 июня 2011

У меня есть простое пакетное задание, которое ищет пользователей в группе из 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 ]

1 голос
/ 02 июня 2011

Вот мое решение:

Пример 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
}
0 голосов
/ 02 июня 2011

Я думаю, что вы, возможно, хотите настроить файл конфигурации.

Загляните в пространство имен Config :: на cpan.

Вот одно из возможных решений, основанное на Config :: Авто .Я выбрал формат файла конфигурации как 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...