2013-02-21 15 views
15

Tôi có một tập lệnh mà tôi đang viết tạo kết nối với dịch vụ SOAP. Sau khi kết nối được thực hiện, tôi cần chuyển tên người dùng/mật khẩu bằng mọi lệnh tôi gửi. Tôi có vấn đề là khi tôi sử dụng đọc-host để làm điều này, mật khẩu của tôi được thể hiện trong dạng cleartext và vẫn còn trong vỏ:Làm cách nào để sử dụng chức năng đọc trên máy chủ của powershell để chấp nhận mật khẩu cho dịch vụ bên ngoài?

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

Nếu tôi giấu nó với -AsSecureString, giá trị có thể không còn được thông qua cho dịch vụ bởi vì nó bây giờ là một đối tượng System.Security.SecureString:

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

Khi tôi vượt qua điều này, nó không hoạt động. Tôi không quan tâm đến mật khẩu được chuyển đến dịch vụ trong văn bản rõ ràng, tôi chỉ không muốn họ gắn bó trên vỏ của người dùng sau khi họ nhập mật khẩu của họ. Có thể ẩn đầu vào Đọc-Máy chủ, nhưng vẫn có mật khẩu được lưu trữ dưới dạng văn bản rõ ràng không? Nếu không, có cách nào tôi có thể vượt qua các đối tượng System.Security.SecureString như cleartext?

Cảm ơn

Trả lời

30

$ Mật khẩu là Securestring và điều này sẽ trả về mật khẩu thuần văn bản.

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

Đó làm việc, cảm ơn! Trong tò mò, tôi sẽ tìm ra giải pháp như thế nào nếu tôi tự tìm kiếm? – EGr

+0

Cũng nói @Graimer. Tôi cần phải thực hiện một hoạt động tương tự trong khi trở lại, vì vậy tôi đã tìm kiếm trên Google và tôi đã tìm thấy câu trả lời của mình. :-) –

0

Bạn có thể lưu mật khẩu (đầu vào) dưới dạng biến và chuyển nó vào dịch vụ của bạn. Nếu mã được chạy trong một tập lệnh hoặc như một hàm, biến chứa mật khẩu sẽ bị xóa sau khi nó được thực hiện (chúng được lưu trữ trong một phạm vi cục bộ tạm thời). Nếu bạn chạy các lệnh trong bảng điều khiển (hoặc mã nguồn mở tập lệnh như . .\myscript.ps1), biến mật khẩu sẽ nằm trong phạm vi phiên và chúng sẽ được lưu trữ cho đến khi bạn xóa hoặc đóng phiên. Nếu bạn muốn chắc chắn biến được xóa sau khi tập lệnh của bạn được chạy, bạn có thể tự xóa nó. Như thế này:

#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 

Để đọc thêm về cách biến được lưu trữ trong phạm vi, kiểm tra about_Scopes

+2

Tôi cho rằng tôi không rõ 100%. Tôi không muốn mật khẩu được hiển thị trên vỏ, vì vậy nếu ai đó đang đi bộ bởi họ sẽ không thể nhìn thấy mật khẩu. – EGr

Các vấn đề liên quan