===== 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) } }