Trường Geek Học cách sử dụng từ xa trong PowerShell
Một trong những tính năng tốt nhất mà PowerShell cung cấp là khả năng quản lý từ xa Máy chủ của bạn. Nó thậm chí còn cho phép bạn quản lý một loạt chúng cùng một lúc.
Hãy chắc chắn đọc các bài viết trước trong loạt bài:
- Tìm hiểu cách tự động hóa Windows với PowerShell
- Học cách sử dụng Cmdlets trong PowerShell
- Học cách sử dụng các đối tượng trong PowerShell
- Học định dạng, lọc và so sánh trong PowerShell
Và theo dõi phần còn lại của loạt bài cả tuần.
Từ xa là gì?
Việc quản lý hàng loạt máy chủ của bạn có thể rất tẻ nhạt và nếu bạn phải thay đổi cấu hình IIS trên 50 máy chủ web trước đó, bạn sẽ biết ý tôi là gì. Đây là những tình huống khi PowerShell Remote và khả năng viết kịch bản của ngôn ngữ có thể được giải cứu. Sử dụng HTTP hoặc HTTPS an toàn hơn, PowerShell Remote cho phép bạn gửi lệnh đến một máy từ xa trên mạng của bạn. Sau đó, máy sẽ chạy các lệnh và gửi đầu ra trở lại cho bạn, lần lượt được hiển thị trên màn hình của bạn.
Hãy để kỹ thuật
Cốt lõi của PowerShell Remote là một Dịch vụ Windows duy nhất, Windows Remote Management hoặc dịch vụ WinRM, như đã được biết đến. Sử dụng WinRM, bạn có thể thiết lập một hoặc nhiều cấu hình phiên (còn được gọi là điểm cuối), về cơ bản là các tệp chứa thông tin về trải nghiệm bạn muốn cung cấp cho người kết nối với phiên bản PowerShell từ xa của bạn. Cụ thể hơn, bạn có thể sử dụng các tệp cấu hình phiên để xác định ai có thể và ai không thể kết nối với thể hiện, lệnh ghép ngắn và tập lệnh nào họ có thể chạy, cũng như bối cảnh bảo mật mà phiên phải chạy. Sử dụng Dịch vụ WinRM, bạn cũng thiết lập các trình nghe của người dùng, người nghe các yêu cầu PowerShell đang đến. Những người nghe tiếng này, có thể là HTTP hoặc HTTPS và có thể bị ràng buộc với một địa chỉ IP duy nhất trên máy của bạn. Khi bạn mở kết nối PowerShell sang một máy khác (về mặt kỹ thuật, việc này được thực hiện bằng giao thức WS-MAN, dựa trên HTTP), kết nối sẽ liên kết với một trong những trình lắng nghe này. Sau đó, các thính giả của người Viking, chịu trách nhiệm gửi lưu lượng truy cập đến ứng dụng được liên kết với tệp cấu hình phiên thích hợp; ứng dụng (thường là PowerShell nhưng bạn có thể có các ứng dụng lưu trữ khác nếu muốn) sau đó chạy lệnh và cung cấp kết quả trở lại thông qua trình nghe List nhạc qua mạng và quay lại máy của bạn.
Hãy chỉ cho tôi cách
Điều đầu tiên bạn cần làm là bật Remote trên máy bạn muốn kết nối. Điều này có thể được thực hiện bằng cách chạy như sau:
Cho phép-PSRemote
Sau đó, bạn sẽ cần phải trả lời có cho tất cả các lời nhắc. Khi bạn chạy Enable-PSRemote, một vài thay đổi được thực hiện cho PC của bạn:
- Dịch vụ WinRM khởi động.
- Dịch vụ WinRM thay đổi từ chế độ khởi động thủ công sang Tự động.
- Nó tạo ra một trình nghe HTTP được liên kết với tất cả các thẻ mạng của bạn.
- Nó cũng tạo ra một ngoại lệ tường lửa gửi đến cho giao thức WS-MAN.
- Một số cấu hình phiên mặc định được tạo
Nếu bạn đang chạy Windows 7 và vị trí của card mạng của bạn được đặt thành Công khai, việc bật PowerShell Remote sẽ thất bại. Để khắc phục, chỉ cần chuyển sang vị trí mạng Gia đình hoặc Cơ quan. Ngoài ra, bạn có thể bỏ qua kiểm tra mạng bằng cách sử dụng như sau:
Kích hoạt-PSRemote -SkipNetworkProfileCheck
Tuy nhiên, chúng tôi khuyên bạn thay đổi vị trí mạng của mình.
Có hai cách kết nối với máy khác bằng PowerShell. Có một phương thức một, rất giống với sử dụng SSH, và sau đó có một phương thức cho nhiều phương thức.
Sử dụng phiên PowerShell
Cách đầu tiên để kết nối với máy từ xa bằng PowerShell là sử dụng thứ gọi là Phiên PowerShell. Đơn giản chỉ cần đặt một phiên cho phép bạn chạy các lệnh trên máy từ xa theo cách tương tác giống như trên máy của bạn. Để mở một phiên chỉ cần gõ như sau:
Enter-PSSession -ComputerName
Lời nhắc sẽ nhận được tiền tố biểu thị máy bạn đang chạy lệnh ghép ngắn.
Từ đây bạn thực sự có thể coi lời nhắc như thể bạn đang ngồi ở máy từ xa. Ví dụ: nếu bạn muốn xem tất cả các tệp trên ổ C: \, bạn có thể thực hiện một cách đơn giản:
Get-ChildItem -Path C: \
Nếu bạn đến từ nền tảng Linux, bạn có thể nghĩ đến việc sử dụng phương pháp từ xa này đến một phương pháp từ xa như là phương pháp thay thế PowerShell cho SSH.
Sử dụng lệnh gọi
Cách thứ hai bạn có thể sử dụng PowerShell trên máy từ xa là sử dụng Invoke-Command. Lợi thế của việc sử dụng Invoke-Command đến từ việc bạn có thể thực thi cùng một lệnh trên nhiều máy cùng một lúc. Như bạn có thể tưởng tượng, điều này đặc biệt hữu ích khi bạn muốn làm một cái gì đó như thu thập nhật ký sự kiện từ máy chủ của bạn. Lệnh gọi theo cú pháp sau:
Gọi lệnh -ComputerName Dar nhớ, localhost -ScriptBlock Get-EventLog Application -Newest 2
Vì lệnh được thực thi song song trên tất cả các máy, bạn sẽ cần một số cách để xem PC nào cho kết quả đã cho. Bạn có thể làm điều này bằng cách xem thuộc tính PSComputerName.
Khi bạn sử dụng Lệnh gọi, bạn không còn có các đối tượng mà bạn có thể mong đợi trong Đường ống. Bạn thấy, để PowerShell lấy thông tin từ máy từ xa về máy của bạn, họ cần một số cách biểu diễn các đối tượng mà lệnh bạn chạy trên đầu ra của máy từ xa. Ngày nay, dường như cách được chọn để biểu diễn cấu trúc dữ liệu phân cấp là sử dụng XML, có nghĩa là khi bạn ban hành lệnh bằng Invoke-Command, các kết quả lần đầu tiên được tuần tự hóa thành XML trước khi được gửi trở lại máy của bạn. Khi chúng quay trở lại máy của bạn, chúng sẽ được giải nén trở lại thành một đối tượng; vấn đề ở đây là khi chúng được khử lưu huỳnh, tất cả các phương thức, ngoại trừ phương thức ToString (), đối tượng đã bị loại bỏ khỏi nó.
Lưu ý: Có một số trường hợp ngoại lệ cho quy tắc này, ví dụ: hầu hết các loại nguyên thủy như số nguyên có thể được giải tuần tự hóa với các phương thức của nó được bao gồm. Ngoài ra còn có một quá trình gọi là Rehydration trong đó một số phương thức có thể được thêm lại vào các đối tượng khử lưu huỳnh. Vì vậy, hãy cẩn thận và nhớ thành viên là bạn của bạn.
Bài tập về nhà
- Đọc những bí mật của PowerShell từ xa ebook của Don Jones.