2013-02-21 11 views
15

Mam skrypt, który piszę, który tworzy połączenie z usługą SOAP. Po nawiązaniu połączenia muszę podać nazwę użytkownika/hasło przy każdym poleceniu, które wysyłam. Mam problem jest, że gdy używam odczytu-host to zrobić, moje hasło jest pokazany w postaci zwykłego tekstu i pozostaje w powłoce:Jak mogę użyć funkcji read-host w programie powershell, aby zaakceptować hasło do usługi zewnętrznej?

PS C:\Users\Egr> Read-Host "Enter Pass" 
Enter Pass: MyPassword 
MyPassword 

Gdybym ukryć go -AsSecureString wartość nie może być przekazywana do usługi, ponieważ jest to teraz obiekt System.Security.SecureString:

PS C:\Users\gross> Read-Host "Enter Pass" -AsSecureString 
Enter Pass: ********** 
System.Security.SecureString 

Kiedy to przekażę, to nie działa. Nie dbam o to, aby hasła były przekazywane do usługi w postaci zwykłego tekstu, po prostu nie chcę, aby po wprowadzeniu hasła trzymały się na powłoce użytkownika. Czy można ukryć dane wejściowe Read-Host, ale czy nadal przechowywane jest hasło jako tekst jawny? Jeśli nie, czy istnieje sposób, w jaki mogę przekazać obiekt System.SecureSecureString jako tekst jawny?

Dzięki

Odpowiedz

30

$ Hasło jest SecureString, a ten zwróci hasła zwykłego tekstu.

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) 
+0

który pracował, dzięki! Z ciekawości, gdzie znajdę takie rozwiązanie, gdybym sam wyglądał? – EGr

+0

Dobrze powiedział @Graimer. Musiałem przeprowadzić podobną operację jakiś czas temu, więc przeszukałem Google i znalazłem odpowiedź. :-) –

0

można zapisać hasło (wejście) jako zmiennej i przekazać go do swojej służby. Jeśli kod jest uruchamiany w skrypcie lub jako funkcja, zmienna zawierająca hasło zostanie usunięta po zakończeniu (są przechowywane w lokalnym zasięgu). Jeśli uruchomisz polecenia w konsoli (lub dot-source w skrypcie, takim jak . .\myscript.ps1), zmienna hasła pozostanie w zakresie sesji i będą one przechowywane do momentu usunięcia lub zamknięcia sesji. Jeśli chcesz mieć pewność, że zmienna zostanie usunięta po uruchomieniu skryptu, możesz usunąć ją samodzielnie. Tak:

#Get password in cleartext and store in $password variable 
$password = Read-Host "Enter Pass" 

#run code that needs password stored in $password 

#Delete password 
Remove-Variable password 

Aby dowiedzieć się więcej o tym, jak zmienne są przechowywane w teleskopach, sprawdź about_Scopes

+2

Przypuszczam, że nie byłem w 100% czysty. Nie chcę, aby hasło było widoczne na powłoce, więc jeśli ktoś przechodził obok, nie będzie w stanie zobaczyć hasła. – EGr

Powiązane problemy