Für etliche Scripts in einem einigermassen gesichertem Umfeld braucht es Credentials um Zugriffe auf Ressourcen zu haben. Nebst dem User auch ein Passwort. Diese soll natürlich adäquat geschützt sein. Hier eine Vorgehensweise die sicher nicht einem gekonnten Hak standhält, aber dennoch noch einfach so Einblick in das verwendete Passwort erlaubt.
Was da Grundsätzlich gemacht wird.
1. Ein Zertifikat wird erstellt (Ausser der Computer auf dem das Passwort chiffriert werden soll hat schon ein Maschinenzertifikat)
2. Das Passwort wird mit dem Zertifikat in einen Hash verwandelt und als Datei gespeichert. Diese Datei funktioniert nur für diese Passwort und nur auf diesem PC.
3. Am Beispiel „Netzwerklaufwerk verbinden“ wird ein möglicher Anwendungsfall aufzeigt
4. und wie ein PowerShell Script vom Desktop aus mit einem Klick gestartet wird.
Das ganze geht ohne Administrationsrechte.
Vorbereitungsschritte 1 und 2 im Powershell
Anzupassen sind myHostName beliebig gewählt sein kann, z.b. auch PC Name
— kommt an zwei Stellen vor
Und HierStehtdasPasswort Sollte mit dem zu verschlüsselnden Passwort ersetzt werden
#Create a certificate
New-SelfSignedCertificate -DnsName myHostName -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsage KeyEncipherment,DataEncipherment,KeyAgreement -Type DocumentEncryptionCert
### Encrypt the password string with the newly created certifcate
$encPwdLoc = "$env:USERPROFILE\pwd"
$encPwdFile = "$encPwdLoc\pwd.txt"
md $encPwdLoc
"HierStehtdasPasswort" | Protect-CmsMessage -To cn=myHostName -OutFile $encPwdFile
### How does the file looks like?
Start-Process $encPwdFile
### und zum Nachschauen ob es chiffriert wurde?
Unprotect-CmsMessage -Path $env:USERPROFILE\pwd\pwd.txt
Damit ist das Passwort in der Datei pwd.txt sicher gespeichert, kann aber nur auf diesem Computer angewendet werden. Diese Befehle werden nicht gespeichert und sind für die Anwendung nicht mehr gebraucht, ausser dem letzten Befehl.
Hier ein Beispiel zur Anwendung des chiffrierten Passwortes
### Beispiel um ein Netzwerklaufwerk zu verbinden, User admin das Laufwerk V: Permanant auf der Freigabe (Share) \\sinas1\client.
## kann in ein .ps1 Datei gespeichert werden
$username = 'admin'
$password = ConvertTo-SecureString (Unprotect-CmsMessage -Path $env:USERPROFILE\pwd\pwd.txt) -AsPlainText –Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
New-PSDrive -Name "V" -Root "\\sinas1\client" -Persist -PSProvider "FileSystem" -Credential $cred
Falls du denkst, ja super, da kann man ja die Variable $password anschauen … das wir von PowerShell unterdrückt.
Und noch eine Herausforderung. Das PowerShell Script ist erstellt, sollte aber für den Anwender mit einem Klick ausgeführt werden können. Ohne Rechtsklick und „Mit PowerShell ausführen“, was auch funktioniert, aber nicht so elegant ist.
Dazu machst du eine Verknüpfung (ShortCut) vom erstellten Script das auf .PS1 endet auf Desktop. Das reicht jedoch noch nicht ganz. In den Eigenschaften der Verknüpfung finde das Ziel. Kopiere den nächsten Code vor den aktuellen Inhalt im Feld Ziel
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File
Das war’s.