<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.sachsen.schule/dwiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AKirmse%2Fdelixs-userlist</id>
	<title>Benutzer:Kirmse/delixs-userlist - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sachsen.schule/dwiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AKirmse%2Fdelixs-userlist"/>
	<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/delixs-userlist&amp;action=history"/>
	<updated>2026-05-02T11:38:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Delixs</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/delixs-userlist&amp;diff=7260&amp;oldid=prev</id>
		<title>Kirmse: Script zum Auflisten von Schülern, Lehrern, Klassen</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/delixs-userlist&amp;diff=7260&amp;oldid=prev"/>
		<updated>2009-06-19T20:28:44Z</updated>

		<summary type="html">&lt;p&gt;Script zum Auflisten von Schülern, Lehrern, Klassen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== delixs-userlist ==&lt;br /&gt;
&lt;br /&gt;
* Grundlage fuer dieses Script ist http://www.arktur.th.schule.de/userlist&lt;br /&gt;
&lt;br /&gt;
* Dieses Script dient dazu, User (Lehrer, Schüler, Klassen) aufzulisten.&lt;br /&gt;
&lt;br /&gt;
* Aufruf: delixs-userlist --help&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;oder&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Aufruf: delixs-userlist --kategorie LEHRER &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (oder SCHUELER oder ALL oder KLASSEN)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;oder&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Aufruf: delixs-userlist --class 8b&lt;br /&gt;
&lt;br /&gt;
* Hinweis: wenn --class aufgerufen wurde, dann sollte --kategorie nicht aufgerufen werden oder muss mit SCHUELER belegt werden, sonst Abbruch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== das Script ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use warnings;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
use Net::LDAP;&lt;br /&gt;
use Getopt::Long;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my ($ldap, $ldap_base, $mesg, $kategorie, $class, %filter, @user, @liste,&lt;br /&gt;
    $login, $name, $klasse, %temp);&lt;br /&gt;
&lt;br /&gt;
@user  = ();&lt;br /&gt;
@liste = ();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Initialisieren der Variablen fuer die Parameter&lt;br /&gt;
$kategorie   = &amp;#039;&amp;#039;;&lt;br /&gt;
$class       = &amp;#039;&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
%filter = ( SCHUELER =&amp;gt; &amp;#039;gidNumber=1002&amp;#039;,&lt;br /&gt;
            LEHRER   =&amp;gt; &amp;#039;gidNumber=1001&amp;#039;,&lt;br /&gt;
            KLASSEN  =&amp;gt; &amp;#039;gidNumber=1002&amp;#039;,&lt;br /&gt;
            ALL      =&amp;gt; &amp;#039;(|(gidNumber=1001)(gidNumber=1002))&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# wir holen uns zuerst die Parameter,&lt;br /&gt;
# falls --help, dann Ausgabe der Hilfe (siehe &amp;amp;help) und beenden&lt;br /&gt;
GetOptions(&amp;#039;kategorie=s&amp;#039; =&amp;gt; \$kategorie,&lt;br /&gt;
           &amp;#039;class=s&amp;#039;     =&amp;gt; \$class,&lt;br /&gt;
           &amp;#039;help&amp;#039;        =&amp;gt; \&amp;amp;help);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Wenn weder Parameter --kategorie noch --class uebergeben, dann Abbruch&lt;br /&gt;
if ($kategorie eq &amp;#039;&amp;#039; and $class eq &amp;#039;&amp;#039;) {&lt;br /&gt;
  die &amp;quot;Abbruch: es muss entweder --kategorie oder --class angegeben werden!\n&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Wenn --class und --kategorie uebergeben, &lt;br /&gt;
if ($kategorie ne &amp;#039;&amp;#039; and $class ne &amp;#039;&amp;#039;) {&lt;br /&gt;
  # dann muss --kategorie SCHUELER sein&lt;br /&gt;
  if ($kategorie ne &amp;#039;SCHUELER&amp;#039;) {&lt;br /&gt;
    die &amp;quot;Abbruch: wenn beide Parameter uebergeben, dann -k=SCHUELER !\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Wenn nur --class uebergeben, dann setzen wir --kategorie=SCHUELER&lt;br /&gt;
if ($kategorie eq &amp;#039;&amp;#039;) {&lt;br /&gt;
  $kategorie = &amp;#039;SCHUELER&amp;#039;;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
# --kategorie muss nun SCHUELER | LEHRER | KLASSEN oder ALL sein&lt;br /&gt;
unless ($kategorie eq &amp;#039;SCHUELER&amp;#039; or $kategorie eq &amp;#039;LEHRER&amp;#039; or &lt;br /&gt;
        $kategorie eq &amp;#039;KLASSEN&amp;#039;  or $kategorie eq &amp;#039;ALL&amp;#039;) {&lt;br /&gt;
  die &amp;quot;Abbruch: --kategorie muss SCHUELER, LEHRER, KLASSEN oder ALL sein!\n&amp;quot;;        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir holen uns die Such-Basis ($ldap_base) aus der ldap.conf&lt;br /&gt;
open DATEI, &amp;#039;&amp;lt;&amp;#039;, &amp;#039;/etc/ldap/ldap.conf&amp;#039; &lt;br /&gt;
  or die &amp;quot;Abbruch: konnte ldap.conf nicht oeffnen, $!\n&amp;quot;;&lt;br /&gt;
while (my $zeile = &amp;lt;DATEI&amp;gt;) {&lt;br /&gt;
  if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/i) {&lt;br /&gt;
    $ldap_base = $1;&lt;br /&gt;
    last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
close DATEI;&lt;br /&gt;
&lt;br /&gt;
# wir verbinden uns mit dem LDAP&lt;br /&gt;
$ldap = Net::LDAP-&amp;gt;new(&amp;#039;127.0.0.1&amp;#039;, version =&amp;gt; 3) or die &amp;quot;Abbruch: $@&amp;quot;;&lt;br /&gt;
$ldap-&amp;gt;bind or die &amp;quot;Abbruch: konnte mich nicht mit dem LDAP verbinden&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# wir holen uns das uid- und das GECOS-Feld&lt;br /&gt;
$mesg = $ldap-&amp;gt;search(base   =&amp;gt; &amp;quot;ou=people,ou=accounts,$ldap_base&amp;quot;,&lt;br /&gt;
                      filter =&amp;gt; $filter{$kategorie},&lt;br /&gt;
                      attrs  =&amp;gt; [&amp;#039;uid&amp;#039;, &amp;#039;gecos&amp;#039;] );&lt;br /&gt;
foreach my $entry ($mesg-&amp;gt;entries) {&lt;br /&gt;
  # Format der Listeneintraege: dmobby,Mobby Dick,abi2012&lt;br /&gt;
  push @user, $entry-&amp;gt;get_value(&amp;#039;uid&amp;#039;) . &amp;#039;,&amp;#039; . $entry-&amp;gt;get_value(&amp;#039;gecos&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir trennen uns vom LDAP&lt;br /&gt;
$ldap-&amp;gt;unbind;&lt;br /&gt;
&lt;br /&gt;
# wir &amp;quot;filtern&amp;quot; noch die Ergebnisse der LDAP-Suche entsprechend der Parameter&lt;br /&gt;
if ($kategorie eq &amp;#039;KLASSEN&amp;#039;) {&lt;br /&gt;
  # wir holen uns die Klasse und stecken die in einen Hash. Dadurch werden&lt;br /&gt;
  # automatisch Doubletten vernichtet. Dann erstellen wir eine Liste.&lt;br /&gt;
  foreach my $eintrag (@user) {&lt;br /&gt;
    ($login, $name, $klasse) = split /,/, $eintrag;&lt;br /&gt;
    $temp{$klasse} = 1;                     # die &amp;quot;1&amp;quot; ist nur ein Dummy&lt;br /&gt;
  }&lt;br /&gt;
  foreach my $key (sort keys %temp) {&lt;br /&gt;
    push @liste, $key;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
elsif ($kategorie eq &amp;#039;SCHUELER&amp;#039; and $class ne &amp;#039;&amp;#039;) {&lt;br /&gt;
  foreach my $eintrag (@user) {&lt;br /&gt;
    ($login, $name, $klasse) = split /,/, $eintrag;&lt;br /&gt;
    if ($klasse eq $class) {&lt;br /&gt;
      push @liste, $login . &amp;#039;,&amp;#039; . $name;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
elsif ($kategorie eq &amp;#039;LEHRER&amp;#039;) {&lt;br /&gt;
  foreach my $eintrag (@user) {&lt;br /&gt;
    ($login, $name, $klasse) = split /,/, $eintrag;&lt;br /&gt;
    push @liste, $login . &amp;#039;,&amp;#039; . $name;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
  @liste = @user;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir sortieren noch&lt;br /&gt;
@liste = sort @liste;&lt;br /&gt;
&lt;br /&gt;
# wir geben die Liste aus&lt;br /&gt;
if (scalar @liste &amp;gt; 0) {&lt;br /&gt;
  foreach my $element (@liste) {&lt;br /&gt;
    print $element, &amp;quot;\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
  print &amp;quot;Warnung: keinen entsprechenden User gefunden!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
################### Programm-Ende #####################################&lt;br /&gt;
&lt;br /&gt;
# Wenn Parameter -h uebergeben wurde, dann Hilfe ausgegeben und beenden&lt;br /&gt;
sub help&lt;br /&gt;
{&lt;br /&gt;
   print &amp;quot;Hilfe muss noch erstellt werden.\n&amp;quot;;&lt;br /&gt;
   exit (0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
__END__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kirmse</name></author>
	</entry>
</feed>