Cách chuyển mật khẩu trong tập lệnh PowerShell

Trong bài đăng trên blog này, tôi sẽ chỉ cho bạn cách thêm thông số xác thực vào các hàm PowerShell. Nhưng trước khi tôi làm điều đó, trước tiên hãy nói về lý do tại sao bạn muốn thêm tham số thông tin xác thực vào chức năng của mình. Mục đích của tham số thông tin xác thực là cho phép bạn chạy chức năng và/hoặc lệnh ghép ngắn với tư cách là một người dùng khác, một số tài khoản khác với tài khoản hiện đang chạy phiên PowerShell. Cách sử dụng phổ biến nhất là chạy chức năng hoặc lệnh ghép ngắn dưới dạng tài khoản người dùng nâng cao

Ví dụ: cmdlet

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
1 có tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2, bạn có thể cung cấp thông tin đăng nhập của quản trị viên miền để tạo tài khoản trong miền. Giả sử tài khoản bình thường của bạn đang chạy phiên PowerShell chưa có quyền truy cập đó

Bài đăng trên blog này hướng dẫn bạn quy trình thêm chức năng đó vào các chức năng PowerShell của bạn. Tôi cũng thảo luận về cách khắc phục các vấn đề phổ biến khi làm việc với các lệnh ghép ngắn kế thừa không hỗ trợ đối tượng thông tin xác thực, nhưng trước khi chúng ta bắt đầu, trước tiên hãy nói về các đối tượng PSCredential và cách tạo chúng

Tạo đối tượng xác thực

Các đối tượng PSCredential đại diện cho một bộ thông tin đăng nhập bảo mật, chẳng hạn như tên người dùng và mật khẩu. MSDN Các đối tượng sau đó được chuyển đến tham số của hàm và được sử dụng để thực thi hàm với tư cách là tài khoản người dùng trong đối tượng thông tin xác thực. Có một số cách mà bạn có thể tạo đối tượng thông tin xác thực. Phương pháp đầu tiên và dễ dàng nhất là sử dụng lệnh ghép ngắn PowerShell

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
3. Bạn có thể chỉ cần thực thi
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
3, điều này sẽ dẫn đến dấu nhắc tên người dùng và mật khẩu. Từ đó, bạn có thể nhập tên miền\tên người dùng hoặc bạn có thể gọi lệnh ghép ngắn với một số tham số tùy chọn

Để chỉ định trước tên miền và tên người dùng, bạn có thể sử dụng tham số

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 hoặc
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
6. Sự khác biệt duy nhất mà tôi nhận thấy là khi bạn sử dụng
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
6, bạn cũng sẽ được yêu cầu nhập giá trị tin nhắn. Đoạn mã dưới đây minh họa bằng cmdlet. Bạn cũng có thể lưu trữ đối tượng thông tin xác thực trong một biến, cho phép bạn sử dụng thông tin xác thực nhiều lần. Trong ví dụ bên dưới, tôi đang lưu trữ từng đối tượng thông tin xác thực vào một biến có tên là $Cred

$Cred = Get-Credential

$Cred = Get-Credential -Credential domain\user

$Cred = Get-Credential -UserName domain\user -Message 'Enter Password'

Đôi khi, bạn sẽ không muốn một phương pháp tương tác để tạo các đối tượng thông tin xác thực như tôi vừa trình bày. Hầu hết các công cụ tự động hóa như Jenkins, TeamCity và Octopus Deploy đều yêu cầu phương thức không tương tác. Để làm điều này, bạn sẽ phải tạo một chuỗi an toàn, chứa mật khẩu. Sau đó, bạn phải chuyển chuỗi bảo mật và tên người dùng cho phương thức PSCredential của

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
8. Nghe có vẻ phức tạp hơn nhiều so với thực tế, tôi đảm bảo với bạn

Cú pháp để tạo một chuỗi an toàn trông như thế này

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
9. Cả hai tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
00 và
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
01 đều bắt buộc nếu không bạn sẽ nhận được thông báo lỗi cho biết bạn không nên chuyển văn bản thuần túy vào một chuỗi an toàn

Lý do là nếu phiên PowerShell của bạn được ghi lại, thì mật khẩu đó sẽ tồn tại trong nhật ký. Với chuỗi bảo mật đã tạo, bạn sẽ cần chuyển nó vào phương thức PSCredential để tạo đối tượng thông tin xác thực. Cú pháp đó trông như thế này

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
02. Trong ví dụ bên dưới, tôi đang lưu trữ chuỗi bảo mật vào một biến có tên là $password và đối tượng thông tin xác thực vào một biến $Cred

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]

Bây giờ bạn đã biết cách tạo các đối tượng thông tin xác thực, bây giờ là lúc nói về cách chúng tôi thêm các tham số thông tin xác thực vào các hàm PowerShell của mình

Thêm thông số xác thực

Cũng giống như bất kỳ tham số nào khác, bạn bắt đầu bằng cách thêm nó vào khối tham số của chức năng của mình. Tôi thường sử dụng tên tham số là $Credential vì đó là tên mà các lệnh ghép ngắn PowerShell hiện có sử dụng

Với tham số được thêm vào, sau đó bạn phải xác định loại của nó, mà bạn vừa học là

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
03. Trước khi chúng tôi tiếp tục, hãy dành một chút thời gian để xem đoạn mã bên dưới. Nó dành cho một chức năng gọi là Get-Something. Nó có hai tham số, $Name và $Credential, có kiểu
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
03

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
0

Đoạn mã trên là đủ để có một tham số thông tin xác thực đang hoạt động, tuy nhiên, có một số điều bạn có thể thêm vào để làm cho nó mạnh mẽ hơn

Điều đầu tiên bạn có thể thêm là

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
05, để kiểm tra xem giá trị được chuyển đến
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 có phải là null không. Nếu có, nó sẽ dừng chức năng thực thi. Nếu bạn không chỉ định đầu vào thông tin xác thực phù hợp, tại sao lại thực thi?

Điều tiếp theo bạn có thể thêm là

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
07. Điều này cho phép bạn nhập tên người dùng dưới dạng chuỗi và có lời nhắc tương tác cho mật khẩu mà tôi sẽ trình bày sau trong bài viết

Cuối cùng, bạn có thể làm là đặt giá trị mặc định cho tham số $Credential. Thêm

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08 làm giá trị mặc định sẽ điền vào một đối tượng thông tin xác thực trống. Tại sao làm điều này? . Nếu bạn không cung cấp đối tượng thông tin xác thực cho chức năng của mình, mã sẽ bị lỗi khi chạm vào lệnh ghép ngắn bên trong mã yêu cầu thông tin xác thực. Bằng cách cung cấp một đối tượng thông tin xác thực trống mặc định, bạn có thể khắc phục lỗi đó

Có một vài phương pháp khác để xử lý vấn đề này. Một là câu lệnh if đơn giản và một tùy chọn khác là sử dụng splatting. Tôi sẽ giải quyết vấn đề này sau trong bài viết. Đoạn mã dưới đây cho thấy chức năng bây giờ trông như thế nào với tất cả những thay đổi này

TIỀN BOA. - Một số lệnh ghép ngắn chấp nhận thông số xác thực không hỗ trợ

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08 như bình thường. Xem phần Xử lý các lệnh ghép ngắn kế thừa để biết cách giải quyết

Sử dụng thông số xác thực

Trong phần tiếp theo của bài đăng này, tôi sẽ trình bày cách sử dụng các tham số thông tin xác thực. Tôi sẽ sử dụng một chức năng gọi là

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31, không có trong The Pester Book. Tôi đã thêm tham số thông tin xác thực bằng cách sử dụng các kỹ thuật bạn vừa học ở trên. Bên trong hàm
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31, nó sử dụng Invoke-Command. Tôi đã cập nhật nó để sử dụng tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 và sau đó thêm biến $Credential được tạo bởi hàm. Điều này cho phép tôi thay đổi người dùng đang chạy Invoke-Command

Vì tôi đã bao gồm

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08 làm giá trị mặc định nên giá trị này sẽ hoạt động mà không có thông tin đăng nhập nào được chuyển và có thông tin đăng nhập được thông qua. Vì vậy, hãy kiểm tra nó và xem nó có hoạt động như chúng ta mong đợi không. Mã
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31 ở bên dưới nếu bạn muốn làm theo

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
3

Với thông tin xác thực

Cách đầu tiên tôi có thể sử dụng tham số -Credential của

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31 là sử dụng
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
3 trong
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
38 trong thời gian chạy. Điều này sẽ khiến
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
39 chạy trước giống như một bài toán. Sau đó, bạn sẽ được nhắc nhập tên người dùng và mật khẩu. Bạn có thể sử dụng các tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 hoặc
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
41 của
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
39 để điền trước tên người dùng và tên miền. Nếu bạn chưa quen với một kỹ thuật gọi là splatting, thì đó là cách tôi chuyển các tham số còn lại cho hàm
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31. Để biết thêm thông tin về splatting, hãy xem bài viết MSDN này

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
4

Việc phải sử dụng

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
44 có vẻ hơi lạ phải không?

Thông thường, khi bạn chạy lệnh ghép ngắn hỗ trợ tham số

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2, bạn chỉ cần nhập tên người dùng của mình và nó sẽ tự động nhắc nhập mật khẩu

Chà, vì chúng ta đã sử dụng

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
07 trong hàm nên chúng ta có thể làm điều đó. Chỉ cần nhớ đặt tên người dùng dưới dạng chuỗi ngay sau tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 và bạn sẽ được nhắc nhập mật khẩu của mình

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2

TIỀN BOA. - Nếu bạn đang theo dõi, bạn sẽ cần cài đặt một vài tính năng của windows để tạo giá trị đăng ký này. Chạy

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
48 và
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
49 nếu cần

Với Credentials trong một biến

Bạn cũng có thể điền trước một biến thông tin xác thực và chuyển nó tới tham số

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 của hàm
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
31. Tôi sử dụng phương pháp sau rất nhiều khi làm việc với các công cụ triển khai liên tục và tích hợp liên tục như Jenkins, TeamCity và Octopus Deploy

tôi sử dụng. Net để tạo đối tượng thông tin xác thực cũng như sử dụng chuỗi bảo mật để chuyển mật khẩu. Bạn sẽ nhận thấy mật khẩu ở dạng văn bản rõ ràng khi tôi tạo chuỗi bảo mật. Tất cả các công cụ CI và CD mà tôi vừa đề cập đều có một phương pháp điền an toàn vào thời gian chạy, vì vậy khi sử dụng các công cụ đó, tôi thay thế mật khẩu văn bản thuần túy bằng một biến được xác định trong công cụ tôi đang sử dụng

Để biết ví dụ về điều đó, hãy xem bài đăng trên blog của Hodge Tự động hóa với Jenkins và PowerShell trên Windows - Phần 2

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
7

không có thông tin xác thực

Vì tôi đã thêm

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08 làm giá trị mặc định của tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2, nên tôi cũng có thể chạy lệnh mà không cần thông tin xác thực. Hãy nhớ rằng không phải tất cả các lệnh ghép ngắn có tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 đều cho phép điều này. Tuy nhiên, đừng lo lắng, chúng ta có thể khắc phục hạn chế này và tôi sẽ thảo luận về cách thực hiện trong phần tiếp theo của bài viết

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
1

Xử lý các Cmdlet kế thừa

Làm việc trong ngành công nghệ, bạn sẽ không bao giờ thoát khỏi nhu cầu hỗ trợ và/hoặc xử lý các ứng dụng cũ. Làm việc trong PowerShell cũng không khác và trong trường hợp này, cuối cùng bạn sẽ gặp phải một hoặc cả hai vấn đề sau

Một lệnh ghép ngắn không hỗ trợ

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08 mà tôi đã đề cập một vài lần. Hoặc, lệnh ghép ngắn bạn muốn sử dụng thậm chí không hỗ trợ tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 và thay vào đó chấp nhận tên người dùng chuỗi và mật khẩu chuỗi. Phần này của bài đăng trên blog được dành riêng để giúp bạn giải quyết vấn đề này. Đầu tiên, lên là, phải làm gì khi cmdlet không hỗ trợ
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08

Sử dụng If Else để xử lý thông tin xác thực trống

Trước khi tôi đi sâu vào giải quyết vấn đề này, trước tiên hãy để tôi mở rộng vấn đề là gì. Vì vậy, điều đó có nghĩa là gì khi tôi nói lệnh ghép ngắn không hỗ trợ

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08?

Điều đó có nghĩa là khi bạn không cung cấp đối tượng thông tin xác thực, hàm bạn đã viết sẽ không thành công vì lệnh ghép ngắn bên trong hàm của bạn sẽ không thành công vì nó không thể chấp nhận đối tượng thông tin xác thực trống. Chức năng bạn đã viết sẽ hoạt động tuyệt vời miễn là bạn cung cấp một đối tượng thông tin xác thực, nhưng nếu bạn không cung cấp, thì không có xúc xắc. Vì vậy, làm thế nào để chúng tôi sửa chữa nó?

Có một số cách, cách thứ nhất là kiểm tra tham số

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 để biết giá trị bằng câu lệnh if-else. Câu lệnh if kiểm tra giá trị của $credential và chỉ thêm tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2 vào
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
71 nếu nó không trống, nếu không, nó đưa ra kết quả
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
71 mà không có tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
1

Sử dụng Splatting để xử lý thông tin xác thực trống

Một cách khác để giải quyết vấn đề này là sử dụng splatting. Tôi vẫn sử dụng câu lệnh if để xác định xem $credential có trống hay không, nhưng điểm khác biệt là tôi chỉ thêm một đối tượng $credential vào bảng băm, thay vì lặp lại toàn bộ khối mã sử dụng

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
71

Để tìm hiểu thêm về cách chia nhỏ các chức năng bên trong, hãy xem bài đăng trên blog trước đây của tôi Các tham số chia nhỏ bên trong các chức năng nâng cao. Điều đó kết thúc việc xử lý các lệnh ghép ngắn không hỗ trợ

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
08, vì vậy, hãy chuyển sang xử lý các lệnh ghép ngắn thậm chí không có tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
5

Làm việc với [chuỗi] Mật khẩu

Một ví dụ điển hình về lệnh ghép ngắn chấp nhận chuỗi làm mật khẩu là lệnh ghép ngắn

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77. Invoke-Sqlcmd là một cmdlet cực kỳ hữu ích cho phép bạn tương tác với SQL thông qua PowerShell. Tôi luôn sử dụng nó trong mã của mình để thực hiện các câu lệnh chèn, cập nhật và xóa SQL đơn giản. Vấn đề là, tôi không muốn chuyển mật khẩu văn bản rõ ràng cho chức năng của mình để sử dụng Invoke-Sqlcmd. Tôi muốn chuyển một đối tượng thông tin xác thực giống như khi sử dụng lệnh ghép ngắn PowerShell hiện đại và được thiết kế tốt

Để thực hiện điều này, tôi phải hydrat hóa và khử nước một đối tượng xác thực. Đó là cuộc nói chuyện thú vị để tạo một đối tượng thông tin xác thực và trích xuất tên người dùng và mật khẩu từ nó. Bạn đã học cách tạo các đối tượng thông tin xác thực trong bài đăng trên blog này nên tôi sẽ không trình bày chi tiết về điều đó. Tuy nhiên, tôi sẽ thực hiện từng bước quá trình trích xuất hoặc khử nước tên người dùng và mật khẩu từ một đối tượng thông tin xác thực

Để trình bày cách khử nước đối tượng thông tin xác thực, tôi đã viết một hàm PowerShell có tên là

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
78. Hàm này bao quanh lệnh ghép ngắn
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77 và truy vấn máy chủ SQL cho tất cả các cơ sở dữ liệu của nó. Lưu ý rằng tôi có tất cả các cài đặt được sử dụng trước đây để thêm thông số xác thực vào chức năng của mình. Điều này cho phép tôi chuyển vào một đối tượng thông tin xác thực giống như tôi đã dạy bạn trong suốt bài đăng này. Nhưng, nó sẽ hoạt động như thế nào nếu
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77 không hỗ trợ đối tượng
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
2?

Chà, tên người dùng và mật khẩu tồn tại trong biến

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
12. Vì vậy, tất cả những gì chúng ta phải làm là giải nén nó. Tên người dùng rất dễ lấy, chúng ta có thể lấy tên đó bằng cách gọi thuộc tính UserName của biến $Credential. Trong ví dụ dưới đây, tôi đang lưu trữ nó vào một biến có tên là $UserName. Để lấy mật khẩu, bạn phải sử dụng phương thức
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
13 của đối tượng $Credential. Cú pháp cho điều đó là
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
14. Tôi đang lấy đầu ra của mật khẩu đó dưới dạng một chuỗi và lưu trữ nó vào một biến có tên là $Password. Hãy nhớ rằng các biến này chỉ có thể truy cập được bên trong hàm

Bây giờ, tôi có một biến tên người dùng và mật khẩu được lưu trữ dưới dạng một chuỗi, tôi có thể chuyển chúng tới

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77. Thay vì chuyển tất cả các tham số và giá trị của
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77 trên một dòng, tôi đã chọn tạo một bảng băm và tách chúng vào lệnh ghép ngắn. Tôi không cần tạo thêm biến $UserName và $Password trong ví dụ này. Tôi có thể chỉ cần đặt mã bên trong bảng băm hoặc trực tiếp vào các tham số
$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
77, nhưng điều này giúp dễ dàng xem những gì đang diễn ra hơn một chút

$password = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential [username, $password]
0

Tiếp tục quản lý chứng chỉ học tập

Việc tạo và lưu trữ các đối tượng thông tin xác thực có thể gây khó khăn, để giúp duy trì thông tin đăng nhập PowerShell của bạn, tôi khuyên bạn nên xem mô-đun PowerShell và bài đăng trên blog sau đây

Thông tin đăng nhập tốt hơn

Sử dụng Thông tin xác thực trong Hồ sơ của bạn

Các giải pháp khác

Kho khóa Azure

dự án kho tiền

nguồn

PowerShell. tổ chức. sử dụng-thông tin xác thực-param-as-tùy chọn

powershell-how-to-create-a-pscredential-object

La lên

Tôi muốn hét lên với Joel Bennett. Anh ấy đã rất tốt bụng khi xem lại bài đăng trên blog này và cung cấp một số hiểu biết kỹ thuật thực sự tuyệt vời. Với sự giúp đỡ của anh ấy, tôi đã học được nhiều như bạn đã học, nếu không muốn nói là nhiều hơn. Dạy là cách tốt nhất để học sau tất cả. Cảm ơn, Joel

Chủ Đề