Ordner mit Optionen via Powershell anlegen

Zum Anlegen von Ordner per Powershell-Script möchte verwende ich gerne wenige Zeilen. Daher hier ein Beispiel, wie man einen versteckten Ordner mit nur einem Befehl anlegt. Ich lege dazu einen Unterordner im User-Profil-Verzeichnis des aktuellen Benutzers an.

Ausführliche Schreibweise

Hier werden Variablen genutzt und jeder Schritt einzeln erledigt.

# Ordnerpfad 
$fpath="$env:USERPROFILE\BlaBlubb" 
# Ordner anlegen 
new-item $fpath  -ItemType Directory  
# Ordner als Objekt einlesen 
$f=get-item $fpath # Attribut versteckt setzen $f.attributes="Hidden"

Kurze Schreibweise

Hier verwende ich noch den Pfad als Variable, setze die Attribute aber gleich durch Übergabe des angelegten Ordners per Pipe an den nächsten Befehl.

# Ordnerpfad
$fpath="$env:USERPROFILE\BlaBlubb"
# Ordner mit Attribut anlegen
new-item $fpath -ItemType Directory | %{$_.Attributes = "hidden"} 

Einzeiler

Hier wird nur noch ein Alias (weniger Parameter) inkl. Pipe genutzt.

# Mach jetzt
mkdir $env:USERPROFILE\BlaBlubb | %{$_.Attributes = "hidden"}

Alle weiteren Details zum Powshell CmdLet New-Item können im Microsoft TechNet nachgelesen werden.

IPFire Webseite zeitweise auf red freischalten

Ich benutze gerne IPFire, um mal schnell ein Testnetz aufzusetzen. Das red-Interface kommt dann ins vorhandene Gästenetz und das green-Interface stellt das Testnetz dar. Da das Testnetz aber noch keine Computer hat, habe ich nach der Installation keine Oberfläche, um ipfire konfigurieren zu können, da diese standardmäßig nur vom green-Interface aus erreichbar ist. Das kann man aber über einen Einzeiler zeitweise (bis zum nächsten Neustart) ändern, um die Konfiguration über die Management-Oberfläche vornehmen zu können.

Dazu muss man:

  • die IP seines eigenen PCs oder Netzwerkes (hier: 192.168.1.77) und
  • die IP des red-Interfaces der IPFire-Installation (hier: 192.168.0.101) wissen.

Seine eigene IP-Adresse bekommt man über den Befehl ipconfig in einer Kommandozeile unter Windows heraus:

C:\Users>ipconfig

Windows-IP-Konfiguration


Ethernet-Adapter LAN-Verbindung:

   Verbindungsspezifisches DNS-Suffix: domain.local
   IPv4-Adresse  . . . . . . . . . . : 192.168.1.77
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : 192.168.1.1


Dann kann man sich mit dem bei der IPFire-Installation vergebenen Root-Kennwort an der Konsole anmelden und einen iptables-Eintrag vornehmen, der die https-Managment-Webseite auf dem red-Interface freischaltet.

warnung Das sollte man natürlich nur bei internen Netzwerken machen! Wer ipfire als Internet-Zugangsrouter verwendet, schaltet das Management damit in das Internet frei!

iptables -A INPUTFW -s 192.168.1.77/32 -d 192.168.0.101/32 -p tcp -m tcp --dport 444 -j ACCEPT

Erklärung der Parameter:

  • iptables = das Firewall-Programm
  • -A INPUTFW = die Firewall-Kette, in die diese Ausnahme eingetragen wird (werden muss)
  • -s 192.168.1.77/32 = der eine Host (/32) mit der IP 192.168.1.77, der diese Ausnahme nutzen darf (alternativ schaltet man das ganz Sub-Netz frei: -s 192.168.1.0/24)
  • -d 192.168.0.101/32 = die IP-Adresse des red-Interfaces der ipfire-Installation
  • -p tcp -m tcp = es wird das TCP-Protokoll benutzt
  • –dport 444 = der Port, der auf dem red-Interface freigeschaltet wird (standardmäßig verwendet ipfire für das Management per https diesen Port)
  • -j ACCEPT = Datenpakete auf einer Verbindung mit diesen Einschränkungen zulassen.

infoDa diese Konfiguration live vorgenommen und nicht abgespeichert wird, ist diese nach einem Neustart nicht mehr vorhanden! Das ist so gewollt, da die vollständige Konfiguration danach über das Web-Interface erfolgen kann.

Netzwerk-Kategorie in Windows Server 2012 R2 ändern

In Windows Server 2012 R2 ist es leider nicht mehr so einfach über die Oberfläche möglich die Einstufung der Netzwerk-Kategorie zu ändern, wie dies noch unter Windows 7 möglich ist (siehe hier bei TippScout).

Glücklicherweise habe ich in Haikos Blog den entsprechenden Tipp gefunden, wie es über die PowerShell funktioniert:

Get-NetConnectionProfile
Set-NetConnectionProfile –InterfaceInxe # –NetworkCategory Private

Für das #-Zeichen muss der verwendete Index-Wert angegeben werden, den man aus der Ausgabe des ersten Befehls bekommt:

W2k12R2_SetNetConnectionCategory

Danach ist das Netzwerk entsprechend eingestellt …

W2k12R2_NetConnectionCategory

… und es funktioniert auch wieder die Remote-Desktop-Verbindung.

Danke Heiko

Regular Expressions

Das ist eine Zusammenfassung für von mir häufig benötigten Regular Expressions. Ausdruck Bedeutung

.            Beliebiges Zeichen
*            Vorheriges Zeichen beliebig of
?            Vorheriges Zeichen ein- oder keinmal
+            Vorheriges Zeichen ein- oder mehrmals
^<Ausdruck>  Ausdruck am Zeilenanfang
<Ausdruck>$  Ausdruck am Zeilenende
[abc]        Zeichen aus der Auswahl
[a-z]        Zeichen aus dem Bereich
!            Negierung

Datei-Sets umbenennen

Möchte man viele Dateiennach einem gleichlautenden Muster umbennen kann das je nach Menge ganz schön aufwendig werden. Hier beschreibe ich, wie man ganze Datei-Sets umbenennen kann.

Wenn viele Dateien automatisch erzeugt werden, habe sie meistens auch einen gleichlautenden Namen. Z.B.:

Server:/tmp# ll *Datensicherung*
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW30-Datensicherung-20100726.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW31-Datensicherung-20100802.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW32-Datensicherung-20100809.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW33-Datensicherung-20100816.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW34-Datensicherung-20100823.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW35-Datensicherung-20100830.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW36-Datensicherung-20100906.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW37-Datensicherung-20100913.7z

In dem gezeigten Fall möchte ich mit dem Datum beginnen und die Kalenderwoche nach hinten verschieben. Für den Linux-Admin gibt es da den Befehl mmv aus dem gleichnamigen Debian-Paket:

Server:/tmp# mmv -v "*-Datensicherung-*.7z" "#2-Datensicherung-#1.7z"
KW30-Datensicherung-20100726.7z -> 20100726-Datensicherung-KW30.7z : done
KW31-Datensicherung-20100802.7z -> 20100802-Datensicherung-KW31.7z : done
KW32-Datensicherung-20100809.7z -> 20100809-Datensicherung-KW32.7z : done
KW33-Datensicherung-20100816.7z -> 20100816-Datensicherung-KW33.7z : done
KW34-Datensicherung-20100823.7z -> 20100823-Datensicherung-KW34.7z : done
KW35-Datensicherung-20100830.7z -> 20100830-Datensicherung-KW35.7z : done
KW36-Datensicherung-20100906.7z -> 20100906-Datensicherung-KW36.7z : done
KW37-Datensicherung-20100913.7z -> 20100913-Datensicherung-KW37.7z : done

Dabei repräsentieren die Bezeichnungen „#1“ und „#2“ im zweiten Teil des Befehls die entsprechenden Sternchen-Bereiche (in der Reihenfolge des Auftretens) aus dem ersten Teil des Befehls.

ls-Ausgabe nach dem Befehl:

Server:/tmp# ll *Datensicherung*
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100726-Datensicherung-KW30.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100802-Datensicherung-KW31.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100809-Datensicherung-KW32.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100816-Datensicherung-KW33.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100823-Datensicherung-KW34.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100830-Datensicherung-KW35.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100906-Datensicherung-KW36.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100913-Datensicherung-KW37.7z

Größe von Ordner ermitteln

PMachmal sucht man nach Speicherfressern. Dann kann man sich über die folgende Zeile die Größe aller Unterordner des angegebenen Ordners (hier am Beispiel „var“) anzeigen lassen:

find /var/ -maxdepth 1 -type d -exec du -sh '{}' ';'

Diese sucht im angegebenen Ordner nach Unterordnern aber nur eine Ebene und führt für jedes Ergebnis eine Größenberechnung per „du“ durch.

Prozesse mit hoher CPU-Last ermitteln

Da die Ausgabe von „top“ nicht immer die gewünschten Informationen liefert, kann man sich die Prozesse mit hoher CPU-Last auch über „ps“ mit Sortierung anzeigen lassen:

ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

Damit werden alle Prozesse, aber nur die angegebenen Parameter angezeigt, nach Spalte aufsteigend sortiert und die letzten 10 Zeilen wiedergegeben. (Danke an René)

Wer möchte, kann sich das ganze auch als Alias in seine .bashrc eintragen.

alias topten='ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10'

Unterordner packen und löschen

Die folgende Befehlszeile sucht im aktuellen Ordner alle Unterordner (keine Dateien) und packt diese als <Ordnername>.tar.gz und löscht den Originalordner.

for Ordner in $(find -maxdepth 1 -type d); do if [ $Ordner != "." ]; then tar -czf $Ordner.tar.gz $Ordner; rm -rf $Ordner; fi; done;

Automatischen Start des X-Managers deaktivieren

Manch einer (wie ich z.B.) betreibt Server auf denen er ab und zu auch mal eine grafische Oberfläche benötigt. Trotzdem soll der Display-Manager nicht ständig laufen. Ist ja auch ein Server. Deswegen deaktivere ich den Dienst mit

update-rc.d -f gdm remove
Removing any system startup links for /etc/init.d/gdm ...
    /etc/rc0.d/K01gdm
    /etc/rc1.d/K01gdm
    /etc/rc2.d/S30gdm
    /etc/rc3.d/S30gdm
    /etc/rc4.d/S30gdm
    /etc/rc5.d/S30gdm
    /etc/rc6.d/K01gdm

für den Gnome Desktop Manger. Für KDE-Fans gilt das gleiche (kdm). Wenn ich die grafische Oberfläche jetzt doch brauche, kann ich ihn immer noch mit

/etc/init.d/gdm start

starten.