Die powershell-Version
Get-Host
Aktivieren der Ausführungsrichtlinie
Set-ExecutionPolicy unrestricted
Anzeigen der Eigenschaften und Methoden
get-member -i $object
$object | get-member

$object | get-member - membertype property
DB-Übersicht nach Größe, Ausgabe in Excelformat
Get-ChildItem . -include *.mdf, *.ndf, *ldf -exclude temp*,auswahl* -recurse -force | sort name | select name, length | Export-Csv \\server\temp\dateiname.csv
Umbennen von Dateien
Get-ChildItem | % {$Neu = $_.Name; Rename-Item $_.Name -newname $Neu.ToUpper()}
Suchen und Ersetzen mit zwei Dateien (Quelle und Ziel): Einfach
Hier die einfache Variante für kleine Dateien. Hier wird die ganze Datei in den Speicher geladen.
$input = get-content "d:\temp\input.xml"
$output = "d:\temp\output.xml"
if (Test-Path $output) { Remove-Item $output -force}
$input | foreach {
if ($_ -match "Locationfile://localhost/G:") {
$_ = $_ -replace "file://localhost/G:/xx/yy", "file://server/yy"
$_
}
$_ | out-file $output -append
}

Zeilenweise lesen einer Textdateo
$datei = Get-content C:\temp\datei.txt $datei | % {
$_
}

Suchen und Ersetzen mit Einfügen von weiteren Zeilen
Hier die einfache Variante für kleine Dateien. Hier wird die ganze Datei in den Speicher geladen.
(gc $fileName) -replace "pattern", "$&`nText To Add" | sc $fileName

Suchen und Ersetzen mit zwei Dateien (Quelle und Ziel): Schneller bei großen Dateien
Hier die Variante für große Dateien. Diese Variante ist wesentlich schneller, da nur zeilenweise gearbeitet wird.
$reader = [System.IO.File]::OpenText("d:\temp\input.xml")
$writer = New-Object System.IO.StreamWriter("d:\temp\output.xml")
while (!$reader.EndOfStream) {
$line = $reader.ReadLine()
if ($line -match "Locationfile://localhost/G:") {
$line = $line -replace "file://localhost/G:/xx/yy", "file://server/yy"
$line
}
$writer.writeline($line)
}
$reader.Close()
$writer.Close()

Spalten in ganzer Breite
| | ft -autosize | Out-String -Width 4096
SED Suchen / Ersetzen
cat .\input.txt | % {$_ -replace ".txt:",".txt "}
Datei nach Spalten verarbeiten
Import-Csv .\output.txt -delimiter ' ' | sort date, time -desc | select -first 1 | ft
IP auf dem Node suchen
@echo off
set suchip=%1
if %1=="" exit 0
echo logfile date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken> i:\temp\check_ip.txt
findstr /s /i /c:"%suchip%" \\server1\c$\logs\iis\*.* >> c:\temp\check_ip.txt
findstr /s /i /c:"%suchip%" \\server2\c$\logs\iis\*.* >> c:\temp\check_ip.txt
findstr /s /i /c:"%suchip%" \\server3\c$\logs\iis\*.* >> c:\temp\check_ip.txt
findstr /s /i /c:"%suchip%" \\server4\c$\logs\iis\*.* >> c:\temp\check_ip.txt
IIS Log auswerten
select-string -path c:\logs\*.txt -pattern "192\.168\.17\.54(.)*207\.68\.172\.246" -allmatches | ft filename,linenumber,@{"Label"="Time";"Expression"={$_.line.replace($_.matches[0],"")}} –auto
Mails schicken
Send-MailMessage -to "heinz.name@mailserver.de" -from "hertha.name@mailserver.de" -subject "Testmail" -SmtpServer smtp.server.de
grep
Einfach: Select-String -Path C:\temp\*.log -Pattern "Contoso"
oder rekursiv: Get-ChildItem C:\temp -Filter *.log -Recurse | Select-String "Contoso"
tail
Get-Content -Path log.txt -tail 1
Get-Content -Path log.txt -wait
RegEx Like Perl /s /m
[regex]::match(“$zeile”,'[^\\]+’).value
[regex]::replace("$zeile",'^.*[\\\/]','')
Ablaufdatum von Zertifikaten
Set-Location Cert:\LocalMachine\My
$jetzt = Get-Date -Format "dd.MM.yyyy hh:mm:ss"
Get-ChildItem | foreach {
$Diff = New-TimeSpan -Start $jetzt -End $_.GetExpirationDateString()
if ($Diff.Days -lt 50) {$Diff.Days}
}
Call By Reference
function GetNextArrayIndex {

param
(
$iMax,
[ref]$iNdex
)

if ($iNdex.Value -ge $iMax-1) {
$iNdex.Value = 0
}
else {
$iNdex.Value ++
}
return $iNdex.Value
}

$ContentDBs = @("DB01","DB02","DB03","DB04")
$AI = -1
For ($i = 0; $i -lt 100; $i++) {
$ContentDBs[(GetNextArrayIndex -iMax $ContentDBs.Count -iNdex ([ref]$AI))]
}
Doubletten aus Textdatei entfernen
Get-content "c:\quell.txt" | sort | get-unique | out-file "c:\ziel.txt"