jgs2015
Goto Top

Batch script in Powershell umschreiben um Kennwortverschlüsselung gewährleisten zu können

Edit:

Sorry hatte den letzten Post zu schnell rein gepresst.

Moin zusammen,

Es geht um folgendes Skript:

Ausgabe eines Batchbefehls in Variable setzen und dann mit Systemzeit vergleichen

:repeat
@echo

set "storageArraytime="

for /f "tokens=5" %%i in ('"C:\Program Files (x86)\Dell\MD Storage Software\MD Storage Manager\client\SMcli.exe" 192.168.17.245 192.168.17.246 -c "show storageArray time;" -p Passwort ^| findstr /c:"Date/Time:"') do if not defined storageArraytime set "storageArraytime=%%i"

if %storageArraytime% NEQ %time:~0,8% goto :TIMESET
else goto :repeat

:TIMESET
"C:\Program Files (x86)\Dell\MD Storage Software\MD Storage Manager\client\SMcli.exe" 192.168.17.245 192.168.17.246 -c "set storageArray time;" -p Passwort

Skript läuft soweit, aber das Kennwort soll nicht im Klartext zu sehen sein.
Daher würde ich es gern in Powershell übersetzen, da hier ja die Möglichkeit besteht, Kennwörter verschlüsselt zu hinterlegen.

Ich habe wenig Lust alles neu zu schreiben, daher die Frage nach der Übersetzung.

Vielen Dank face-smile

Content-Key: 281196

Url: https://administrator.de/contentid/281196

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: 114757
114757 26.08.2015 aktualisiert um 13:15:53 Uhr
Goto Top
Moin,
Ich habe wenig Lust alles neu zu schreiben, daher die Frage nach der Übersetzung.
und hier hat keiner Lust so einen Beitrag überhaupt mal zu lesen der noch nicht mal ein Hallo geschweige denn einen Gruß enthält face-sad, hier arbeiten keine Roboter sondern immer noch Menschen! Danke.

Wenn man jetzt noch wüsste wie deine Textdatei aussieht und was du daraus extrahieren willst, kann man dir helfen...

Wie man Kennwörter mit SecureString einließt kannst du hier sehen:
PowerShell 2.0 sendMail Skript

Gruß jodel32
Mitglied: JGS2015
JGS2015 26.08.2015 um 13:21:02 Uhr
Goto Top
Hast ja recht, wurde editiert ;)

Danke für die Antwort trotzdem
Mitglied: 114757
Lösung 114757 26.08.2015, aktualisiert am 28.08.2015 um 09:30:04 Uhr
Goto Top
So biddeschön:
Bitte unbedingt die Hinweise in den Kommentaren des Codes beachten.
Das Skript Fragt beim ersten mal das Kennwort in einem Dialog ab, dieses wird dann verschlüsselt in einer Textdatei gespeichert.
WICHTIG ! Dieses verschlüsselte Passwort kann nur auf dem selben Rechner und mit dem selben Benutzeraccount genutzt werden unter dem das Skript hinterher läuft !!! Sobald versucht wird es mit der erzeugten Textdatei auf einem anderen Rechner oder einem anderen Benutzeraccount zu benutzen wird dies ein falsches Kennwort zum Ergebnis haben!
<#
    Ver- und Entschlüsselung eines Passwortes mit Hilfe eines Secure-Strings
    (Wichtiger Hinweis: verwendet werden kann der verschlüsselte String nur auf dem selben Rechner mit dem selben Useraccount der den Schlüssel generiert)
#>

# Pfad zur Datei in der das verschlüsselte Passwort gespeichert wird
$securepass = 'C:\temp\pass.txt'  

# Existiert das Passwortfile noch nicht erzeuge es
if (!(Test-Path $securepass)){
    (Get-Credential).Password | ConvertFrom-SecureString | out-file $securepass
}

# Passwort aus Securestring extrahieren
$pass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String (gc $securepass))))

# Pfad zur Storage Manager EXE
$storagemanager = 'C:\Program Files (x86)\Dell\MD Storage Software\MD Storage Manager\client\SMcli.exe'  

# Dauerschleife
while($true){
    # aktuelle Zeit
    $now = get-date -F 'HH:mm:ss'  
    # Ausgabe des Befehls speichern
    $result = start-process -FilePath $storagemanager -ArgumentList "192.168.17.245 192.168.17.246 -c `"show storageArray time;`" -p $pass" -Wait -NoNewWindow  
    # Zeit extrahieren
    $script_time = [regex]::match($result,'\d{2}:\d{2}:\d{2}').Value  
    # Wenn Zeit nicht übereinstimmt setze Zeit 
    if ($now -ne $script_time){
        Start-Process -FilePath $storagemanager -ArgumentList "192.168.17.245 192.168.17.246 -c `"set storageArray time;`" -p $pass" -wait -NoNewWindow  
    }
    # 1 Sekunde warten bevor die nächste Prüfung stattfindet
    sleep(1)
}
Gruß jodel32
Mitglied: JGS2015
JGS2015 26.08.2015 um 16:54:34 Uhr
Goto Top
Genial, vielen vielen Dank face-smile

Gruß

Jan
Mitglied: 114757
Lösung 114757 28.08.2015 aktualisiert um 09:30:00 Uhr
Goto Top
Dann bitte noch auf gelöst setzen. Danke.

Gruß jodel32