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.

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

Alle Unterordner eines Verzeichnisses packen

Manchmal muss man schnell und einfach Platz sparen. Oder man muss alle Unterordner eines Verzeichnisses sichern/archivieren.

Unter Windows kann man das gut mit der frei Software 7-zip erledigen.

Im folgenden Script werden alle Unterordner über eine for-Schleife ermittelt. In dieser wird dann der Pack-Befehl ausgeführt und zusätzlich der Löschbefehl für den entsprechenden Ordner. Die Verknüpfung mit „&&“ ist erforderlich, da die Windows-for-Schleife nur eine Zeile verarbeien kann. 🙁

@echo off
REM Ziel des Backup-Archives
SET ArbeitsOrdner=C:OrdnerEnthaltendesVerzeichnis
REM Block fuer Packer-Konfiguration
set ZIPExe=C:Programme7-Zip7z.exe
set ZipFileExt=7z
set ZipFilePWD=
REM -r = rekursiv, -mhe = Header-Verschlüsselung, -ms=off = kein Solid-Modus, -mx9 = Kompressionsstufe 9, -p = Passwort
set globalParams=-r -mhe -mx9 -ms=off

REM Für alle Ordner im Arbeitsordner, Pack-Befehl aufrufen && Alte Dateien löschen
for /D %%i in (%ArbeitsOrdner%*) do (
  "%ZIPExe%" a -t%ZipFileExt% "%%i.%ZipFileExt%" %globalParams% "%%i" && rmdir /S /Q %%i
)

Geplanten Task per Kommando-Zeile anlegen

Wenn man viele einzelne „Geplante Tasks“ benötigt, kann man sich diese auch per Kommandozeile anlegen:

SCHTASKS /CREATE /RU "NT AUTHORITYSYSTEM" /SC EINMAL /SD tt/mm/jjjj /ST 07:15 /TN MeinAutomatischErstellterTask /TR MeinAuszuführenderBefehl

Diese Zeile erstellt lokal einen neuen Task für den Benutzer „SYSTEM“. Dieser benötigt kein Passwort und ist für lokale Arbeiten super geeignet. Der Task wird nur einmal gestartet, nämlich um 7:15 Uhr. Warum dann aber einen Task? Weil man den dann für eine bestimmte Zeit terminieren und sich dann abmelden kann. Es muss also keine User-Session bestehen bleiben. Das Datum muss nicht angegeben werden, da standardmäßig der aktuelle Datum eingetragen wird. Wenn der Zeitpunkt der Ausführung vor dem Zeitpunkt der Erstellung liegt, gibt es eine Warnung, der Task wird aber trotzdem angelegt.

Weitere Optionen für das Erstellen kann man sich auch anzeigen lassen:

SCHTASKS /CREATE /?

Listen zeilenweise verarbeiten

Manchmal möchte man einfach eine Liste von Hosts in irgendwelchen Befehlen verarbeiten. Dann hilft diese einfache Schleife:

SET host=Clients.txt
for /f %%i in (%host%) do echo %%i

In der „host“-Datei Clients.txt sind die Rechnernamen enthalten, die in der for-Schleife verarbeitet werden sollen. Das Beispiel-echo ist durch den gewünschten Befehl zu ersetzen.

Inhalt der Datei Clients.txt:

Rechnername1
Rechnername2
Rechnername3
Rechnername4

Zeitstempel formatieren

Ich verwende häufig Zeitstempel für die Benamung von Logdateien. Da der original Zeitwert von Windows dafür nicht brauchbar ist, formatiere ich ihn mir um.

Windows-Zeitstempel zerlegen

REM Erstmal den Originalwert vom System aufnehmen, ...
SET zeit=%time%
REM ... dann die Stunde extrahieren, ...
SET stunde=%time:~0,2%
REM ... die evtl. vorhandenen Leerzeichen durch eine Null ersetzen, ...
SET stunde=%stunde: =0%
REM ... dann die Minuten extrahieren, ...
SET minute=%time:~3,2%
REM ... und wieder die evtl. vorhandenen Leerzeichen durch eine Null ersetzen
SET minute=%minute: =0%

Zeitstempel neu zusammensetzen

Dadurch, dass man die einzelnen Bestandteile der Zeit jetzt in separaten Variablen hat, kann man diese nach eigenen Wünschen wieder zusammensetzen.

Z.B.

SET Zeit=%stunde%-%minute%.

Dateinamen zerlegen

Für die folgenden beispielhaften Ergebnisse:

Laufwerk: D:
Dateipfad: TestProbe
Dateiname: Versuch
Dateierweiterung: .bak

benötigt man folgende Zeilen:

for %%f in (*.bak) do echo Laufwerk: %%~df
for %%f in (*.bak) do echo Dateipfad: %%~pf
for %%f in (*.bak) do echo Dateiname: %%~nf
for %%f in (*.bak) do echo Dateierweiterung: %%~xf