|
Redaktionssystem [www.ingenieur-menzel.de]
|
Für Rückgaben im Klartext verfügt Powershell über keine Commandlets, die eine maskierte Benutzereingabe erlauben. Nachfolgend werden zwei Möglichkeiten beschrieben, um diese Funktionalität bereitzustellen
|
Hintergrund Die Anweisungen Read-Host -AsSecurestring und Get-Credential maskieren die Benutzereingabe. Als Rückgabe wird jedoch eine geschützte Zeichenkette vom Typ [System.Security.SecureString] zurückgegeben. Viele Anwendungen außerhalb von Powershell können eine so geschützte Zeichenkette nicht weiterverarbeiten. |
Eine Möglichkeit für einen maskierten Eingabedialog bietet die COM-Bibliothek [scriptpw.dll]. Die Verwendung ist eigentlich einfach.
# *** Passwort abfragen *** $objPassword = new-object -comobject "ScriptPW.Password" Write-Host ` 'Bitte Passwort eingeben und [Eingabe]-Taste drücken.' ` -BackgroundColor Black -ForegroundColor Yellow $strPassword = $objPassword.GetPassword() # *** Passwort ausgeben *** Write-Host ` 'Das Passwort lautet: ' $strPassword ` -BackgroundColor Black -ForegroundColor Yellow Read-Host "Bitte [Eingabe]-Taste drücken ..."
Code: PS1, PWT_ScriptPW_DLL.ps1
Ein gravierender Nachteil ist jedoch, dass die DLL auf aktuellen Systemen (Windows 7/2008) nicht mehr lauffähig ist.
Eine universelle Möglichkeit zur Eingabemaskierung besteht in der Gleichschaltung der augenblicklichen Powershell-Konsolen-Farben für Hintergrund und Text.
# *************************
# *** Passwort abfragen ***
# *************************
# Bildschirmfarben speichern
$colForeGround_before = $Host.UI.RawUI.ForegroundColor
$colBackGround_before = $Host.UI.RawUI.BackgroundColor
Write-Host `
'Bitte Passwort eingeben und [Eingabe]-Taste drücken.' `
-BackgroundColor Black -ForegroundColor Yellow
# Bildschirmfarben (Hintergrund und Text) auf Schwarz setzen
$Host.UI.RawUI.ForegroundColor = [System.ConsoleColor]::Black
$Host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::Black
# Passwort abfragen
$strPassword = `
Read-Host 'Bitte Passwort eingeben und [Eingabe]-Taste drücken.'
# Bildschirmfarben (Hintergrund und Text) auf Ursprung zurücksetzen
$Host.UI.RawUI.ForegroundColor = $colForeGround_before
$Host.UI.RawUI.BackgroundColor = $colBackGround_before
# *************************
# *** Passwort ausgeben ***
Write-Host `
'Das Passwort lautet: ' $strPassword `
-BackgroundColor Black -ForegroundColor Yellow
Read-Host "Bitte [Eingabe]-Taste drücken ..."Code: PS1, PWT_ColorControl.ps1
Eine praktische Anwendung des Passwortdialoges erfolgt mit einem Powershell-Skript zum Öffnen von geschützten Containern mit der Anwendung FreeOTFE.
# Typisierungszwang, verhindert LESEN nicht initialisierter Variablen
set-strictmode -version 2.0
<#
=================================================================================
* Mounten von [FreeOTFE]-Archivdateien *
Version:
12.01.2012 15:10
Autor:
Alfred Menzel
(c) ingenieur-menzel.de
=================================================================================
* globale Fehlerbehandlung *
Zweck:
Skript-Terminierung bei auftretendem Fehler
#>
trap {
Write-Host ("### ABBRUCH ###") -ForegroundColor red
Write-Error ($_.Exception.Message)
Read-Host "Bitte [Eingabe]-Taste drücken ..."
# Skript beenden
Exit
}
<#
**********************************************************************************
* Assemblies laden *
#>
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
<#
*********************************************************************************
* Main-Routine *
*********************************************************************************
# ===============================================================================
# * Deklarationen *
# ===============================================================================
#>
# allgemein
[System.String] $strExeption = '' # Fehlermeldung
[System.String] $strMessage = '' # Meldung
[System.String] $strPassword = ''
[System.Boolean] $blnPathFile_Exists = $false
# spez.
[System.String] $strOTFE_FPath = '' # DateiPfad
# ... zur [FreeOTFE.exe]
[System.String] $strOTFE_ARG = `
'/mount /volume {1} /freeotfe /readonly /password {2} /silent /noexit'
[System.String] $strARG = ''
[System.ConsoleColor] $colForeGround_before = [System.ConsoleColor]::Cyan
[System.ConsoleColor] $colBackGround_before = [System.ConsoleColor]::Cyan
[System.String[]] $strArrArcFiles = ''
[System.String] $strArcFile = ''
[System.String] $strArcPath = '' # ArchivPfad mit
# ... abschliessendem '\' (Backslash)
[System.String] $strArcFPath = '' # ArchivDateiPfad
[System.Int32] $intFile_Index = 0
[System.Int32] $intFile_Count = 0
# ===============================================================================
# * Initialisierungen *
# ===============================================================================
# Bildschirm löschen
Clear-Host
$strOTFE_FPath = 'C:\Programme\FreeOTFE\FreeOTFE.exe'
# ArchivPfad
$strArcPath = 'C:\TEMP\'
# ArcDateien angegen
$strArrArcFiles[0] = "01.vol"
$strArrArcFiles += "02.vol"
$strArrArcFiles += "03.vol"
# ===============================================================================
# *****************************************
# *** OTFE_DateiPfad auf Zugriff testen ***
# *****************************************
$blnPathFile_Exists = Test-Path $strOTFE_FPath
switch($blnPathFile_Exists)
{
$true {
}
default {
# Abbruch auslösen
$strExeption =
@"
Der Dateipfad [$strOTFE_FPath] wurde nicht richtig angegeben
oder die Zugriffsrechte sind nicht vorhanden.
"@
throw $strExeption
}
}
# *****************************************
# **************************************
# *** Archivpfad auf Zugriff testen ***
# **************************************
$blnPathFile_Exists = Test-Path $strArcPath
switch($blnPathFile_Exists)
{
$true {
}
default {
# Abbruch auslösen
$strExeption =
@"
Der Archipfad [$strArcPath] wurde nicht richtig angegeben
oder die Zugriffsrechte sind nicht vorhanden.
"@
throw $strExeption
}
}
# **************************************
# *************************
# *** Passwort abfragen ***
# *************************
# Bildschirmfarben speichern
$colForeGround_before = $Host.UI.RawUI.ForegroundColor
$colBackGround_before = $Host.UI.RawUI.BackgroundColor
Write-Host `
'Bitte Passwort eingeben und [Eingabe]-Taste drücken.' `
-BackgroundColor Black -ForegroundColor Yellow
# Bildschirmfarben (Hintergrund und Text) auf Schwarz setzen
$Host.UI.RawUI.ForegroundColor = [System.ConsoleColor]::Black
$Host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::Black
# Passwort abfragen
$strPassword = Read-Host 'Passwort'
# Bildschirmfarben (Hintergrund und Text) auf Ursprung zurücksetzen
$Host.UI.RawUI.ForegroundColor = $colForeGround_before
$Host.UI.RawUI.BackgroundColor = $colBackGround_before
# *************************
# ***********************
# *** Archive mounten ***
# ***********************
foreach ( $strArcFile in $strArrArcFiles)
{
# DateiPfad zusammenstellen
$strArcFPath = $strArcPath + $strArcFile
# ---------------------------------
# *** Datei auf Existenz prüfen ***
# ---------------------------------
$blnPathFile_Exists = Test-Path $strArcFPath
switch($blnPathFile_Exists)
{
$true {
}
default {
# Abbruch auslösen
$strExeption =
@"
Der Archivdatei [$strArcFile] wurde nicht richtig angegeben
oder die Zugriffsrechte sind nicht vorhanden.
"@
throw $strExeption
}
}
# ---------------------------------
$strARG = $strOTFE_ARG.Replace("{1}", [char]34 + $strArcFPath + [char]34)
$strARG = $strARG.Replace("{2}", $strPassword)
Start-Process $strOTFE_FPath -ArgumentList $strARG
}
# ***********************
Read-Host "Ende, bitte [Eingabe]-Taste drücken ..."
# ENDECode: PS1, OTFE_Call.ps1
|
TopicID: [_tut_ps_passworddialog]
© Dipl.-Ing. (FH) Alfred Menzel, 2012 Impressum, Haftungsausschluss und Nutzungsbedingungen |