===== PowerShell und CMD ===== ==== PS Skriptausführung zulassen ==== Die PowerShell verhindert zunächst das Auführen von Skripten. Dies kann über folgendes Kommando beseitigt werden:\\ Lokale Skripte zulassen, von fremden Rechnern nur signierte Skripte Set-ExecutionPolicy RemoteSigned Sicherheitsstufe wieder anheben: Set-ExecutionPolicy AllSigned ==== Dienste finden, beenden und neu starten ==== PS > get-service | where-object{ $_.status -eq "Running" -and $_.Displayname -like "*sqlexpress*"} Status Name DisplayName ------ ---- ----------- Running MSSQL$SQLEXPRESS SQL Server (SQLEXPRESS) PS > get-service | where-object{ $_.Displayname -like "*sqlexpress*"} | stop-service PS > get-service | where-object{ $_.Displayname -like "*sqlexpress*"} | start-service es funktioniert auch PS > stop-service -Displayname *sqlexpress* PS > start-service -Displayname *sqlexpress* ==== Das ganze alternativ mit cmd ==== C:\>net start Folgende Windows-Dienste sind gestartet: ... Shellhardwareerkennung Sicherheitskontenverwaltung SQL Server (SQLEXPRESS) SQL Server VSS Writer Systemereignisbenachrichtigung Systemwiederherstellungsdienst Taskplaner ... Der Befehl wurde erfolgreich ausgeführt. C:\>net stop "SQL Server (SQLEXPRESS)" SQL Server (SQLEXPRESS) wird beendet. SQL Server (SQLEXPRESS) wurde erfolgreich beendet. C:\>net start "SQL Server (SQLEXPRESS)" SQL Server (SQLEXPRESS) wird gestartet. SQL Server (SQLEXPRESS) wurde erfolgreich gestartet. ==== Dienste verwalten mit cmd ==== C:\>sc ==== Datum formatiert in Variable speichern und als Dateiname verwenden ==== PS > $a = get-date -uformat "%Y%m%d" PS > $b = $a + "_Dateiname.txt" PS > $b 20110829_Dateiname.txt PS > copy-item Dateiname.txt -destination $b ==== Excel-Dateien erstellen und befüllen ==== $a = New-Object -comobject Excel.Application $a.Visible = $True $b = $a.Workbooks.Add() $c = $b.Worksheets.Item(1) $c.Cells.Item(1,1) = "A value in cell A1." $b.SaveAs("C:\Scripts\Test.xls") $a.Quit() ==== CSV-Datei einlesen und ausgewählte Spalten als GridView darstellen ==== PS > Import-Csv .\attribTable.csv -delimiter ";" | Select-Object -p x ,style, fill, stroke | Out-GridView Die hier ausgelesene CSV-Datei hatte folgende Struktur: x;style;fill;pattern;end;stroke;size;transparency;points;... line;True;True;True;True;True;False;False;False;False;Fal... polyline;True;False;True;False;True;True;True;True;True;T... polygon;True;False;True;False;True;False;True;True;False;... ==== Datum mit date ermitteln und umformatieren ==== REM date /t gibt ein Datum in der Form DD.MM.JJJJ REM mit Hilfe der FOR-Schleife wird dieses Datum an den Punkten (delims=.) aufgetrennt und REM die einzelnen Bestandteile neu angeordnet wieder ausgegeben (set DATUM=%%c%%b%%a). REM set DATUM=%%c%%b%%a ergibt ein Datum in der Form JJJJMMDD FOR /F "tokens=1,2,3 delims=. " %%a IN ('date /t') DO set DATUM=%%c%%b%%a ==== Zerlegen von Ausgaben auf der Kommandozeile ==== Folgende Kommandozeile ruft den Befehl **dir *.dll** auf, und reduziert über eine Pipe-Umleitung an **findstr /i "text"** den Umfang der Ausgabe auf die Zeilen, die den String "text" enthalten. Über die for-Schleife wird nun jede Zeile in bis zu 7 Teile zerlegt, wobei mit "delims=.: " der Punkt, der Doppelpunkt und das Leerzeichen als Trennzeichen definiert werden. Es sind noch mehr Teile denkbar, die genauen Grenzen können über "for /?" abgefragt werden. Am Ende kann auf die einzelnen Bestandteile über die implizit definierten Variablen %i, %j, %k... zugegriffen werden. Mit welchem Namen die Variablenreihe beginnt wird direkt hinter delims= mit %i festgelegt. HINWEIS: Um dies in einer batch-Datei zu verwenden müssen alle % in %% umgewandelt werden. REM for /f "tokens=1,2,3,4,5,6,7 delims=.: " %i in ('dir *.dll^|findstr /i "text"') do @echo %i %j %k %l %m %n %o REM ==== Admin Shell CMD mit anderen Farben starten ==== * Batchfile erstellen mit folgendem Inhalt @echo off whoami /groups | find "S-1-16-12288" > nul if not errorlevel 1 ( color cA ) * Festlegen, dass das Batchfile beim starten einer commandline cmd gestartet wird. Hierzu in der Registry folgende Zeichenkette eintragen: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun = Fertig! ==== WIN32API Funktionen in der Powershell nutzen ==== Eine Klasse "Win32" wird hier innerhalb eines HERE-DOCs (@''@) angelegt und mittels Add-Type als neuer Typ registriert.\\ Anschließend kann die public-Methode genutzt werden: $code = @' using System; using System.Runtime.InteropServices; public static class Win32{ [DllImport("kernel32.dll", SetLastError=true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool Beep(uint dwFreq, uint dwDuration); } '@ Add-Type $code [Win32]::Beep(440, 500) foreach ($i in 2000..3000) { if($i % 100) {} else { Write-Host "$i"; [Win32]::Beep($i,200) } }