Inhaltsverzeichnis
- AD: Abfrage aller Gruppenmitgliedschaften einer Kennung
- Excel: Die Werte der UNIX Epochzeit in ein lesbares Datum umrechnen
- PHP: Den integrierten Webserver im PHP benutzen
- Emacs Konfigurationsoptionen in Dateien auslagern
- Emacs: Nützliche Shortkeys für den Emacs Editor
- LDAP: Aus einem Novell eDir alle Gruppen mit Mitgliedern auslesen
- Windows: Die Windows Session per Verknüpfung sperren
- Perl: Für Perl „exotische“ Datumsformate bauen
- Perl: Zeichen in Dateien ersetzen
- Perl: Module per CPAN Installer installieren
- Perl: Per FTP ein File hochladen
- Perl: ppm mit AS Perl unter Windows
- Perl: HEX Werten kann man so wieder zurückrechnen
- Shell: Epochumrechnung in menschlich lesbare Zeit
- Novell Loginscript: Mit Werten aus der Windows Registry arbeiten
- Perl: Ausgabe in Klein- und Grossbuchstaben
- Perl: Mit dem Modul diagnostics einfacher entwickeln
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_pmtF:\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_pmtF:\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_pmtF:\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_pmtF:\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_pmtF:\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_pmtF:\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_pmtF:\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_pmtF:\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)