Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell

Dies ist eine alte Version des Dokuments!


PowerShell

siehe Wikieintrag zu Windows Terminal

GitHub: https://github.com/PowerShell/PowerShell.git

Installation:

> winget install --id Microsoft.PowerShell

Es gibt zwei verschiedene PowerShell Versionen:

  • Windows PowerShell (bis v5.x): in Windows 10 integrierter Kommandozeileninterpreter sowie eine Skriptsprache, basiert auf dem .NET Framework und kann deutlich mehr als das sehr alte CMD
  • PowerShell (ab v6), auch als PowerShell Core bekannt: open-source Kommandozeileninterpreter und Skriptsprache, basiert auf .NET (Core) und ist cross-platform

Beide Versionen sind sehr ähnlich, doch nur die neue cross-platform PowerShell wird noch weiterentwickelt und bietet somit mehr Funktionen. Diese wird leider nicht mit Windows 10 mitgeliefert, weshalb man die meisten Skripte kompatibel zur Version 5 schreiben muss, um portable zu sein.

Nice to know

Symlink für das Profil (profile.ps1) der neuen PowerShell zur alten Windows PowerShell erstellen:

> New-Item -ItemType SymbolicLink -Path $home/Documents/WindowsPowerShell/profile.ps1 -Value $home/Documents/PowerShell/profile.ps1

PowerShell Skripte auf dem System erlauben:

> Set-ExecutionPolicy RemoteSigned

RemoteSigned bedeutet: alle Skripte, die nicht lokal geschrieben wurden, müssen signiert werden

Beenden der Shell mit Ctrl+D (wie in Bash), folgende Zeile in das PowerShell Profil ($home/Documents/WindowsPowerShell/profile.ps1) eintragen (ähnlich wie .profile oder .bashrc unter Linux):

Set-PSReadLineKeyHandler -Key ctrl+d -Function DeleteCharOrExit

Dies wird durch das Modul PSReadLine ermöglicht, was viel Konfiguration zulässt und viele Bash-Features endlich zu PowerShell holt

RAM

In Windows 10 anzeigen, wieviel RAM drin steckt (sollte bei englisch und deutsch so funktionieren).

in CMD:

PS C:\Users\Benutzer> systeminfo | findstr /C:"hysi"
Gesamter physischer Speicher:                  32.540 MB
Verf?gbarer physischer Speicher:               18.511 MB

in PowerShell:

PS C:\Users\Manfred> systeminfo | sls "hysi"

Gesamter physischer Speicher:                  32.540 MB
Verfügbarer physischer Speicher:               18.770 MB

Skript signieren

Im folgenden wird PowerShell als Administrator benötigt!

Zertifikat erstellen

> $date = Get-Date -DisplayHint DateTime -Year 2100 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0 -Millisecond 0
> $cert = New-SelfSignedCertificate -NotAfter $date -Type CodeSigningCert -CertStoreLocation Cert:/LocalMachine/My/ -DnsName "max.mustermann@example.de"
> echo $cert

Zertifikat (Thumbprint) finden, was für CodeSignierung geeignet ist

Microsoft Management Console (mmc) öffnen (Suche/Win+R) > Datei > Snap-in hinzufügen > Zertifikate > Computer account > Lokaler Computer > OK > Zertifikat öffnen (Doppelklick) > Details > Thumbprint

oder in PowerShell

Zertifikate des lokalen Computers durchsuchen und nach Subject oder Thumbprint filtern

> ls -r Cert:/LocalMachine/  -CodeSigningCert | where {$_.Subject -like "*max.mustermann*"}
> ls -r Cert:/LocalMachine/  -CodeSigningCert | where {$_.Thumbprint -eq "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
> ls -r Cert:/LocalMachine/ | where {$_.Subject -like "*max.mustermann*"}
> ls -r Cert:/LocalMachine/ | where {$_.Thumbprint -eq "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
  • -CodeSigningCert bewirkt, dass nur Zertifikate angezeigt werden, mit denen Code signiert wird (z. B. Zertifikate für E-Mail oder SSL werden ausgeblendet)
  • /LocalMachine/ durch /CurrentUser/ ersetzen, um nur aktuellen Benutzer zu durchsuchen (Zertifikat vertrauen funktioniert dann aber nur über die MMC GUI)
  • wichtige Unterordner von /LocalMachine/ und /CurrentUser/ (mit dazugehörenden Namen aus MMC):
    • My (Personal): Speicher für eigene Zertifikate
    • CA (Intermediate Certification Authorities): Speicher für CA-Zertifikate
    • Root (Trusted Root Certification Authorities): Speicher für vertrauenswürdige Root-Zertifikate
    • AuthRoot (Third-Party Certification Authorities): Speicher für Root-Zertifikate von Drittparteien

Zertifikat löschen

> ls -r Cert: | where {$_.Thumbprint -eq "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"} | rm

Zertifikat vertrauen

> $file = "$env:tmp/certificate.cer"
> $cert = $(ls -r Cert:/LocalMachine/CA/ | where {$_.Thumbprint -eq "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"})
> Export-Certificate -Type CERT -Cert $cert -FilePath $file
> ls $file
> Import-Certificate -CertStoreLocation Cert:/LocalMachine/AuthRoot/ -FilePath $file
> rm $file

PS Skript signieren

> $script = "$home/Documents/PowerShell/profile.ps1"
> $cert = $(ls -r Cert:/LocalMachine/My/ -CodeSigningCert | where {$_.Thumbprint -eq "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"})
> Set-AuthenticodeSignature -Certificate $cert -FilePath $script
/home/http/wiki/data/attic/powershell.1668632333.txt · Zuletzt geändert: von manfred