Wissensdatenbank – Programmieren

Inhaltsverzeichnis


AD: Abfrage aller Gruppenmitgliedschaften einer Kennung

06.2023

Powershell-Abfrage aller Gruppenmitgliedschaften ohne MMC oder Powershell AD Commandlets

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$("ute.musterfrau")))")).Findone().GetDirectoryEntry().memberof

liefert alle CNs aller Gruppen der Kennung ute.musterfrau als Liste:

CN=GG_RO_TH_10-0120,OU=Groups,OU=IT,DC=ourcompany,DC=de
CN=GG_RO_HJ_13-0120,OU=Groups,OU=IT,DC=ourcompany,DC=de
CN=GG_RW_RE_14-0120,OU=Groups,OU=IT,DC=ourcompany,DC=de
CN=IT-Security,OU=Verteilergruppe,DC=ourcompany,DC=de
CN=Client-Information,OU=Verteilergruppe,DC=ourcompany,DC=de


Excel: Die Werte der UNIX Epochzeit in ein lesbares Datum umrechnen

07.2017

Gegeben ist eine Epoch Zeitangabe, beispielsweise von der Ausgabe

# date +'%s'
1490483912

Die Beispielzeit 1490483912 (in Zelle A1) wird nun mit einer Excel Formel in ein Datum umgewandelt

=DATUM(1970;1;1+LINKS(A1;10)/86400)

Die Formel liefert dann das Datum 25.03.2017 zurück


PHP: Den integrierten Webserver im PHP benutzen

08.2016

Immer wenn man mal gerade einen Webserver braucht, hat man natürlich keinen zur Hand. Nach Murphy soweit klar…
Wenn auf der Maschine ein PHP installiert ist, kann man mit PHP einen einfachen Webserver starten und sehr schnell HTTP Dinge testen.
Der Webserver kann auf localhost oder die externe Adresse gebunden werden. Im folgenden Beispiel ist der Webserver extern erreichbar.

$ ifconfig | grep inet
inet 192.168.0.10 netmask 0xffffffff broadcast 192.168.0.10


$ php -S 192.168.0.10:8082
PHP 5.6.20 Development Server started at Fri Aug 5 13:35:46 2016
Listening on http://192.168.0.10:8082
Document root is /var/tmp
Press Ctrl-C to quit.

Der Server macht erst einmal keine Directory Index Seiten, etc. Man muss mit den Inhalt mit genauen URL aufrufen.
Im Terminal werden dann die entsprechende Zugriffe geloggt.

[Fri Aug 5 19:35:55 2016] 192.168.0.10:19984 [200]: /test.txt
[Fri Aug 5 19:38:02 2016] 192.168.0.33:43717 [200]: /test.html


Emacs Konfigurationsoptionen in Dateien auslagern

Man kann dem Emacs Editor in den zu editierenden Dateien Konfigurationsoptionen mitgeben. Diese werden dann vom Editor
für den Buffer benutzt.
Sinnvoll ist das z.B. wenn man bestimmte Konfigurationen nicht Systemweit vergeben will sondern eben nur für bestimmte
Dateien.
Man sollte die Optionen in der jeweiligen Kommentarsyntax schreiben. Z.B. Perl und Shell mit # am Zeilenanfang. PHP mit // am Zeilenanfang usw.
In der Datei wird dann beispielsweise sowas reingeschrieben:

// For emacs users
// Local Variables:
// mode: html
// tab-width: 8
// End:
      

Das Beispiel würde den HTML Mode laden und die Tabulatorweite auf 8 Zeichen setzen. Jetzt muß man nur noch die Lieblingskonfiguration hier einbauen und einer entspannten Editorsession steht nichts mehr im Wege.
Ein ähnliches System gibt es auch für den vi Editor (bzw. den vim).


Emacs: Nützliche Shortkeys für den Emacs Editor

…die man ohne Aufschreiben leider immer wieder vergisst. Ich jedenfalls. 🙂
C-x o Wechselt in einen anderen Buffer
C-x C-l Wandelt markierten Bereich in Kleinbuchstaben
C-x C-u Wandelt markierten Bereich in Großbuchstaben
C-x f Spalte fuer Umbruch auf Cursorposition
C-x TAB Einruecken des markierten Bereichs
M-i Füllt mit Leerzeichen/Tabs zur nächsten Tab-Position


LDAP: Aus einem Novell eDir alle Gruppen mit Mitgliedern auslesen

Um aus einem Novell eDir per LDAP alle Gruppen und ihre entsprechenden Mitglieder auszulesen kann man diesem LDAP Ausdruck bzw. Aufruf benutzen:

ldapsearch -b o=Firma -s sub -h ldap.firma.de -D
      cn=admin1,o=adm -w geheim -x '(objectclass=groupofnames)'
      uniqueMember

Windows: Die Windows Session per Verknüpfung sperren

Wenn man den folgenden Code als Verknüpfung im Windows System anlegt kann man durch ausführen der Verknüpfung das
Windows System sperren.

%windir%\System32\rundll32.exe user32.dll,LockWorkStation


Perl: Für Perl „exotische“ Datumsformate bauen

Um ein Datum in der Form 07.04.2004 zu erhalten.

sub get_date {
  my ($day, $mon, $year) = (localtime)[3,4,5];
  $mon++;
  $year+= 1900;
  print sprintf("%02d.%02d.%4d", $day, $mon, $year);
}
      

Perl: Zeichen in Dateien ersetzen

Um bestimmte Zeichen in Dateien zu ersetzen kann so vorgegangen werden:

perl -p -e "undef $/; s/\n //mg" <foo >bar
      

Beispiel hier: Alle Zeilenschaltungen mit folgendem Blank herausnehmen.
Besonderheit hier: $/ wird auf undef gesetzt um s auf Ausdrücke über mehrere Zeilen anzuwenden.


Perl: Module per CPAN Installer installieren

Um Perl Module nachzuinstallieren kann man das Modul CPAN per Perl Einzeiler laden:

perl -MCPAN -e shell
      

Danach kann man Module installieren z.B.

install Unix::Syslog
      

Beim ersten Aufrufen muß man ein paar Fragen beantworten und eventuell benötigte Programme nachinstallieren.
Wenn eine neue Version verfügbar gemacht wird kann man den Client mit

install Bundle::CPAN
      

aktualisieren.


Perl: Per FTP ein File hochladen

Es wird das CPAN Modul Net::FTP genutzt.

perl -MNet::FTP -Mstrict -w -e '
my $ftp;
my $ftphost   = "www.kleinboelting.de";
my $ftpuser   = "mkleinboelting";
my $ftppass   = "ultrageheim09";
my $localfile = "/home/mario/index.shtml";

$ftp = Net::FTP->new($ftphost)  or die "Cant connect: $@\n";
$ftp->login($ftpuser, $ftppass) or die "Couldnt login\n";
$ftp->put($localfile)           or die "Couldnt put $localfile\n"; '
      

Perl: ppm mit AS Perl unter Windows

Um per PPM Perl Modules unter Windows nachzuinstallieren muß PPM wie folgt aus der CMD-Box heraus benutzt werden (Proxy ist nur eventuell notwendig. Wenn Proxyverbindung notwendig ist ist die Variable aber casesensitive):

C:\>set HTTP_proxy=http://proxy.foobar.org:8080

C:\>ppm
PPM - Programmer's Package Manager version 3.1.
Copyright (c) 2001 ActiveState SRL. All Rights Reserved.

Entering interactive shell. Using Term::ReadLine::Stub as readline library.

Type 'help' to get started.

ppm> upgrade
Data-Dump 0.04: up to date.
libwin32 0.20: up to date.

ppm> install MIME::Lite
Searching for 'MIME::Lite' returned multiple results. Using 'search' instead...
Searching in Active Repositories
  1. MIME-Lite      [3.01] low-calorie MIME generator
  2. MIME-Lite-HTML [1.21] Provide routine to transform a HTML page in a MIME-Lite mail

ppm> install MIME-Lite
====================
Install 'MIME-Lite' version 3.01 in ActivePerl 5.8.0.806.
====================
Downloaded 57712 bytes.
Extracting 7/7: blib/arch/auto/MIME/Lite/.exists
Installing C:\perl\html\site\lib\MIME\changes.html
Installing C:\perl\html\site\lib\MIME\Lite.html
Installing C:\perl\site\lib\MIME\changes.pod
Installing C:\perl\site\lib\MIME\Lite.pm
Successfully installed MIME-Lite version 3.01 in ActivePerl 5.8.0.806.

ppm> search ldap
Searching in Active Repositories
  1. Apache-AuthLDAP    [0.21] mod_perl LDAP Access Control and Authentication Module
  2. Apache-AuthLDAP    [0.21] mod_perl LDAP Access Control and Authentication Module
  3. Apache-AuthPerLDAP  [0.5] mod_perl PerLDAP Authentication Module
  4. Apache-AuthPerLDAP  [0.5] mod_perl PerLDAP Authentication Module
  5. Apache-AuthzLDAP   [0.61] mod_perl LDAP Authorization Module
  6. Apache-TransLDAP   [0.20] An Apache+mod_perl Trans Handler
  7. Apache-TransLDAP   [0.20] An Apache+mod_perl Trans Handler
  8. perl-ldap          [0.28] perl-ldap is a library of modules implementing an LDAP cl~
  9. perl-ldap          [0.28] (none)

ppm> install perl-ldap
====================
Install 'Authen-SASL' version 2.08 in ActivePerl 5.8.0.806.
====================  
Downloaded 6650 bytes.
Extracting 16/16: blib/arch/auto/Authen/SASL/.exists
Installing C:\perl\html\site\lib\Authen\SASL.html
Installing C:\perl\html\site\lib\Authen\SASL\Perl\DIGEST_MD5.html
[...]
Installing C:\perl\site\lib\Authen\SASL\Perl\PLAIN.pm
Successfully installed Authen-SASL version 2.08 in ActivePerl 5.8.0.806.
====================
Install 'Convert-ASN1' version 0.18 in ActivePerl 5.8.0.806.
====================
Downloaded 26326 bytes.
Extracting 11/11: blib/arch/auto/Convert/ASN1/.exists
Installing C:\perl\html\site\lib\Convert\ASN1.html
Successfully installed Convert-ASN1 version 0.18 in ActivePerl 5.8.0.806.
====================
Install 'XML-SAX-Base' version 1.02 in ActivePerl 5.8.0.806.
====================
Downloaded 11042 bytes.
Extracting 7/7: blib/arch/auto/XML/SAX/Base/.exists
Installing C:\perl\html\site\lib\XML\SAX\Base.html
Installing C:\perl\html\site\lib\XML\SAX\Exception.html
Installing C:\perl\site\lib\XML\SAX\Base.pm
Installing C:\perl\site\lib\XML\SAX\Exception.pm
Successfully installed XML-SAX-Base version 1.02 in ActivePerl 5.8.0.806.
====================
Install 'perl-ldap' version 0.28 in ActivePerl 5.8.0.806.
====================
Downloaded 177459 bytes.
Extracting 69/69: blib/arch/auto/perl-ldap/.exists
Installing C:\perl\html\site\lib\Net\LDAP.html
Installing C:\perl\html\site\lib\Net\LDAPI.html
Installing C:\perl\html\site\lib\Net\LDAPS.html
Installing C:\perl\html\site\lib\Net\LDAP\Constant.html
[...]
Installing C:\perl\site\lib\Net\LDAP\Control\sort.pm
Installing C:\perl\site\lib\Net\LDAP\Control\VLV.pm
Successfully installed perl-ldap version 0.28 in ActivePerl 5.8.0.806.
ppm>

Perl: HEX Werten kann man so wieder zurückrechnen

HEX Werten (z.B. bei CGI Parameter Übergabe in der URL) kann man so wieder zurückrechnen

$decodedurl =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($url))/eg;
      

Shell: Epochumrechnung in menschlich lesbare Zeit

date -d '1970-01-01 1114078702 sec' +"%Y-%m-%d %T %z"
      

In diesem Beispiel ist 1114078702 die umzurechnende Epoch Zeit. Das Kommando date liefert dann
2005-04-21 11:18:22 +0200

Wenn das Zeitformat anders sein soll kann man hinter dem + von date noch an der Ausgabe tunen.


Novell Loginscript: Mit Werten aus der Windows Registry arbeiten

REGREAD "HKLM,SYSTEM\CurrentControlSet\Services\Dhcp\Parameters\Options,RegLocation"
SET DHCPReg="%99"
SET DHCP85Loc = "%DHCPReg" >>7
REGREAD "HKLM,%,Server"
SET PrefServ="%99"
WRITE "Die IP-Adresse Ihres NDS-Server ist: %"
IF "%" = "10.10.30.60" OR "%" = "10.10.20.60" OR "%" = "10.10.40.60" THEN
MAP ROOT S:=ZSWDSRV\SWD:SWINSTSRC
ELSE
MAP ROOT S:=%\SWD:SWINSTSRC
END

In diesem Beispiel wird aus einem Windows Registry Key der Wert ausgelesen und für ein spezifisches Mapping benutzt.


Perl: Ausgabe in Klein- und Grossbuchstaben

August 2007

Um in Perl die Ausgabe in Gross oder Klein zu erzwingen:

echo RrRr | perl -ne 'print uc($_); print lc($_);'

RRRR

rrrr


Perl: Mit dem Modul diagnostics einfacher entwickeln

August 2007

Das Modul Diagnostics hilft beim Entwickeln von Perl Scripts, indem ausführliche Meldungen bei Codingfehlern rausgeschrieben werden.

Einbinden im Code mit use diagnostics;
Hier ein Beispiel ohne das Modul:

F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 394.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 461.
	
.2>afpd_pmt_0.22.pl Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 394.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 461.
	
.2\afpd_pmt_0.22.pl line 394. Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 394.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 461.
	
.2\afpd_pmt_0.22.pl line 425. Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 394.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 461.
	
.2\afpd_pmt_0.22.pl line 443. Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 394.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443.
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 461.
	
.2\afpd_pmt_0.22.pl line 461.



Hier ein Beispiel mit dem Modul diagnostics:

F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at line 394 (#1)
    (W closure) An inner (nested) named subroutine is referencing a
    lexical variable defined in an outer subroutine.

    When the inner subroutine is called, it will probably see the value of
    the outer subroutine's variable as it was before and during the *first*
    call to the outer subroutine; in this case, after the first call to the
    outer subroutine is complete, the inner and outer subroutines will no
    longer share a common value for the variable.  In other words, the
    variable will no longer be shared.

    Furthermore, if the outer subroutine is anonymous and references a
    lexical variable outside itself, then the outer and inner subroutines
    will never share the given variable.

    This problem can usually be solved by making the inner subroutine
    anonymous, using the sub {} syntax.  When inner anonymous subs that
    reference variables in outer subroutines are called or referenced, they
    are automatically rebound to the current values of such variables.

Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425 (#1)
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443 (#1)
	
.2>afpd_pmt_0.22.pl Variable "$top" will not stay shared at line 394 (#1) (W closure) An inner (nested) named subroutine is referencing a lexical variable defined in an outer subroutine. When the inner subroutine is called, it will probably see the value of the outer subroutine's variable as it was before and during the *first* call to the outer subroutine; in this case, after the first call to the outer subroutine is complete, the inner and outer subroutines will no longer share a common value for the variable. In other words, the variable will no longer be shared. Furthermore, if the outer subroutine is anonymous and references a lexical variable outside itself, then the outer and inner subroutines will never share the given variable. This problem can usually be solved by making the inner subroutine anonymous, using the sub {} syntax. When inner anonymous subs that reference variables in outer subroutines are called or referenced, they are automatically rebound to the current values of such variables. Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at line 394 (#1)
    (W closure) An inner (nested) named subroutine is referencing a
    lexical variable defined in an outer subroutine.

    When the inner subroutine is called, it will probably see the value of
    the outer subroutine's variable as it was before and during the *first*
    call to the outer subroutine; in this case, after the first call to the
    outer subroutine is complete, the inner and outer subroutines will no
    longer share a common value for the variable.  In other words, the
    variable will no longer be shared.

    Furthermore, if the outer subroutine is anonymous and references a
    lexical variable outside itself, then the outer and inner subroutines
    will never share the given variable.

    This problem can usually be solved by making the inner subroutine
    anonymous, using the sub {} syntax.  When inner anonymous subs that
    reference variables in outer subroutines are called or referenced, they
    are automatically rebound to the current values of such variables.

Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425 (#1)
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443 (#1)
	
.2\afpd_pmt_0.22.pl line 425 (#1) Variable "$top" will not stay shared at F:\coding\afpd_pmt
F:\coding\afpd_pmt\0.2>afpd_pmt_0.22.pl
Variable "$top" will not stay shared at line 394 (#1)
    (W closure) An inner (nested) named subroutine is referencing a
    lexical variable defined in an outer subroutine.

    When the inner subroutine is called, it will probably see the value of
    the outer subroutine's variable as it was before and during the *first*
    call to the outer subroutine; in this case, after the first call to the
    outer subroutine is complete, the inner and outer subroutines will no
    longer share a common value for the variable.  In other words, the
    variable will no longer be shared.

    Furthermore, if the outer subroutine is anonymous and references a
    lexical variable outside itself, then the outer and inner subroutines
    will never share the given variable.

    This problem can usually be solved by making the inner subroutine
    anonymous, using the sub {} syntax.  When inner anonymous subs that
    reference variables in outer subroutines are called or referenced, they
    are automatically rebound to the current values of such variables.

Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 425 (#1)
Variable "$top" will not stay shared at
F:\coding\afpd_pmt\0.2\afpd_pmt_0.22.pl line 443 (#1)
	
.2\afpd_pmt_0.22.pl line 443 (#1)