mysql master slave installieren
auf dem mysql master server muss ein User angelegt werden der folgende Rechte haben muss
mysql> GRANT REPLICATION SLAVE ON artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html TO slave@'%.ihredomain.de' IDENTIFIED BY 'ihrPasswort';
Ein Standardmysqlserver ist kein Master Server,folgendes muss in der my.cnf angepasst/hinzugefźgt
werden
[mysqld]
log-bin
server-id=1
log-bin aktiviert das binŠre loging.
server id ist eine binŠr enummer, egal welche eingetragn wird, sollte nur nicht negativ sein
nachdem die my.cnf angepasst wurde, muss der mysql server neu gestartet werden.
anschliessen
FLUSH TABLES WITH READ LOCK;
mysql verzeichniss in tar packen und auf slave kopieren dort wieder entpacken
aktuelle Postion des binary logs wird benštigt, debnn nur mit der Info kann man den Slave
aufsetzen
mit SHOW MASTER STATUS; kann man sich ausgeben lassen wo die bin log postion steht
anschliessend
mysql> unlock tables;
um die tabellen
auf dem slave die my.cnf anpassen
[mysqld]
server-id=2
wenn es mehrere slaves geben sollte dźrfen die server-id nicht doppelt verwendet werden
mysql slave server neustarten
dan folgendes eintragen
mysql> CHANGE MASTER TO
spacer_1px
2
-> MASTER_HOST='NameDesMasters',
spacer_1px
3
-> MASTER_USER='slave',
spacer_1px
4
-> MASTER_PASSWORD='ihrPasswort',
spacer_1px
5
-> MASTER_LOG_FILE='LogFile',
spacer_1px
6
-> MASTER_LOG_POS='offset';
NameDesMasters steht fuer den Namen des Masters, slave fuer den Namen des Accounts
fuer die Replikation und ihrPasswort ist das dazugehoerige Passwort. ueber LogFile
teilen Sie dem Slave den Namen des Binary-Logs des Masters aus dem Snapshot mit -
im Beispiel also database-bin.045 - und ueber offset die Position im Binary-Log,
im Beispiel 14468606.
als letztes ud das muss nur einmal gemacht werden muss der slave betrieb gestartet werden
mysql> START SLAVE;
zusammengefasst von der Seite http://www.tecchannel.de/server/sql/429801/index10.html
oder
mysql master slave zur replikation installieren
1) Server anpassen
a)
auf dem mysql master server muss ein User angelegt werden. der benutzer-account dient später
zur replizierung der daten. foldende rechte sind nötig.
mysql> GRANT REPLICATION SLAVE ON artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html TO slave@'%.ihredomain.de' IDENTIFIED BY 'ihrPasswort';
Beispiel:
mysql> grant replication slave on artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html to slave@'172.23.23.61' identified by 'root';
b)
Ein Standardmysqlserver ist kein Master Server,folgendes muss in der my.cnf angepasst/hinzugefźgt
werden
[mysqld]
log-bi
server-id=1
net stop dienstname
net start dienstname
Bsp: net stop mysql5
c)
Status anzeigen lassen um den filenamen und offset der bin datei für die datenspeicherung zu ermitteln.
show master status (nach neustart)
file: danielr-bin.000001 position: 98 -> daten werden bei der slave-konfiguration benötigt
2) anpassungen auf slave
a)
auf dem slave die my.cnf anpassen eindeutige id vergeben
[mysqld]
server-id=2
b)
mysql slave server neustarten
c)
slave mit benötigten daten des masters versorgen
mysql> CHANGE MASTER TO
-> MASTER_HOST='NameDesMasters',
-> MASTER_PORT= PORT,
-> MASTER_USER='USERNAME',
-> MASTER_PASSWORD='ihrPasswort',
-> MASTER_LOG_FILE='LogFile',
-> MASTER_LOG_POS='offset';
Bsp:
CHANGE MASTER TO
MASTER_HOST='172.23.23.135',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='danielr-bin.000005',
MASTER_LOG_POS=98;
anschließend muss der slave gestartet werden
mysql> START SLAVE;
mit show slave status können die werte geprüft werden.
Dazugehoerende Dateien
artikel.txt
auf dem mysql master server muss ein User angelegt werden der folgende Rechte haben muss
mysql> GRANT REPLICATION SLAVE ON artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html TO slave@'%.ihredomain.de' IDENTIFIED BY 'ihrPasswort';
Ein Standardmysqlserver ist kein Master Server,folgendes muss in der my.cnf angepasst/hinzugefźgt
werden
[mysqld]
log-bin
server-id=1
log-bin aktiviert das binŠre loging.
server id ist eine binŠr enummer, egal welche eingetragn wird, sollte nur nicht negativ sein
nachdem die my.cnf angepasst wurde, muss der mysql server neu gestartet werden.
anschliessen
FLUSH TABLES WITH READ LOCK;
mysql verzeichniss in tar packen und auf slave kopieren dort wieder entpacken
aktuelle Postion des binary logs wird benštigt, debnn nur mit der Info kann man den Slave
aufsetzen
mit SHOW MASTER STATUS; kann man sich ausgeben lassen wo die bin log postion steht
anschliessend
mysql> unlock tables;
um die tabellen
auf dem slave die my.cnf anpassen
[mysqld]
server-id=2
wenn es mehrere slaves geben sollte dźrfen die server-id nicht doppelt verwendet werden
mysql slave server neustarten
dan folgendes eintragen
mysql> CHANGE MASTER TO
spacer_1px
2
-> MASTER_HOST='NameDesMasters',
spacer_1px
3
-> MASTER_USER='slave',
spacer_1px
4
-> MASTER_PASSWORD='ihrPasswort',
spacer_1px
5
-> MASTER_LOG_FILE='LogFile',
spacer_1px
6
-> MASTER_LOG_POS='offset';
NameDesMasters steht fuer den Namen des Masters, slave fuer den Namen des Accounts
fuer die Replikation und ihrPasswort ist das dazugehoerige Passwort. ueber LogFile
teilen Sie dem Slave den Namen des Binary-Logs des Masters aus dem Snapshot mit -
im Beispiel also database-bin.045 - und ueber offset die Position im Binary-Log,
im Beispiel 14468606.
als letztes ud das muss nur einmal gemacht werden muss der slave betrieb gestartet werden
mysql> START SLAVE;
zusammengefasst von der Seite http://www.tecchannel.de/server/sql/429801/index10.html
oder
mysql master slave zur replikation installieren
1) Server anpassen
a)
auf dem mysql master server muss ein User angelegt werden. der benutzer-account dient später
zur replizierung der daten. foldende rechte sind nötig.
mysql> GRANT REPLICATION SLAVE ON artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html TO slave@'%.ihredomain.de' IDENTIFIED BY 'ihrPasswort';
Beispiel:
mysql> grant replication slave on artikeltmp.txt bak.html bastel.sh menuetmp.txt test.html wissen.html to slave@'172.23.23.61' identified by 'root';
b)
Ein Standardmysqlserver ist kein Master Server,folgendes muss in der my.cnf angepasst/hinzugefźgt
werden
[mysqld]
log-bi
server-id=1
net stop dienstname
net start dienstname
Bsp: net stop mysql5
c)
Status anzeigen lassen um den filenamen und offset der bin datei für die datenspeicherung zu ermitteln.
show master status (nach neustart)
file: danielr-bin.000001 position: 98 -> daten werden bei der slave-konfiguration benötigt
2) anpassungen auf slave
a)
auf dem slave die my.cnf anpassen eindeutige id vergeben
[mysqld]
server-id=2
b)
mysql slave server neustarten
c)
slave mit benötigten daten des masters versorgen
mysql> CHANGE MASTER TO
-> MASTER_HOST='NameDesMasters',
-> MASTER_PORT= PORT,
-> MASTER_USER='USERNAME',
-> MASTER_PASSWORD='ihrPasswort',
-> MASTER_LOG_FILE='LogFile',
-> MASTER_LOG_POS='offset';
Bsp:
CHANGE MASTER TO
MASTER_HOST='172.23.23.135',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='danielr-bin.000005',
MASTER_LOG_POS=98;
anschließend muss der slave gestartet werden
mysql> START SLAVE;
mit show slave status können die werte geprüft werden.
Dazugehoerende Dateien
artikel.txt
Query partially completed on the master (error on master: 1317) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; . Query: 'UPDATE bestellposition_new
Show slave status
Dazugehoerende Dateien
artikel.txt
Show slave status
Dazugehoerende Dateien
artikel.txt
in hlkomm-liferay-portal-5.2.2/tomcat-5.5.27/webapps/ROOT/WEB-INF/classes/portal-ext.properties
folgendes eintragen
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/datenbankname?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=
jdbc.default.password=
wenn die Datei nicht vorhanden ist erstellen!!!
in der catalina.sh
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
JAVA_OPTS="-Djava.awt.headless=true -Xmx512M -server -Dfile.encoding=UTF-8"
CATALINA_HOME=/opt/hlkomm-liferay-portal-5.2.2/tomcat-5.5.27/
CATALINA_PID="$CATALINA_HOME/logs/tomcat.pid"
Dazugehoerende Dateien
artikel.txt
folgendes eintragen
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/datenbankname?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=
jdbc.default.password=
wenn die Datei nicht vorhanden ist erstellen!!!
in der catalina.sh
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
JAVA_OPTS="-Djava.awt.headless=true -Xmx512M -server -Dfile.encoding=UTF-8"
CATALINA_HOME=/opt/hlkomm-liferay-portal-5.2.2/tomcat-5.5.27/
CATALINA_PID="$CATALINA_HOME/logs/tomcat.pid"
Dazugehoerende Dateien
artikel.txt
3.1 LVM-System starten
Um die LVM-Funktion des Kernels nutzen zu koennen, ist es notwendig, das Modul lvm-mod zu laden. Dies geschieht mit folgendem Befehl:
modprobe lvm-mod
Die LVM-Kommandos setzen die Datei /etc/lvmtab und das Verzeichnis /etc/lvmtab.d voraus, die man vorher mit dem Befehl vgscan erstellen kann. Die beiden Dateien beinhalten Informationen ueber die vorhandene LVM-Konfiguration. Mit dem Befehl vgchange werden eventuelle Volume Groups aktiviert. Bei vielen Distributionen werden die beiden folgenden Befehle waehrend des Systemstarts ausgefuehrt und sind damit nicht unbedingt notwendig. Sehen Sie dazu auch den Abschnitt LVM beim Booten und Shutdown.
vgscan -v
vgchange -a y
3.2 LVM-System einrichten
Physical Volume einrichten
Das LVM-System basiert auf drei Stufen: dem Physical Volume, der Volume Group und dem Logical Volume. Genauere Beschreibungen dieser und anderer Begriffe werden im Abschnitt Fachbegriffe erlaeutert.
Als erstes muessen Sie eine bestehende Partition mit der Partitions-ID »8e« fuer LVM kennzeichnen. Dazu fuehren Sie als Benutzer root cfdisk gefolgt mit der Angabe der betreffenden Festplatte aus. cfdisk ist eine komfortablere Variante von fdisk.
cfdisk /dev/hdb
Danach waehlt man mit den Cursortasten vertikal die gewuenschte Partition, wie zum Beispiel /dev/hdb5, und danach horizontal die Option »Type« um die Partitions-ID »8e« festzulegen. Mit der Option »Write« werden die Änderungen in der Partitionstabelle eingetragen.
Danach kann auf dieser Partition ein Physical Volume einrichtet werden. Die LVM-Kommandos setzen die Dateien /etc/lvmtab und /etc/lvmtab.d voraus, die man gegebenenfalls mit dem Befehl
vgscan -v
erstellen kann. Mit dem Befehl
pvcreate /dev/hdb5
kann dann das Physical Volume erstellt werden. Theoretisch waere eine Volume Group auch mit nur einem Physical Volume moeglich, hier erstellen wir jedoch noch eine zweite, die wir spaeter in der Volume Group zusammenfuegen.
pvcreate /dev/hdb6
Voraussetzung ist natuerlich wieder, dass diese Partition die ID »8e« hat.
Volume Group einrichten
Die Volume Group stellt eine Art Speicherpool dar, aus der man eine oder mehrere Logical Volumes, also virtuelle Partitionen, erstellen kann. Zusaetzlich zum Kommando vgcreate und den Physical Volumes muss der gewuenschte Name, hier volg1, der Volume Group angegeben werden:
vgcreate volg1 /dev/hdb5 /dev/hdb6
Danach befindet sich im Verzeichnis /dev das neue Unterverzeichnis volg1 fuer die betreffende Volume Group.
Logical Volume einrichten
Nun kann man mit der gesamten Volume Group volg1, oder auch nur mit einem Teil davon ein Logical Volume erstellen. Zum Kommando lvcreate muss man die gewuenschte Groesse, den Namen von dem Logical Volume und die Volume Group angeben. Hier wird der Name logv1 und die Groesse 1000 MByte verwendet:
lvcreate -n logv1 -L 1000M volg1
oder fuer den gesamten freien Festplattenplatz
lvcreate -n logv1 -l +100%FREE volg1
Damit wird die neue Device-Datei /dev/volg1/logv1 erstellt, ueber die man auf die virtuelle Partition zugreifen kann. Genau nach dem gleichen Verfahren wie etwa auf die gewoehnliche Partition /dev/hda1.
Um auf dieser Partition auch Daten abspeichern zu koennen, ist auch hier ein Dateisystem wie ext2 oder reiserfs erforderlich.
mkfs -t ext2 /dev/volg1/logv1
Das Dateisystem wird dann ueber ein Verzeichnis in den Verzeichnisbaum eingehaengt.
mkdir /lvm-test
mount -t ext2 /dev/volg1/logv1 /lvm-test
Nun koennen Sie im neu erstellten Verzeichnis /lvm-test Daten abspeichern. Bei Bedarf koennen sie mit umount die Partition auch wieder aus dem Verzeichnisbaum aushaengen.
umount /lvm-test
3.3 LVM-System vergroessern und verkleinern
Logical Volume vergroessern und verkleinern
Wie schon gesagt laesst sich mit LVM eine Partition nachtraeglich vergroessern und auch verkleinern. Moechte man das zuvor angelegte Logical Volume mit der Groesse von 1000 MByte vergroessern, kann man dies mit lvextend erledigen. Dazu gibt man einfach die neue Groesse mit der Option -L direkt an. Alternativ koennte man auch mit -L+300M die neue Groesse relativ zur bestehenden Groesse angeben. Aufgrund der Groesse von 4 MByte der Physical Extents, koennen die tatsaechlisch erzeugten Groessen der Logical Volumes etwas abweichen, da die erzeugten Logical Volumes damit immer nur ein Vielfaches von 4 MByte gross sein koennen. Um diese Abweichung zu umgehen, koennen Sie beim Anlegen einer Volume Group die Groesse der Physical Extents explizit kleiner angeben. Sehen Sie dazu auch den Abschnitt Volume Group mit spezieller PE-Groesse.
lvextend -L 1300M /dev/volg1/logv1
Jetzt wurde erst die virtuelle Partition, also das Logical Volume vergroessert. Zusaetzlich muss man nun auch das darin enthaltene Dateisystem vergroessern. Zuvor muss es allerdings mit umount aus dem Verzeichnisbaum entfernt und noch mit e2fsck auf Fehler ueberprueft werden:
umount /lvm-test
e2fsck -f /dev/volg1/logv1
resize2fs /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Umgekehrt koennen Sie mit resize2fs das Dateisystem auch verkleinern, indem Sie die neue Groesse in Bloecken (per Default 1024 Byte) angeben. Im Beispiel wird das Logical Volume auf 500 MByte verkleinert. Beachten Sie unbedingt, dass Sie erst das Dateisystem und danach das Logical Volume mit lvreduce verkleinern. Wuerden Sie erst das Logical Volume mit lvreduce verkleinern, gehen die darin enthaltenen Daten verloren.
umount /lvm-test
e2fsck -f /dev/volg1/logv1
resize2fs /dev/volg1/logv1 512000
lvreduce -L-800M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Um komfortabler zu arbeiten, gibt es das Kommando e2fsadm, das alle vorher beschriebenen Schritte wie lvextend, lvreduce, e2fsck und resize2fs zusammen ausfuehrt. Wie der Name schon andeutet, funktioniert das Programm nur bei dem Dateisystem ext2. Falls das Programm nicht in Ihrer Distribution enthalten ist, koennen Sie es unter
http://e2fsprogs.sourceforge.net/
downloaden. Das folgende Kommando vergroessert zum Beispiel das Logical Volume auf 800 MByte. Zuvor muss es allerdings wieder mit umount ausgehaengt werden:
umount /lvm-test
e2fsadm -L 800M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Bei der Verkleinerung verfaehrt man in gleicher Weise:
umount /lvm-test
e2fsadm -L 500M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Volume Group vergroessern und verkleinern
Da auch der Speicherplatz der Volume Group irgendwann belegt ist und man damit kein Logical Volume mehr anlegen oder vergroessern kann, ist es moeglich, auch eine Volume Group mit dem Befehl vgextend zu vergroessern. Man muss nur eine beliebige freie Partition wie in Abschnitt Physical Volume einrichten als Physical Volume einrichten und es der Volume Group zufuegen.
pvcreate /dev/hdb7
vgextend volg1 /dev/hdb7
Mit vgdisplay kann man sich dann die neue Groesse ansehen:
vgdisplay /dev/volg1
Moechte man eine Volume Group verkleinern, kann man mit dem Befehl
vgreduce -a volg1
alle freien Physical Volumes aus der Volume Group entfernen. Um ein bestimmtes Physical Volume zu entfernen, muss man dessen genauen Pfad angeben. Vorher kann man, falls erwuenscht, mit dem Befehl pvdisplay -v ueberpruefen, ob das betreffende Physical Volume Daten enthaelt oder nicht.
pvdisplay -v /dev/hdb7
vgreduce volg1 /dev/hdb7
Voraussetzung ist immer, dass auf dem betreffenden Physical Volume keine Daten enthalten sind. Mit dem Kommando pvmove kann man vorher gegebenenfalls die Daten auf ein anderes Physical Volume verschieben. Sehen Sie dazu auch den Abschnitt Daten von einem PV zum anderen PV verschieben.
3.4 LVM-System beenden
Um das LVM-System ordungsgemaess zu beenden, muessen Sie alle Logical Volumes mit umount aus dem Verzeichnisbaum aushaengen und danach vgchange ausfuehren:
umount /lvm-test
vgchange -a n
Am komfortabelsten ist es, die Befehle fuer das Starten und Beenden des LVM-Systems innerhalb des Init-V-Prozesses einzubinden, um nicht immer manuell nach dem Systemstart das LVM-System zu aktivieren. Sehen Sie dazu auch den Abschnitt LVM beim Booten und Shutdown.
Dazugehoerende Dateien
artikel.txt
Um die LVM-Funktion des Kernels nutzen zu koennen, ist es notwendig, das Modul lvm-mod zu laden. Dies geschieht mit folgendem Befehl:
modprobe lvm-mod
Die LVM-Kommandos setzen die Datei /etc/lvmtab und das Verzeichnis /etc/lvmtab.d voraus, die man vorher mit dem Befehl vgscan erstellen kann. Die beiden Dateien beinhalten Informationen ueber die vorhandene LVM-Konfiguration. Mit dem Befehl vgchange werden eventuelle Volume Groups aktiviert. Bei vielen Distributionen werden die beiden folgenden Befehle waehrend des Systemstarts ausgefuehrt und sind damit nicht unbedingt notwendig. Sehen Sie dazu auch den Abschnitt LVM beim Booten und Shutdown.
vgscan -v
vgchange -a y
3.2 LVM-System einrichten
Physical Volume einrichten
Das LVM-System basiert auf drei Stufen: dem Physical Volume, der Volume Group und dem Logical Volume. Genauere Beschreibungen dieser und anderer Begriffe werden im Abschnitt Fachbegriffe erlaeutert.
Als erstes muessen Sie eine bestehende Partition mit der Partitions-ID »8e« fuer LVM kennzeichnen. Dazu fuehren Sie als Benutzer root cfdisk gefolgt mit der Angabe der betreffenden Festplatte aus. cfdisk ist eine komfortablere Variante von fdisk.
cfdisk /dev/hdb
Danach waehlt man mit den Cursortasten vertikal die gewuenschte Partition, wie zum Beispiel /dev/hdb5, und danach horizontal die Option »Type« um die Partitions-ID »8e« festzulegen. Mit der Option »Write« werden die Änderungen in der Partitionstabelle eingetragen.
Danach kann auf dieser Partition ein Physical Volume einrichtet werden. Die LVM-Kommandos setzen die Dateien /etc/lvmtab und /etc/lvmtab.d voraus, die man gegebenenfalls mit dem Befehl
vgscan -v
erstellen kann. Mit dem Befehl
pvcreate /dev/hdb5
kann dann das Physical Volume erstellt werden. Theoretisch waere eine Volume Group auch mit nur einem Physical Volume moeglich, hier erstellen wir jedoch noch eine zweite, die wir spaeter in der Volume Group zusammenfuegen.
pvcreate /dev/hdb6
Voraussetzung ist natuerlich wieder, dass diese Partition die ID »8e« hat.
Volume Group einrichten
Die Volume Group stellt eine Art Speicherpool dar, aus der man eine oder mehrere Logical Volumes, also virtuelle Partitionen, erstellen kann. Zusaetzlich zum Kommando vgcreate und den Physical Volumes muss der gewuenschte Name, hier volg1, der Volume Group angegeben werden:
vgcreate volg1 /dev/hdb5 /dev/hdb6
Danach befindet sich im Verzeichnis /dev das neue Unterverzeichnis volg1 fuer die betreffende Volume Group.
Logical Volume einrichten
Nun kann man mit der gesamten Volume Group volg1, oder auch nur mit einem Teil davon ein Logical Volume erstellen. Zum Kommando lvcreate muss man die gewuenschte Groesse, den Namen von dem Logical Volume und die Volume Group angeben. Hier wird der Name logv1 und die Groesse 1000 MByte verwendet:
lvcreate -n logv1 -L 1000M volg1
oder fuer den gesamten freien Festplattenplatz
lvcreate -n logv1 -l +100%FREE volg1
Damit wird die neue Device-Datei /dev/volg1/logv1 erstellt, ueber die man auf die virtuelle Partition zugreifen kann. Genau nach dem gleichen Verfahren wie etwa auf die gewoehnliche Partition /dev/hda1.
Um auf dieser Partition auch Daten abspeichern zu koennen, ist auch hier ein Dateisystem wie ext2 oder reiserfs erforderlich.
mkfs -t ext2 /dev/volg1/logv1
Das Dateisystem wird dann ueber ein Verzeichnis in den Verzeichnisbaum eingehaengt.
mkdir /lvm-test
mount -t ext2 /dev/volg1/logv1 /lvm-test
Nun koennen Sie im neu erstellten Verzeichnis /lvm-test Daten abspeichern. Bei Bedarf koennen sie mit umount die Partition auch wieder aus dem Verzeichnisbaum aushaengen.
umount /lvm-test
3.3 LVM-System vergroessern und verkleinern
Logical Volume vergroessern und verkleinern
Wie schon gesagt laesst sich mit LVM eine Partition nachtraeglich vergroessern und auch verkleinern. Moechte man das zuvor angelegte Logical Volume mit der Groesse von 1000 MByte vergroessern, kann man dies mit lvextend erledigen. Dazu gibt man einfach die neue Groesse mit der Option -L direkt an. Alternativ koennte man auch mit -L+300M die neue Groesse relativ zur bestehenden Groesse angeben. Aufgrund der Groesse von 4 MByte der Physical Extents, koennen die tatsaechlisch erzeugten Groessen der Logical Volumes etwas abweichen, da die erzeugten Logical Volumes damit immer nur ein Vielfaches von 4 MByte gross sein koennen. Um diese Abweichung zu umgehen, koennen Sie beim Anlegen einer Volume Group die Groesse der Physical Extents explizit kleiner angeben. Sehen Sie dazu auch den Abschnitt Volume Group mit spezieller PE-Groesse.
lvextend -L 1300M /dev/volg1/logv1
Jetzt wurde erst die virtuelle Partition, also das Logical Volume vergroessert. Zusaetzlich muss man nun auch das darin enthaltene Dateisystem vergroessern. Zuvor muss es allerdings mit umount aus dem Verzeichnisbaum entfernt und noch mit e2fsck auf Fehler ueberprueft werden:
umount /lvm-test
e2fsck -f /dev/volg1/logv1
resize2fs /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Umgekehrt koennen Sie mit resize2fs das Dateisystem auch verkleinern, indem Sie die neue Groesse in Bloecken (per Default 1024 Byte) angeben. Im Beispiel wird das Logical Volume auf 500 MByte verkleinert. Beachten Sie unbedingt, dass Sie erst das Dateisystem und danach das Logical Volume mit lvreduce verkleinern. Wuerden Sie erst das Logical Volume mit lvreduce verkleinern, gehen die darin enthaltenen Daten verloren.
umount /lvm-test
e2fsck -f /dev/volg1/logv1
resize2fs /dev/volg1/logv1 512000
lvreduce -L-800M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Um komfortabler zu arbeiten, gibt es das Kommando e2fsadm, das alle vorher beschriebenen Schritte wie lvextend, lvreduce, e2fsck und resize2fs zusammen ausfuehrt. Wie der Name schon andeutet, funktioniert das Programm nur bei dem Dateisystem ext2. Falls das Programm nicht in Ihrer Distribution enthalten ist, koennen Sie es unter
http://e2fsprogs.sourceforge.net/
downloaden. Das folgende Kommando vergroessert zum Beispiel das Logical Volume auf 800 MByte. Zuvor muss es allerdings wieder mit umount ausgehaengt werden:
umount /lvm-test
e2fsadm -L 800M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Bei der Verkleinerung verfaehrt man in gleicher Weise:
umount /lvm-test
e2fsadm -L 500M /dev/volg1/logv1
mount -t ext2 /dev/volg1/logv1 /lvm-test
Volume Group vergroessern und verkleinern
Da auch der Speicherplatz der Volume Group irgendwann belegt ist und man damit kein Logical Volume mehr anlegen oder vergroessern kann, ist es moeglich, auch eine Volume Group mit dem Befehl vgextend zu vergroessern. Man muss nur eine beliebige freie Partition wie in Abschnitt Physical Volume einrichten als Physical Volume einrichten und es der Volume Group zufuegen.
pvcreate /dev/hdb7
vgextend volg1 /dev/hdb7
Mit vgdisplay kann man sich dann die neue Groesse ansehen:
vgdisplay /dev/volg1
Moechte man eine Volume Group verkleinern, kann man mit dem Befehl
vgreduce -a volg1
alle freien Physical Volumes aus der Volume Group entfernen. Um ein bestimmtes Physical Volume zu entfernen, muss man dessen genauen Pfad angeben. Vorher kann man, falls erwuenscht, mit dem Befehl pvdisplay -v ueberpruefen, ob das betreffende Physical Volume Daten enthaelt oder nicht.
pvdisplay -v /dev/hdb7
vgreduce volg1 /dev/hdb7
Voraussetzung ist immer, dass auf dem betreffenden Physical Volume keine Daten enthalten sind. Mit dem Kommando pvmove kann man vorher gegebenenfalls die Daten auf ein anderes Physical Volume verschieben. Sehen Sie dazu auch den Abschnitt Daten von einem PV zum anderen PV verschieben.
3.4 LVM-System beenden
Um das LVM-System ordungsgemaess zu beenden, muessen Sie alle Logical Volumes mit umount aus dem Verzeichnisbaum aushaengen und danach vgchange ausfuehren:
umount /lvm-test
vgchange -a n
Am komfortabelsten ist es, die Befehle fuer das Starten und Beenden des LVM-Systems innerhalb des Init-V-Prozesses einzubinden, um nicht immer manuell nach dem Systemstart das LVM-System zu aktivieren. Sehen Sie dazu auch den Abschnitt LVM beim Booten und Shutdown.
Dazugehoerende Dateien
artikel.txt
unmounten !!!!
Platte vergrößern
Physikalisches Volume vergößern
pvresize /dev/sdx
lvresize -L +20G /dev/VolGroup01/LogVol01
e2fsck -f /dev/VolGroup01/LogVol01
resize2fs e2fsck -f /dev/VolGroup01/LogVol01
mounten
Dazugehoerende Dateien
artikel.txt
Platte vergrößern
Physikalisches Volume vergößern
pvresize /dev/sdx
lvresize -L +20G /dev/VolGroup01/LogVol01
e2fsck -f /dev/VolGroup01/LogVol01
resize2fs e2fsck -f /dev/VolGroup01/LogVol01
mounten
Dazugehoerende Dateien
artikel.txt
dvds abspielen
mplayer dvd://
Beispiel:
mplayer dvd://1 -dvd-device /dev/hdc
Die Zahl steht fuer den Kapitel
ESC Wiedergabe beenden
Leertaste Wiedergabe Pausieren
Pfeil rechts 10 Sekunden vor springen
Pfeil links 10 Sekunden zurueck springen
Pfeil hoch 1 Minute vor springen
Pfeil runter 1 Minute zurueck springen
Bild hoch 10 Minuten vor springen
Bild runter 10 Minuten zurueck springen
0 Lautstaerke erhoehen
9 Lautstaerke verringern
M Audioausgabe de- & aktivieren
F Vollbildanzeige de- & aktivieren
# Audiospur wechseln
J Untertitel wechseln
O On-Screen-Display wechseln
Dazugehoerende Dateien
artikel.txt
Für die Installation von MRTG wird ein fertig konfigurierter Apache Webserver mit PHP4 vorrausgesetzt.
Sollte dies nicht der Fall sein, so kann man dies mit folgender Kommandozeile beheben:
apt-get install apache2 php4 libapache2-mod-php4 php4-cli php4-common php4-cgi
Die Installation von MRTG selbst unter Debian oder auch Ubuntu gestaltet sich recht einfach.
Dazu laden wir als erstes die benötigten Pakete:
apt-get install mrtg snmpd
Nach der Installation der Pakete editieren wir die Datei “/etc/mrtg.cfg”:
nano /etc/mrtg.cfg
Und ändern den Teil von Global Settings auf:
# Global Settings
RunAsDaemon: yes
EnableIPv6: no
WorkDir: /var/www/mrtg
Options[_]: bits,growright
WriteExpires: Yes
Danach muss die Datei “/etc/snmp/snmpd.conf” editiert werden:
nano /etc/snmp/snmpd.conf
wo wir folgendes hinzufügen/abändern:
# sec.name source community
com2sec readonly default public
Danach werden die Konfigurationsdatein geladen und der Index im /var/www/mrtg erstellt
und zu guter Letzt der snmp Dienst neugestartet:
cfgmaker public@localhost > /etc/mrtg.cfg
indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
/etc/init.d/snmpd restrat
Nach einem Neustart der Maschine wird unter “http:///mrtg/ alle 5 Minuten die Statistik
vom eth0 (Netzwerkinterface) aktualisiert. Der Cronjob wird automatisch angelegt und lässt
sich per “cat /etc/cron.d/mrtg” überprüfen.
Target[localhost.root]:dskTotal.1&dskUsed.1:public@localhost 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html 1000
RouterUptime[localhost.root]: public@localhost
MaxBytes[localhost.root]: 384497868000
Title[localhost.root]: DISK USAGE
PageTop[localhost.root]:
Disk Usage /
Unscaled[localhost.root]: ymwd
ShortLegend[localhost.root]: B
YLegend[localhost.root]: DISK Utilization
Legend1[localhost.root]: Total
Legend2[localhost.root]: Used
Legend3[localhost.root]:
Legend4[localhost.root]:
LegendI[localhost.root]: Total
LegendO[localhost.root]: Used
Options[localhost.root]: growright,gauge,nopercent
Target[localhost.backups]:dskTotal.2&dskUsed.2:public@localhost 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html 1024
RouterUptime[localhost.backups]: public@localhost
MaxBytes[localhost.backups]: 2014376488000
Title[localhost.backups]: DISK USAGE
PageTop[localhost.backups]:
Disk Usage /backups
Unscaled[localhost.backups]: ymwd
ShortLegend[localhost.backups]: B
YLegend[localhost.backups]: DISK Utilization
Legend1[localhost.backups]: Total
Legend2[localhost.backups]: Used
Legend3[localhost.backups]:
Legend4[localhost.backups]:
LegendI[localhost.backups]: Total
LegendO[localhost.backups]: Used
Options[localhost.backups]: growright,gauge,nopercent
Moinsen, leider habe ich über google keinen Lösungsansatz gefunden deswegen hier der Post.
Ich habe mrtg und snmp eingerichtet und mir mit hilfe von
cfgmaker public@localhost > /etc/mrtg.cfg
indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
/etc/init.d/snmpd restrat
wurde mir dann auch der Traffic für die eth1 Netzwerkkarte angezeigt.
Nun wollte ich noch cpu, Festplatte mit darstellen lassen nur so recht will das nicht laufen.
habe es wie folgt eingebunden
Target[localhost.tmp]:dskTotal.4&dskUsed.4:public@localhost 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html 1000
RouterUptime[localhost.tmp]: public@localhost
MaxBytes[localhost.tmp]: 43647056
Title[localhost.tmp]: DISK USAGE
PageTop[localhost.tmp]:
Disk Usage /srv
Unscaled[localhost.tmp]: ymwd
ShortLegend[localhost.tmp]: Gbyte
YLegend[localhost.tmp]: DISK Utilization
Legend1[localhost.tmp]: Total
Legend2[localhost.tmp]: Used
Legend3[localhost.tmp]:
Legend4[localhost.tmp]:
LegendI[localhost.tmp]: Total
LegendO[localhost.tmp]: Used
Options[localhost.tmp]: growright,gauge,nopercent
aber mir wurde nichts ausgegeben.
in der snmpd.conf habe ich ich eingeragen disk /srv 10%
Dazugehoerende Dateien
artikel.txt
ssl Zertifikat
./check_http -H crm.hmmh.de --ssl -C 1000 -f follow
-H gibt den Host an
--ssl aktiviert ssl
-C zeit fuer die warnung
-f follow leitet Zb automatisch von http Seiten auf https Seiten
laufendes Programm pruefen
check_nt -H d3-ocr.hmmh.ag -p 12489 -v PROCSTATE -d SHOWALL -l "dtiffsvr.exe"
check swap
command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 90% -c 50%
Dazugehoerende Dateien
artikel.txt
blacklist.sh
check_cpu.sh
check_memory.sh
check_printer.php
check_swap
check_swraid
check_traffic2.sh
checkWebsites.sh
ssfhs
der Benutzer mit dem sshfs genutzt werden soll muss mit in der Gruppe fuse sein.
fusessh ist ein Beispielordner
mkdir ~/fusessh
sshfs Benutzername@irgendEinRechner:/pfad_auf_dem_server/ ~/fusessh
um die Verbindung wieder entfernen
fusermount -u ~/fusessh
Dazugehoerende Dateien
artikel.txt
artikel.txt~
apt-get install subversion libapache2-svn
Verzeichniss erstellen für repository
mkdir -p /var/svn/
repository erstellen
svnadmin create /var/svn/
Verzeichniss für trac erstellen
mkdir /var/trac/
erstes einlesen durch trac
trac-admin /var/trac/ initenv
=> ein setup wird gestartet die fragen müssen beantwortet werden
der www-data user muss der besitzer der ordner fürs trac und fürs svn sein
chown -R www-data:www-data /var/trac/
chown -R www-data:www-data /var/svn/
config für apache2 vhost
Um die Benutzerrechteverwaltung zu vereinfachen wurde hier mit Gruppen gearbeitet
>
DAV svn
SVNPath /var/svn/
AuthType Basic
AuthName "Subversion"
AuthUserFile /etc/apache2/svnuser.passwd
AuthGroupFile /etc/apache2/svngroup.passwd
Require group
>
AuthType Basic
AuthName "Subversion"
AuthUserFile /etc/apache2/svnuser.passwd
AuthGroupFile /etc/apache2/svngroup.passwd
Require group
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonPath "sys.path + ['/usr/share/trac']"
PythonOption TracEnv /var/trac/
PythonOption TracUriRoot /trac/
Aufbau svnuser.passwd
hermann:JCHv3BD0iMi.o
mip:aB6IKjlJWW3mA
cwm:76doehSNd1d26
Aufbau svngroup.passwd
mip: hermann mip
cwm: hermann cwm
Backups
backup erstellen
svnadmin dump /var/local/svn/ > dumpfile
backup wieder einspielen
svnadmin load /var/local/svn/ < dumpfile
Weitere Abläufe
Verzeichnisstruktur erstellen
mkdir -p /tmp/projekt1/trunk //Hauptast des Projektes
mkdir -p /tmp/projekt1/tags //Entwicklungszweige
mkdir -p /tmp/projekt1/branches //speicherung von Entwicklungsständen
bereits erstllte daten müssen in das trunk Verzeichniss kopiert werden
cp -R /projekt_ohne_svn/* /tmp/projekt1/trunk
Projekt in Subversion importieren:
svn import /tmp/projekt1 http://localhost/svn/projekt1 -m "initialer Import"
bzw mit Benutzer
svn import /tmp/projekt1 http://localhost/svn/projekt1 -m "initialer Import" --username ein-Nutzer
weitere Befehle
svn checkout http://localhost/svn/projekt1/trunk/ /home/user/projekt1 #checkt trunk-Zweig von projekt1 aus
svn diff #zeigt die Unterschiede an
svn ci -m "Kommentar" #die Arbeitskopie wird auf den Server übertragen
svn update #damit wird die Arbeitskopie dem Server angepasst
svn help #Hilfe
zwischen hier können die rechte noch genauer mit vergeben werden, welcher branch etc
AuthzSVNAccessFile conf/all.authz
aufbau der authz datei
[repo:pfad]
[groups]
hmmh = heino.niemann,sven.thoden
[svn-hmmh:/]
1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html =
@hmmh = rw
[svn-hmmh:/bfriends]
sven.thoden = r
PROBLEM
Unter ubuntu amd64 gibt es probleme mit python, wenn http://mathiasson.nu/debian/pool/main/c/clearsilver/python-clearsilver_0.10.4-1.0pm0_amd64.deb installiert wird läuft trac aber
Dazugehoerende Dateien
artikel.txt
svn-book.pdf
Verzeichniss erstellen für repository
mkdir -p /var/svn/
repository erstellen
svnadmin create /var/svn/
Verzeichniss für trac erstellen
mkdir /var/trac/
erstes einlesen durch trac
trac-admin /var/trac/ initenv
=> ein setup wird gestartet die fragen müssen beantwortet werden
der www-data user muss der besitzer der ordner fürs trac und fürs svn sein
chown -R www-data:www-data /var/trac/
chown -R www-data:www-data /var/svn/
config für apache2 vhost
Um die Benutzerrechteverwaltung zu vereinfachen wurde hier mit Gruppen gearbeitet
DAV svn
SVNPath /var/svn/
AuthType Basic
AuthName "Subversion"
AuthUserFile /etc/apache2/svnuser.passwd
AuthGroupFile /etc/apache2/svngroup.passwd
Require group
AuthType Basic
AuthName "Subversion"
AuthUserFile /etc/apache2/svnuser.passwd
AuthGroupFile /etc/apache2/svngroup.passwd
Require group
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonPath "sys.path + ['/usr/share/trac']"
PythonOption TracEnv /var/trac/
PythonOption TracUriRoot /trac/
Aufbau svnuser.passwd
hermann:JCHv3BD0iMi.o
mip:aB6IKjlJWW3mA
cwm:76doehSNd1d26
Aufbau svngroup.passwd
mip: hermann mip
cwm: hermann cwm
Backups
backup erstellen
svnadmin dump /var/local/svn/ > dumpfile
backup wieder einspielen
svnadmin load /var/local/svn/ < dumpfile
Weitere Abläufe
Verzeichnisstruktur erstellen
mkdir -p /tmp/projekt1/trunk //Hauptast des Projektes
mkdir -p /tmp/projekt1/tags //Entwicklungszweige
mkdir -p /tmp/projekt1/branches //speicherung von Entwicklungsständen
bereits erstllte daten müssen in das trunk Verzeichniss kopiert werden
cp -R /projekt_ohne_svn/* /tmp/projekt1/trunk
Projekt in Subversion importieren:
svn import /tmp/projekt1 http://localhost/svn/projekt1 -m "initialer Import"
bzw mit Benutzer
svn import /tmp/projekt1 http://localhost/svn/projekt1 -m "initialer Import" --username ein-Nutzer
weitere Befehle
svn checkout http://localhost/svn/projekt1/trunk/ /home/user/projekt1 #checkt trunk-Zweig von projekt1 aus
svn diff #zeigt die Unterschiede an
svn ci -m "Kommentar" #die Arbeitskopie wird auf den Server übertragen
svn update #damit wird die Arbeitskopie dem Server angepasst
svn help #Hilfe
zwischen
AuthzSVNAccessFile conf/all.authz
aufbau der authz datei
[repo:pfad]
[groups]
hmmh = heino.niemann,sven.thoden
[svn-hmmh:/]
1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html =
@hmmh = rw
[svn-hmmh:/bfriends]
sven.thoden = r
PROBLEM
Unter ubuntu amd64 gibt es probleme mit python, wenn http://mathiasson.nu/debian/pool/main/c/clearsilver/python-clearsilver_0.10.4-1.0pm0_amd64.deb installiert wird läuft trac aber
Dazugehoerende Dateien
artikel.txt
svn-book.pdf
Nur bestimmte IP Adressen dürfen auf den Tomcat zugreifen
Allow="80.228.246.172"/>
Es muss kein deny="*" vorangestellt werden
Dazugehoerende Dateien
artikel.txt
Es muss kein deny="*" vorangestellt werden
Dazugehoerende Dateien
artikel.txt
Zufalls Passwort mit der Shell generieren
passwort=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8`
echo $passwort
Dazugehoerende Dateien
artikel.txt
artikel.txt~
passwort=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8`
echo $passwort
Dazugehoerende Dateien
artikel.txt
artikel.txt~
"identity","streetaddress","city","postalcode","company","department","office","officephone","MobilePhone","fax","CustomAttribute1","manager"
"hermann.schmidt","Escherweg 3","Oldenburg","26121","hmmh multimediahaus AG","System Administration","hmmh System Administration","OL 451 / HB 165","+49 15 20 / 89 68 792","+49 4 41 / 80 01 -111","11.06.1900","heino.niemann"
PS C:UsersAdministrator> Import-Csv C:Usershermann.schmidtDesktopdaten.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress
-city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager-OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone }
http://technet.microsoft.com/en-us/library/ee617241.aspx
http://technet.microsoft.com/de-de/library/ee617215%28en-us%29.aspx
Die "" sind nicht notwendig, damit ö ä ü sauber importiert werden, muss die csv Datei als unicode gespeichert werden
PS C:UsersAdministrator> $datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
Mit Hilfe der Powershell können auch E-Mails mit oder ohne Dateianhang (Attachment) versendet werden. Soll eine E-Mail ohne Anhang versendet werden, kann auf die Zeilen $filename, $att und $mailmessage.Attachments.Add($att) verzichtet werden.
function sendmail($body)
{
$filename = "Pfad zum Dateianhang"
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$att = new-object Net.Mail.Attachment($filename)
$SmtpClient.Host = "Name des Mailservers"
$mailmessage.from = "Absenderadresse"
$mailmessage.To.add("Empfängeradresse")
$mailmessage.Subject = “Betreff der Nachricht”
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$mailmessage.Attachments.Add($att)
$smtpclient.Send($mailmessage)
}
$body = "Irgendein Text oder der Inhalt einer Variable"
sendmail $body
Standart AD Werte
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Office $_.office -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
CustomAttribute1 fuer exchange
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-Mailbox -Identity $_.Identity -CustomAttribute1 $_.CustomAttribute1 ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.custom.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
beides gleichzeitig
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Office $_.office -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log ; Set-Mailbox -Identity $_.Identity -CustomAttribute1 $_.CustomAttribute1 ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.custom.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
Dazugehoerende Dateien
artikel.txt
"hermann.schmidt","Escherweg 3","Oldenburg","26121","hmmh multimediahaus AG","System Administration","hmmh System Administration","OL 451 / HB 165","+49 15 20 / 89 68 792","+49 4 41 / 80 01 -111","11.06.1900","heino.niemann"
PS C:UsersAdministrator> Import-Csv C:Usershermann.schmidtDesktopdaten.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress
-city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager-OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone }
http://technet.microsoft.com/en-us/library/ee617241.aspx
http://technet.microsoft.com/de-de/library/ee617215%28en-us%29.aspx
Die "" sind nicht notwendig, damit ö ä ü sauber importiert werden, muss die csv Datei als unicode gespeichert werden
PS C:UsersAdministrator> $datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
Mit Hilfe der Powershell können auch E-Mails mit oder ohne Dateianhang (Attachment) versendet werden. Soll eine E-Mail ohne Anhang versendet werden, kann auf die Zeilen $filename, $att und $mailmessage.Attachments.Add($att) verzichtet werden.
function sendmail($body)
{
$filename = "Pfad zum Dateianhang"
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$att = new-object Net.Mail.Attachment($filename)
$SmtpClient.Host = "Name des Mailservers"
$mailmessage.from = "Absenderadresse"
$mailmessage.To.add("Empfängeradresse")
$mailmessage.Subject = “Betreff der Nachricht”
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$mailmessage.Attachments.Add($att)
$smtpclient.Send($mailmessage)
}
$body = "Irgendein Text oder der Inhalt einer Variable"
sendmail $body
Standart AD Werte
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Office $_.office -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
CustomAttribute1 fuer exchange
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-Mailbox -Identity $_.Identity -CustomAttribute1 $_.CustomAttribute1 ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.custom.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
beides gleichzeitig
$datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usershermann.schmidtDesktopimport*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Office $_.office -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log ; Set-Mailbox -Identity $_.Identity -CustomAttribute1 $_.CustomAttribute1 ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.custom.log } ; Move-Item C:Usershermann.schmidtDesktopimport*.csv C:Usershermann.schmidtDesktopdone
Dazugehoerende Dateien
artikel.txt
Die AD-Commandlets (kurz Cmdlets) die zur Verfuegung stehen
Die Cmdlets sind durch ihre Namen weitestgehend selbsterklaerend. Die unten aufgefuehrten Cmdlets kann man sich mit dem Befehl get-command anzeigen lassen, wie z.B. get-command get-ad*, get-command new-ad* oder get-command remove-ad* usw. Alle AD-Cmdlets werden mit diesem Befehl angezeigt: Get-Command *-ad*
Eine ausfuehrliche und detaillierte Hilfe zu den folgenden Cmdlets laesst sich wie folgt anzeigen:
- Get-Help
- Get-Help
- Get-Help
Die Hilfe zu den Filtermoeglichkeiten laesst sich mit diesem Befehl aufrufen:
get-help about_ActiveDirectory_Filter
AD-Objekte abrufen (22 Cmdlets)
- Get-ADAccountAuthorizationGroup
- Get-ADAccountResultantPasswordReplicationPolicy
- Get-ADComputer
- Get-ADComputerServiceAccount
- Get-ADDefaultDomainPasswordPolicy
- Get-ADDomain
- Get-ADDomainController
- Get-ADDomainControllerPasswordReplicationPolicy
- Get-ADDomainControllerPasswordReplicationPolicyUsage
- Get-ADFineGrainedPasswordPolicy
- Get-ADFineGrainedPasswordPolicySubject
- Get-ADForest
- Get-ADGroup
- Get-ADGroupMember
- Get-ADObject
- Get-ADOptionalFeature
- Get-ADOrganizationalUnit
- Get-ADPrincipalGroupMembership
- Get-ADRootDSE
- Get-ADServiceAccount
- Get-ADUser
- Get-ADUserResultantPasswordPolicy
AD-Objekte erstellen (7 Cmdlets)
- New-ADComputer
- New-ADFineGrainedPasswordPolicy
- New-ADGroup
- New-ADObject
- New-ADOrganizationalUnit
- New-ADServiceAccount
- New-ADUser
AD-Objekte entfernen (12 Cmdlets)
- Remove-ADComputer
- Remove-ADComputerServiceAccount
- Remove-ADDomainControllerPasswordReplicationPolicy
- Remove-ADFineGrainedPasswordPolicy
- Remove-ADFineGrainedPasswordPolicySubject
- Remove-ADGroup
- Remove-ADGroupMember
- Remove-ADObject
- Remove-ADOrganizationalUnit
- Remove-ADPrincipalGroupMembership
- Remove-ADServiceAccount
- Remove-ADUser
AD-Schreibvorgaenge durchfuehren (15 Cmdlets)
- Set-ADAccountControl
- Set-ADAccountExpiration
- Set-ADAccountPassword
- Set-ADComputer
- Set-ADDefaultDomainPasswordPolicy
- Set-ADDomain
- Set-ADDomainMode
- Set-ADFineGrainedPasswordPolicy
- Set-ADForest
- Set-ADForestMode
- Set-ADGroup
- Set-ADObject
- Set-ADOrganizationalUnit
- Set-ADServiceAccount
- Set-ADUser
AD-Objekte hinzufuegen (5 Cmdlets)
- Add-ADComputerServiceAccount
- Add-ADDomainControllerPasswordReplicationPolicy
- Add-ADFineGrainedPasswordPolicySubject
- Add-ADGroupMember
- Add-ADPrincipalGroupMembership
AD-Objekte und optionale AD-Funktionen deaktivieren (2 Cmdlets)
- Disable-ADAccount
- Disable-ADOptionalFeature
AD-Objekte und optionale AD-Funktionen aktivieren (2 Cmdlets)
- Enable-ADAccount
- Enable-ADOptionalFeature
AD-Objekte verschieben (3 Cmdlets)
- Move-ADDirectoryServer
- Move-ADDirectoryServerOperationMasterRole
- Move-ADObject
AD-Objekte umbenennen (1 Cmdlet)
- Rename-ADObject
AD-Dienstkontenkennwoerter zuruecksetzen (1 Cmdlet)
- Reset-ADServiceAccountPassword
AD-Objekte wiederherstellen (1 Cmdlet)
- Restore-ADObject
AD-Objekte suchen (1 Cmdlet)
- Search-ADAccount
AD-Dienstkonto deinstallieren (1 Cmdlet)
- Uninstall-ADServiceAccount
AD-Objekt entsperren (1 Cmdlet)
- Unlock-ADAccount
AD-Kontoablaufdatum zuruecksetzen (1 Cmdlet)
- Clear-ADAccountExpiration
AD-Dienstkonto installieren (1 Cmdlet)
- Install-ADServiceAccount
AD-PowerShell „Benutzerobjekt“ Befehle
Mit dem Cmdlet Get-ADUser lassen sich Benutzerinformationen abfragen. Je nach Angabe der Suchkriterien werden bei der Abfrage ein oder mehrere Benutzerobjekte mit den gewuenschten Attributen angezeigt. Mit dem Befehl Get-ADUser Yusuf werden standardmaessig die folgenden Werte angezeigt: DistinguishedName, Enabled, givenName, Name, ObjectClass, ObjectGUID, SamAccountName, ObjectSID, Surname, userPrincipalName
Bei allen PowerShell-Befehlen kann bei der Angabe von
- sAMAccountName
- Distinguished Name (DN)
- ObjectSID
- ObjectGUID
Die Abfrage Get-ADUser „CN=Yusuf,OU=IT,DC=blog,DC=dikmenoglu,DC=de“, Get-ADUser S-1-5-21-2225156702-1871195563-4034089934-1101 oder Get-ADUser 6e90b6c6-0fc6-4aab-af7f-73b74f937980liefern alle das gleiche Ergebnis.
Hinweis: Um die Funktion der Befehle sicherzustellen, ist es empfehlenswert die Befehle haendisch einzutippen anstatt sie zu kopieren!
# Soll sich die Abfrage auf eine bestimmte OU (samt Unter-OUs) beschraenken, so kann das mit dem Parameter –Searchbase und der Angabe des DN der OU durchgefuehrt werden.
Get-ADUser –LDAPFilter „(givenName=Yusuf)“ –SearchBase „OU=IT,DC=Domaene,DC=de“
# Zum Erhoehen der Suchleistung sollte man den Suchbereich auf ein einziges Objekt oder auf eine Objektteilmenge beschraenken. Fuer diese Aufgabe stellt die DirectorySearcher-Klasse die SearchScope-Eigenschaft bereit. Der Suchbereich laesst sich auf eine der folgenden drei Einstellungen festlegen:
- Base: Hier wird das Objekt durchsucht, mit dem man verbunden ist. Wenn man sich z.B. mit einer OU verbunden hat, wird nur diese eine OU durchsucht und nicht noch zusaetzlich die evtl. bestehenden Unter-OUs.
- OneLevel: Mit dieser Option werden alle Objekte die sich direkt, also eine Ebene tiefer, unter der Suchbasis befinden durchsucht.
- Subtree: Durchsucht alle Objekte, die in der Teilstruktur des verbundenen Objekts enthalten sind. Dabei werden alle Container im aktuellen Pfad und unterhalb der Suchbasis durchsucht.
Mit der Angabe des Parameters –SearchScope, laesst sich die Abfrage im vorherigen Beispiel ausschliesslich auf die angegebene OU beschraenken:
Get-ADUser –LDAPFilter „(givenName=Yusuf)“ –SearchBase „OU=IT,DC=Domaene,DC=de“ –SearchScope OneLevel
# Welche Benutzerkontoeigenschaften angezeigt werden, laesst sich mit dem Parameter –Properties beeinflussen. Wird beim Parameter –Properties als Wert ein Wildcard „*“ verwendet, so lassen sich alle Benutzerkontoeigenschaften anzeigen die im Benutzerobjekt enthalten sind:
Get-ADuser
# Moechte man sich bei einem bestimmten Benutzer neben den standardmaessig angezeigten Werten lediglich als weitere Benutzereigenschaft die Personalnummer, die Attribute employeeID und employeeNumberanzeigen lassen, so lautet der Befehl
Get-ADUser
# Alle Benutzerkonten in der Domaene anzeigen
Get-ADUser –Filter 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html
# Alle AD-Objekte anzeigen
Get-ADObject –Filter { ObjectClass –Like „*“ }
# Alle Benutzerkonten einer bestimmten OU im Spaltenformat anzeigen
Get-ADUser –Filter 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html -Searchbase „OU=
# Alle Benutzer in der Domaene mit dem Vornamen „Yusuf“ anzeigen
Get-ADUser –LDAPFilter „(givenName=Yusuf)“
# Alle Benutzerkonten in der Domaene mit der Personalnummer im Spaltenformat anzeigen
Get-ADUser -Filter 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html -Properties employeeID,employeeNumber | FT
# Mit einer Ambiguous Name Resolution (kurz ANR) die Benutzer anzeigen, die im Vornamen, Nachnamen oder sAMAccountName den Eintrag „Yus“ enthalten
Get-ADUser –Filter { ANR –eq „Yus“ }
# Alle Benutzerkonten aus „Mainz“ anzeigen
Get-ADUser –Filter {City –Like „Mainz“}
# Alle Benutzerkonten mit dem Vornamen „Yusuf“ anzeigen
Get-ADUser –Filter {givenName –Like „Yusuf“} | FT
# Alle Benutzerkonten mit dem Nachnamen „Dikmenoglu“ anzeigen
Get-ADUser –Filter {Surname –Like „Dikmenoglu“}
# Alle Benutzerkonten aus der Abteilung „EDV“ anzeigen
Get-ADUser –Filter {Department –Like „EDV“}
# Alle Benutzerkonten anzeigen die in ihrem „Common Name“ irgendwo den Eintrag „Yus“ haben
Get-ADUser –Filter { CN –Like „*Yus*“ }
# Alle Benutzer die einen Wert im Attribut mail eingetragen haben anzeigen
Get-ADUser –Filter { mail –Like „*“ }
oder
Get-ADObject –Filter { mail –Like „*“ –and ObjectClass –eq “user” }
# Alle Benutzer die einen Wert im Attribut mail eingetragen haben und mit Nachname „Dikmenoglu“ lauten anzeigen
Get-ADUser –Filter { mail –Like „*“ –and Surname –eq „dikmenoglu“ }
oder
Get-ADUser –Filter { mail –Like „*“ –and sn –eq „dikmenoglu“ }
# Alle Benutzerkonten die keinen Wert im Attribut mail eingetragen haben anzeigen
Get-ADUser –Filter { mail –notlike „*“ }
Oder
Get-ADUser –LDAPFilter „(!(email=*))“
# Alle Benutzerkonten die im Common Name mit „Yusuf“ oder „Kaan“ beginnen anzeigen
Get-ADUser -Filter { CN -like "Yusuf*" -or CN -eq "Kaan"
oder
Get-ADObject -Filter { objectClass -eq "user" -and (CN -like "Yusuf*" -or CN -eq "Kaan") }
# Die Gruppenmitgliedschaften eines Benutzers anzeigen
Get-ADPrincipalGroupMembership Yusuf
# Alle Benutzerkonten anzeigen, die als Vorgesetzten „Yusuf“ eingetragen haben
Get-ADUser -Filter { Manager -eq "Yusuf" }
# Die direkten Gruppenmitgliedschaften samt der „primaeren Gruppe“ eines Benutzers anzeigen
Get-ADUser Yusuf –Properties primarygroupID,memberof
# Den Benutzer aus einer Gruppe entfernen
Remove-ADPrincipalGroupMembership Yusuf –MemberOf „Gruppe“
# Den Benutzer bis auf die primaere Gruppe, aus allen Gruppen entfernen
Get-ADPrincipalGroupMembership Yusuf | % {Remove-ADPrincipalGroupMembership Yusuf -MemberOf $_}
# Den Benutzer Kaan zu den gleichen Gruppen hinzufuegen, in denen Yusuf Mitglied ist
Get-ADPrincipalGroupMembership Yusuf | % {Add-ADPrincipalGroupMembership Kaan -MemberOf $_}
# Alle Benutzerkonten anzeigen, die sich in den letzten 10 Tagen angemeldet haben
$date = (get-date) – (new-timespan –days 10)
Get-ADUser –Filter { lastlogon –gt $date }
Ein anderer Befehl mit dem die Benutzer angezeigt werden, die sich in den letzten 5 Tagen an der Domaene angemeldet haben ist dieser:
Get-ADUser –LDAPFilter „(&(LastLogon>=128812906535515110)(objectCategory=user))“
# Alle Benutzer anzeigen die sich in den letzten 50 Tagen nicht angemeldet haben
$Vorvielentagen = (Get-Date).AddDays(-50)
Get-ADUser -Filter { lastLogonTimeStamp -notlike "*" -or lastLogonTimeStamp -le $Vorvielentagen }
# Alle Benutzerkonten die mehr als vier Mal ihr Kennwort falsch eingegeben haben anzeigen
Get-ADUser –LDAPFilter „(badPwdCount>=4)“
Oder
Get-ADUser –Filter {badPwdCount –ge 4}
# Einen Benutzer deaktivieren
Disable-ADAccount Yusuf
# Einen Benutzer aktivieren
Enable-ADAccount Yusuf
# Einen deaktivierten Benutzer im Container USERS erstellen
New-ADUser Yusuf
# Einen aktivierten Benutzer in der angegebenen OU mit mehreren Werten erstellen
New-ADUser –sAMAccountName „Yusuf“ –UserPrincipalName Yusuf@ad.dikmenoglu.de –givenname “Yusuf” –Surname “Dikmenoglu” –displayName “Yusuf Dikmenoglu” –Name “Yusuf Dikmenoglu” –scriptpath “login.bat” –Enabled $true –Path “OU=
# Ein Benutzerkonto mit allen Eigenschaften kopieren und im Container USERS erstellen
PS C:> $Groups = Get-ADPrincipalGroupMembership "Yusuf"
PS C:> Get-ADUser "Yusuf" -Properties 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html | New-ADUser -Name "Benutzer2" -Displayname "Benutzer2" -samaccountname "Benutzer2" -accountpassword (ConvertTo-SecureString "Pa$$w0rd!" -AsPlainText –Force)
PS C:>Add-ADPrincipalGroupMembership "Benutzer2" -memberOf $Groups
# Ein Benutzerkonto nur mit bestimmten Attributen kopieren und im Container USERS erstellen
PS C:> $Groups = Get-ADPrincipalGroupMembership "Yusuf"
PS C:> Get-ADUser "Yusuf" -Properties profilPath, scriptPath, accountExpires | New-ADUser -Name "Benutzer2" -Displayname "Benutzer2" -samaccountname "Benutzer2" -accountpassword (ConvertTo-SecureString "Pa$$w0rd!" -AsPlainText –Force)
PS C:>Add-ADPrincipalGroupMembership "Benutzer2" -memberOf $Groups
# 50 aktivierte Benutzerkonten in einer bestimmten OU erstellen
(1..50) | Foreach-Object {New-ADUser –sAMAccountname "Benutzer$_" -Name "Benutzer$_" -AccountPassword (ConvertTo-SecureString -AsPlainText "Pa$$w0rd!" -Force) –Enabled $true –Path „OU=
# Allen Benutzern einer bestimmten OU einen Wert im Feld „Beschreibung“ setzen
Get-ADUser –Filter 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html -Searchbase „OU=
# Die Option „Konto laeuft ab am:“ auf den 31. Oktober 2009 setzen
Set-ADUser Yusuf –AccountExpirationDate 01/11/2009
# Die Option „Konto laeuft ab“ auf „Nie“ setzen
Clear-ADAccountExpiration Yusuf
# Den Profilpfad, das Anmeldeskript und ein Homelaufwerk fuer einen bestimmten Benutzer eintragen
Set-ADUser „Yusuf“ –ProfilePath \Server01Profiles%username% -Scriptpath „Login.bat“ –Homedrive „X“ –HomeDirectory „\Server01homeYusuf“
# Einen Benutzer in eine andere OU verschieben
Get-ADUser Yusuf | Move-ADObject –TargetPath „OU=NeueOU,DC=Domaene,DC=de“
# Den relative distinguished name (RDN) eines Benutzers aendern
Rename-ADObject „CN=Yusuf Dikmenoglu,OU=IT,DC=Domaene,DC=de“ –NewName „Yusuf Cool“
# Einen Benutzer loeschen
Remove-ADUser Yusuf
# Einen Benutzer ohne Sicherheitsabfrage loeschen
Remove-ADUser Yusuf -Confirm:$False
# Mehrere Benutzer anhand eines gemeinsamen Kriteriums loeschen
Get-ADUser –Filter {Name –Like „*Dikmenoglu*“} | Remove-ADUser
# Mit dem folgenden Befehl wird die Voreinstellung fuer neue Benutzer auf einem deutschen DC (auf einem englischen System lautet der LDAP-Pfad ...,CN=409,...) auf „Nachname, Vorname“ geaendert (die Ansicht im Attribut name). Bestehende Objekte sind davon nicht betroffen.
Set-ADObject "CN=user-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=Domaene,DC=de" -Partition „CN=Configuration,DC=Domaene,DC=de“ -Replace @{CreateDialog="%
Die Voreinstellung fuer Kontakte wird wie folgt geaendert:
Set-ADObject "CN=contact-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=Domaene,DC=de" -Partition „CN=Configuration,DC=Domaene,DC=de“ -Replace @{CreateDialog="%
# Benutzer muss Kennwort bei der naechsten Anmeldung aendern
Set-ADUser –identity Yusuf –ChangePasswordAtLogon $true
# Die Kontooption „Benutzer kann Kennwort nicht aendern“ setzen
Set-ADAccountControl Yusuf -CannotChangePassword $true
Achtung: Ist die Kontooption „Benutzer muss Kennwort bei der naechsten Anmeldung aendern“ aktiviert, kann ueber dsa.msc nicht zusaetzlich die Kontooption „Benutzer kann Kennwort nicht aendern“ aktiviert werden. Was auch verstaendlich ist, denn diese beiden Optionen widersprechen sich. Ist jedoch die Kontooption „Benutzer muss Kennwort bei der naechsten Anmeldung aendern“ aktiviert und die Kontooption „Benutzer kann Kennwort nicht aendern“ wird ueber die AD-PowerShell aktiviert, sind anschliessend beide Optionen aktiviert!
# Einem Benutzer ein neues Kennwort vergeben
Set-ADAccountPassword –Identity Yusuf -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "Pa$$w0rd!" –Force)
# Die Kontooption „Kennwort laeuft nie ab“ bei einem Benutzer- oder Dienstkonto aktivieren
Set-ADAccountControl Yusuf -PasswordNeverExpires $true
# Bei allen Benutzern die Kontooption "Kennwort laeuft nie ab" deaktivieren und dafuer die Option "Benutzer muss Kennwort bei der naechsten Anmeldung aendern" aktivieren
Get-ADUser -filter 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html | Set-ADUser -PasswordNeverExpires $false -ChangePasswordAtLogon $true
# Alle Benutzerkonten innerhalb einer bestimmten OU anzeigen, die die Kontooption „Kennwort laeuft nie ab“ aktiviert haben
Search-ADAccount -PasswordNeverExpires -SearchBase “OU=EDV,DC=blog,DC=dikmenoglu,DC=de”
Hinweis: Bei Nutzung des Cmdlets Search-ADAccount kann durch die Angabe des Parameters –UsersOnly oder –ComputersOnly die Abfrage entweder nur auf Benutzer- oder Computerkonten beschraenkt werden.
# Liefert alle Konten die ein abgelaufenes Kennwort besitzen
Search-ADAccount -PasswordExpired | FT Name,ObjectClass
# Alle Benutzer-, Computer- und Dienstkonten anzeigen, die deaktiviert sind
Search-ADAccount -AccountDisabled | FT Name
# Nur deaktivierte Benutzerkonten einer Domaene anzeigen
Search-ADAccount –AccountDisabled –Usersonly | FT Name
# Lediglich deaktivierte Computerkonten anzeigen. Wenn Clients aus der Domaene entfernt und in eine Arbeitsgruppe hinzugefuegt werden, wird das Computerkonto im AD deaktiviert und nicht geloescht.
Search-ADAccount -AccountDisabled -ComputersOnly | FT Name
# Alle deaktivierten Benutzer einer bestimmten Organisationseinheit (OU) anzeigen
Search-ADAccount -AccountDisabled –Searchbase „OU=
# Abgelaufene Benutzerkonten anzeigen
Search-ADAccount –AccountExpired | FT Name
# Alle Benutzerkonten anzeigen, die in den naechsten 60 Tagen ablaufen
Search-ADAccount –AccountExpiring -TimeSpan 60.00:00:00 | FT Name
# Alle Konten anzeigen (auch Computer) die sich in den letzten 60 Tagen nicht angemeldet haben. Bei dieser Abfrage muss sich der Domaenenfunktionsmodus mindestens auf der Ebene „Windows Server 2003“ befinden
Search-ADAccount -AccountInactive -TimeSpan 60.00:00:00 | FT Name
# Alle gesperrten Benutzer anzeigen
Search-ADAccount -LockedOut –Usersonly | FT Name
# Einen bestimmten Benutzer entsperren
Unlock-ADAccount –identity
# Alle Benutzerkonten anzeigen die am 30.08.2009 ablaufen
Search-ADAccount -AccountExpiring -Usersonly -DateTime "8/30/2009" | FT Name
AD-PowerShell „Gruppenobjekt“ Befehle
Bei der Angabe des
- sAMAccountName
- Distinguished Name (DN)
- ObjectSID
- ObjectGUID
Mit dem Cmdlet Get-ADGroup werden standardmaessig folgende Werte angezeigt: DistinguishedName, GroupCategory, GroupScope, Name, ObjectClass, ObjectGUID, sAMAccountName, ObjectSID. Sollen neben diesen Werten noch weitere angezeigt werden, muessen diese mit dem Parameter –Properties angegeben werden. Z.B.: Get-ADGroup
# Alle Eigenschaften einer Gruppe werden mit der Angabe von dem Stern (Wildcard) angezeigt
Get-ADGroup
# Eine globale Sicherheitsgruppe im Container Users erstellen
New-ADGroup -Name "Neue Gruppe" -sAMAccountName NeueGruppe -GroupCategory Security -GroupScope Global -DisplayName "Neue Gruppe" -Path "CN=Users,DC=Domaene,DC=de"
# Eine domaenenlokale Sicherheitsgruppe in einer OU erstellen
New-ADGroup -Name "Gruppe" -sAMAccountName Gruppe -GroupCategory Security -GroupScope DomainLocal -DisplayName "Gruppe" -Path "OU=
# Eine universelle Sicherheitsgruppe in einer OU erstellen
New-ADGroup -Name "Gruppe" -sAMAccountName Gruppe -GroupCategory Security -GroupScope Universal -DisplayName "Gruppe" -Path "OU=
# Eine globale Verteilergruppe in der angegebenen OU erstellen
New-ADGroup -Name
# Alle Gruppen mit dem Gruppentyp “Sicherheit” anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))“
Oder
Get-ADGroup –Filter „groupType –band 0x80000000“
# Alle Gruppen mit dem Gruppentyp “Verteiler” anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(!groupType:1.2.840.113556.1.4.803:=2147483648))“
# Nur universelle Sicherheitsgruppen anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=-2147483640))“
# Nur domaenenlokale Sicherheitsgruppen anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=-2147483644))“
# Nur globale Sicherheitsgruppen anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=-2147483646))“
# Globale Sicherheits- und Verteilergruppen werden mit diesem Befehl angezeigt
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2))“
# Domaenenlokale Sicherheits- und Verteilergruppen zeigt dieser Befehl an
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=4))“
# Universelle Sicherheits- und Verteilergruppen anzeigen
Get-ADGroup –LDAPFilter „(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=8))“
# Alle Benutzer anzeigen die als primaere Gruppe „Domaenen-Benutzer“ eingetragen haben
Get-ADUser –LDAPFilter „(&(objectCategory=person)(objectClass=user)(primaryGroupID=513))“
# Alle Benutzer anzeigen die als primaere Gruppe NICHT „Domaenen-Benutzer“ eingetragen haben
Get-ADUser –LDAPFilter „(&(objectCategory=person)(objectClass=user)(!primaryGroupID=513))“
# Alle direkten und verschachtelten Gruppenmitgliedschaften eines Benutzers anzeigen
Get-ADAccountAuthorizationGroup Yusuf
# Alle direkten Mitglieder einer Gruppe anzeigen
Get-ADGroupMember
# Alle direkten und verschachtelten Mitglieder einer Gruppe anzeigen
Get-ADGroupMember
# Alle direkten, verschachtelten und aktive (keine deaktivierten) Mitglieder einer Gruppe anzeigen
Get-ADGroupMember
# Alle fuer das System wichtigen Gruppen anzeigen
Get-ADGroup -Filter { isCriticalSystemObject -eq $true }
# Eine Gruppe verschieben
Move-ADObject "CN=Gruppe,OU=Techniker,DC=Domaene,DC=de" -TargetPath "OU=NeueOU,DC=Domaene,DC=de"
# Eine Beschreibung fuer eine Gruppe setzen
Set-ADGroup
# Eine Verteilergruppe in eine Sicherheitsgruppe aendern
Set-ADGroup
# Den Gruppenbereich einer Gruppe auf Global aendern
Set-ADGroup
# Den Gruppenbereich und den Gruppentyp einer Gruppe aendern
Set-ADGroup
Anstatt Universal kann Global oder DomainLocal angegeben werden.
# Mitglieder zu einer Gruppe hinzufuegen
Add-ADGroupmember
# Eine Gruppe loeschen
Remove-ADGroup
# Einen Benutzer aus einer Gruppe entfernen
Remove-ADGroupMember
# Alle direkten Gruppenmitgliedschaften eines Sicherheitsprinzipals (Benutzer, Gruppe, Computer) anzeigen
Get-ADPrincipalGroupMembership
AD-PowerShell „Organisationseinheit“ Befehle
# Mit dem Cmdlet Get-ADOrganizationalUnit werden folgende Werte angezeigt: City, Country, DistinguishedName, LinkedGroupPolicyObjects, ManagedBy, Name, ObjectClass, ObjectGUID, PostalCode, State, StreetAddress. Alle Eigenschaften einer OU lassen sich mit dem Parameter –Properties 1 artikeltmp.txt bak.html bastel.sh daten inc menuetmp.txt test.html wissen.html anzeigen.
# Alle OUs in einer Domaene anzeigen
Get-ADOrganizationalUnit -Filter {Name -like „*“} | FT Name, DistinguishedName -A
# Den Inhalt einer bestimmten OU anzeigen
Get-ADObject -Filter {Name -Like "*"} -Searchbase „OU=
# Eine OU erstellen. Dabei ist die Option Objekt vor zufaelligem Loeschen schuetzen automatisch aktiviert.
New-ADOrganizationalUnit -Name Techniker -Path "OU=IT,DC=Domaene,DC=de"
# Die Option Objekt vor zufaelligem Loeschen schuetzen von einer OU entfernen
Set-ADOrganizationalUnit „
# Die Option Objekt vor zufaelligem Loeschen schuetzen auf einer OU aktivieren
Set-ADOrganizationalUnit „
# Die Option Objekt vor zufaelligem Loeschen schuetzen auf allen OUs einer Domaene aktivieren
Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true
# Eine OU verschieben
Move-ADObject "aktuelle DN der OU" -TargetPath "Ziel-DN"
Ist die Option Objekt vor zufaelligem Loeschen schuetzen aktiviert, erhaelt man eine Fehlermeldung.
# Eine OU samt dem kompletten Inhalt loeschen
Remove-ADOrganizationalUnit Test -Recursive
Ist die Option Objekt vor zufaelligem Loeschen schuetzen aktiviert, erhaelt man eine Fehlermeldung.
# Einen Benutzer aus einer OU loeschen
Remove-ADObject „CN=Yusuf Dikmenoglu,OU=IT,DC=Domaene,DC=de“
# Alle Objekte innerhalb einer OU in eine andere OU verschieben
Get-ADObject -Filter {Name -Like "*"} -Searchbase „OU=AlteOU,DC=Domaene,DC=de“ -SearchScope OneLevel | Move-ADObject -TargetPath "OU=NeueOU,DC=Domaene,DC=de"
# Eine OU umbenennen
Rename-ADObject "OU=AlterName,DC=Domaene,DC=de" -NewName
# Eine Beschreibung fuer eine OU vergeben
Set-ADOrganizationalUnit
AD-PowerShell „Computerobjekt“ Befehle
# Mit dem Cmdlet Get-ADComputer werden diese Werte angezeigt: DistinguishedName, DNSHostName, Enabled, Name, ObjectClass, ObjectGUID, sAMAccountName, ObjectSID, userPrincipalName.
# Alle Computerkonten innerhalb einer Domaene auflisten
Get-ADComputer –Filter {Name –Like “*”}
# Ein Computerobjekt in eine andere OU verschieben
Get-ADComputer
# Alle Computer anzeigen, die sich seit 180 Tagen nicht am AD angemeldet haben:
Search-ADaccount -AccountInactive -Timespan 180 -ComputersOnly
# Mit dem folgenden Befehl wird die maximale Anzahl an Clients die ein Domaenen-Benutzer zur Domaene hinzufuegen kann erhoeht
Set-ADDomain blog.dikmenoglu.de -Replace @{"ms-ds-MachineAccountQuota"="333"}
Siehe auch:
Dazugehoerende Dateien
artikel.txt
identity,streetaddress,city,postalcode,title,company,department,officephone,fax,MobilePhone
pascal.roessner,"Am Weser-Terminal 1",Bremen,28217,Systemadministrator,"hmmh multimediahaus AG",Systemadministration,04942169650164,+4942169650190,017624293862
hermann.schmidt,"Am Weser-Terminal 1",Oldenburg,22222,"Head of OL","hmmh multimediahaus AG",Systemadministration1019,04942169650165,04942169650190,01774300341
christian.nerlich,"Am Weser-Terminal 1",Berlin,33333,"Head of B","hmmh multimediahaus AG",Systemadministration,+49421696162,+4942169650190,666
PS C:UsersAdministrator> Import-Csv C:Usershermann.schmidtDesktopdaten.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress
-city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager-OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone }
http://technet.microsoft.com/en-us/library/ee617241.aspx
http://technet.microsoft.com/de-de/library/ee617215%28en-us%29.aspx
Die "" sind nicht notwendig, damit ö ä ü sauber importiert werden, muss die csv Datei als unicode gespeichert werden
PS C:UsersAdministrator> $datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usersadministrator.HMMHDesktopimportne*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimportne*.csv C:Usershermann.schmidtDesktopdone
Mit Hilfe der Powershell können auch E-Mails mit oder ohne Dateianhang (Attachment) versendet werden. Soll eine E-Mail ohne Anhang versendet werden, kann auf die Zeilen $filename, $att und $mailmessage.Attachments.Add($att) verzichtet werden.
function sendmail($body)
{
$filename = "Pfad zum Dateianhang"
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$att = new-object Net.Mail.Attachment($filename)
$SmtpClient.Host = "Name des Mailservers"
$mailmessage.from = "Absenderadresse"
$mailmessage.To.add("Empfängeradresse")
$mailmessage.Subject = “Betreff der Nachricht”
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$mailmessage.Attachments.Add($att)
$smtpclient.Send($mailmessage)
}
$body = "Irgendein Text oder der Inhalt einer Variable"
Dazugehoerende Dateien
artikel.txt
pascal.roessner,"Am Weser-Terminal 1",Bremen,28217,Systemadministrator,"hmmh multimediahaus AG",Systemadministration,04942169650164,+4942169650190,017624293862
hermann.schmidt,"Am Weser-Terminal 1",Oldenburg,22222,"Head of OL","hmmh multimediahaus AG",Systemadministration1019,04942169650165,04942169650190,01774300341
christian.nerlich,"Am Weser-Terminal 1",Berlin,33333,"Head of B","hmmh multimediahaus AG",Systemadministration,+49421696162,+4942169650190,666
PS C:UsersAdministrator> Import-Csv C:Usershermann.schmidtDesktopdaten.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress
-city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager-OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone }
http://technet.microsoft.com/en-us/library/ee617241.aspx
http://technet.microsoft.com/de-de/library/ee617215%28en-us%29.aspx
Die "" sind nicht notwendig, damit ö ä ü sauber importiert werden, muss die csv Datei als unicode gespeichert werden
PS C:UsersAdministrator> $datum=Get-Date -format dd.MM.yyyy ; Import-Csv C:Usersadministrator.HMMHDesktopimportne*.csv |Foreach { Set-ADUser -Identity $_.Identity -StreetAddress $_.streetaddress -city $_.city -postalcode $_.postalcode -company $_.company -Department $_.department -Manager $_.manager -OfficePhone $_.officephone -Fax $_.fax -MobilePhone $_.MobilePhone ; echo "$? $_.Identity" >> c:usershermann.schmidtDesktoplogs$datum.log } ; Move-Item C:Usershermann.schmidtDesktopimportne*.csv C:Usershermann.schmidtDesktopdone
Mit Hilfe der Powershell können auch E-Mails mit oder ohne Dateianhang (Attachment) versendet werden. Soll eine E-Mail ohne Anhang versendet werden, kann auf die Zeilen $filename, $att und $mailmessage.Attachments.Add($att) verzichtet werden.
function sendmail($body)
{
$filename = "Pfad zum Dateianhang"
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$att = new-object Net.Mail.Attachment($filename)
$SmtpClient.Host = "Name des Mailservers"
$mailmessage.from = "Absenderadresse"
$mailmessage.To.add("Empfängeradresse")
$mailmessage.Subject = “Betreff der Nachricht”
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$mailmessage.Attachments.Add($att)
$smtpclient.Send($mailmessage)
}
$body = "Irgendein Text oder der Inhalt einer Variable"
Dazugehoerende Dateien
artikel.txt
Rechte auf ein Postfach auslesen
Rechte auf ein Postach setzen in diesem Fall Editor
Dazugehoerende Dateien
artikel.txt
Get-MailboxFolderPermission -Identity bjoern.portillo@hmmh.de:Kalender
Rechte auf ein Postach setzen in diesem Fall Editor
Set-MailboxFolderPermission -Identity bjoern.portillo@hmmh.de:Kalender -User wiebke.huelsmann@hmmh.ag -AccessRights Editor
Dazugehoerende Dateien
artikel.txt
Postfach exportieren
Ein Postfach exportieren
Alle Postfaecher Exportieren
Status des Exports
Postfach importieren
Fertige Postfaecher aus der Queue entfernen
Quelle http://www.security-blog.eu/2011/06/10/exchange-2010-sbs-2011-mailboxen-exportieren-importieren-bulk-massen-alle/
Dazugehoerende Dateien
artikel.txt
Ein Postfach exportieren
New-MailboxExportRequest -Mailbox User01 -FilePath "\adminpcexportUser01.pst"
Alle Postfaecher Exportieren
foreach ($i in (Get-Mailbox)) { New-MailboxExportRequest -Mailbox $i -FilePath "\adminpcexport$($i.Alias).pst" }th "\adminpcexportUser01.pst"
Status des Exports
Get-MailboxExportRequest | Get-MailboxExportRequestStatistics
Postfach importieren
New-MailboxImportRequest –Mailbox User01 –FilePath "\adminpcexportUser01.pst"
Fertige Postfaecher aus der Queue entfernen
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
Quelle http://www.security-blog.eu/2011/06/10/exchange-2010-sbs-2011-mailboxen-exportieren-importieren-bulk-massen-alle/
Dazugehoerende Dateien
artikel.txt