Category Archives: PowerShell

Cookie Nutzung mit PowerShell Invoke-WebRequest

Wenn man Cookies von einem WebRequest zu anderen übergeben möchte geht das wie folgt:

$LoginXML = Invoke-WebRequest $LoginUrl -Method Post -Body "Some=Post&Variable=true" -SessionVariable session
$UsersXML = Invoke-WebRequest $OtherUrl -WebSession $session

Die Cookies werden dann in der Variable $session gespeichert und können mit der Option -WebSession weiterverwendet werden.

Leave a Comment

Filed under PowerShell, Windows

Löschen aller Tabellen in einer MSSQL Datenbank

Ich musste gerade mal auf die schnelle alle Tabellen in einer  MSSQL Datenbank löschen. Hier für gibts zig SQL Scripte dafür im Internet, aber eigentlich geht das viel schneller mit der integrierten Powershell:

1. Zu der Auflistung der Tabellen navigieren, Rechtsklick drauf und ‚PowerShell starten‘ auswählen:

2. Nun eingeben:

ls | %{$_.Drop()}

Das wars auch schon 🙂 Nun werden alle Tabellen in der ausgewählten Datenbank gelöscht.

2 Comments

Filed under PowerShell, Windows

SCP Upload via PSCP und PowerShell

Ich mag ja Batch (CMD.exe) sowas von garnicht, inzwischen schreibe ich alles in PowerShell. Hier mal ein kurzes Beispiel für einen SCP Upload auf ein Unix System mit Hilfe von pscp.exe.
Dies ist die Command Line SCP Version von Putty und lässt sich hier runterladen.

$PathToPSCPEXE = "C:\Program Files (x86)\Putty\pscp.exe"
$PathToPrivateKey = '"C:\Path\To\PrivateKey.ppk"'
$PrivateKeyPassPhrase = "PASSPHRASE"
$UserName = "root"
$UploadHostName = "hostname.example.org"
$PathToUploadFile = "C:\Path\To\File.txt"
$UploadPath = "/root/" # With closing "/"!
[Array]$Arguments = "-i", $PathToPrivateKey, "-pw", $PrivateKeyPassPhrase, $PathToUploadFile,($UserName,"@",$UploadHostName,":",$UploadPath,$PathToUploadFile.Split("\")[-1] -join "")

& $PathToPSCPEXE $Arguments

Leave a Comment

Filed under PowerShell

Alle möglichen Bildschirm Auflösungen mit PowerShell herausfinden

Gerade mal wieder was interessantes in PowerShell gefunden. Und zwar ging es mir darum die möglichen Auflösungen auszulesen, welche auf dem Rechner möglich sind.
Nach einigem Knobel kam folgendes dabei raus:

$Query = "SELECT * FROM CIM_VideoControllerResolution"
$res = Get-WMIObject -query $Query | Select Caption

Um die größtmögliche Auflösung herauszubekommen, kann folgendes verwendet werden:

$Query = "SELECT * FROM CIM_VideoControllerResolution"
$res = Get-WMIObject -query $Query | Select Caption | Select-Object -Last 1 | %{$_.Caption.Split("x")} | %{$_.Trim()} | Select-Object -First 2
$maxwidth = $res[0]
$maxheigth = $res[1]

2 Comments

Filed under PowerShell, Windows

Energieeinstellungen in PowerShell ändern

Mich hat eben interessiert ob ich nicht auch die Energieeinstellungen von Windows via PowerShell setzen kann. Nach kurzer Recherche stellt sich raus, ja kann ich und das sogar extrem simple:

powercfg -list
Bestehende Energieschemen (* Aktiv)
-----------------------------------
GUID des Energieschemas: 381b4222-f694-41f0-9685-ff5bb260df2e  (Ausbalanciert)
GUID des Energieschemas: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c  (Höchstleistung) *
GUID des Energieschemas: a1841308-3541-4fab-bc81-f71556f20b4a  (Energiesparmodus)

Das aktuelle gesetzte Energieschema kann man dann wie folgt auslesen:

powercfg -getactivescheme

Gesetzt wird das Energieschema dann mit:

powercfg -setactive $GUID

3 Comments

Filed under PowerShell, Windows

Viele Rar Dateien entpacken mit PowerShell

Ich hatte soeben das Problem, dass ich einige dutzend .rar Dateien hatte, welche in allen möglichen Unterverzeichnissen einen Ordners lagen. Da ich ehrlich gesagt viel zu faul bin jede Datei einzeln anzuklicken und zu entpacken habe ich vor einiger Zeit das Programm „Muli Unpacker“ gefunden, welches aber einen entscheidenden Nachteil hat: Das Winrar-Entpack Fenster ist immer im Vordergrund. Ergo ziemlich blöd wenn man nebenher irgendwas sinnvolles arbeiten möchte.
Da Winrar standardmäßig aber auch einige Command-Line Tools (rar.exe, unrar.exe) mitbringt, kann man dies auch schnell in der PowerShell automatisieren. Folgendermaßen könnte solch ein Script aussehen:

$input = Read-Host "Bitte Pfad eingeben:"
$files = Get-ChildItem $input -Recurse -Filter *.rar 

foreach ($file in $files)
{
    $Filename = $file.FullName
    $DirectoryName = $file.DirectoryName
    & 'C:\Program Files\WinRAR\UnRAR.exe' x -y $filename $DirectoryName | Out-Null
    if ($LASTEXITCODE -match "0")
    {
        rm "$DirectoryName\*.r*"
        rm "$DirectoryName\*.sfv"
        Write-Host "Gelöscht: $DirectoryName\*.r*"
        Write-Host "Gelöscht: $DirectoryName\*.sfv"
    }
    else
    {
        Write-Host -ForegroundColor Red "ACHTUNG FEHLER! $filename"        
    }
}

Ich hoffe dem ein oder anderen hilft das weiter 🙂 Gute Nacht 🙂

2 Comments

Filed under PowerShell, Windows

PowerShelll ISE und das signieren…

Zur Zeit beschäftige ich mich auf der Arbeit ziemlich viel mit PowerShell, da die Sprache super Möglichkeiten bietet Windows zu automatisieren. Meiner Ansicht nach wäre Linux wohl nicht so groß geworden hätte Microsoft schon früher eine Script Sprache zu Automatisierung bereitgestellt die anständig entwickelt wurde. Aber gut darum solls hier nicht gehen…

Gestern beschäftige ich mit dem Signieren von PowerShell Scripts um diese später in der kompletten Firma sicher ausführen zu können. Wie die Windows-CA Einrichtung funktioniert kann man hier nachlesen, um was es mir geht ist die eigentliche Signierung der Scripts. Dies kann wie folgt durchgeführt werden:
namespace Holding

Set-AuthenticodeSignature c:\foo.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Dies soll dazu führen das der Script C:\foo.ps1 mit dem ersten Zertifikat aus dem lokalem Zertifikatestore “CurrentUser\My” signiert wird.
Wenn man nun allerdings den Script mit der von Microsoft entwickelten PowerShell ISE geschrieben hat, kommt es bei signieren immer und immer wieder zu einem “Unknown Error”. Nun kann man allerdings hergehen, den Inhalt der mit ISE geschrieben Script Datei in eine neue Datei in einem normalen Editor kopiert, diese abspeichert und signiert funktioniert es wunderbar.

Die logische Schlussfolgerung lautet also, die PowerShell ISE speichert die Scripts auf irgendeine andere Art und Weise ab, die nicht kompatibel zu der Signier-Funktion ist.
Warum dies geschieht ist mir völlig schleierhaft. Was macht es für einen Sinn eine eigene Entwicklungsumgebung raus zubringen, mit welcher man keine 100% kompatiblen Scripts erstellen kann?!?!

Naja Gott sei Dank gibt es von einem Drittanbieter ein Ersatztool. Das ganze nennt sich PowerGUI und ist kostenlos hier downloadbar.

Leave a Comment

Filed under PowerShell, Windows