PowerShell là gì?

phanhao

Member
gemgem
Tham gia
18/03/2025
Bài viết
160
Được Like
0
Coin
0
Points
800
Microsoft PowerShell là một tiện ích dòng lệnh và ngôn ngữ kịch bản, là công cụ mạnh mẽ dành cho các quản trị viên, giúp bạn có thể tự động hóa hàng loạt nhiệm vụ cho máy tính và mạng. PowerShell chứa các thành phần của Command Prompt và được xây dựng trên framework .NET. Nếu bạn đang tìm hiểu về quản trị mạng, thì bạn cần biết rằng PowerShell chính là công cụ được các quản trị viên công nghệ thông tin chọn để quản lý các mạng lớn.

Học cách sử dụng PowerShell sẽ giúp đơn giản hóa nhiều công việc tẻ nhạt hàng ngày. Bạn cũng có thể thực hiện các thay đổi toàn hệ thống thông qua mạng mà không phải điều chỉnh riêng lẻ cho từng máy chủ. PowerShell đang trở thành một phần thiết yếu trong việc vận hành môi trường đám mây lai.

PowerShell có rất nhiều cách sử dụng khác nhau giúp làm việc tối ưu hơn và giữ cho mạng hoạt động hiệu quả. Những cách sử dụng cơ bản nhất bao gồm: lên lịch cập nhật hàng ngày trên các hệ thống, tạo báo cáo cho những tiến trình hiện tại, dịch vụ theo chu kỳ và nhiều thứ khác. Đúng là nhiều tác vụ trong số này có thể được thực hiện thông qua GUI, tuy nhiên quan điểm của PowerShell là thực hiện chúng nhanh hơn.

Nếu bạn có một nhiệm vụ bảo trì thường xuyên mất vài phút để thiết lập, bạn có thể tạo script cho các chức năng tương tự trong một lệnh duy nhất, đặt tên trên PowerShell. Như vậy, lần tiếp theo, bạn chỉ cần mở script đó và nó sẽ chạy trong nền. Nắm vững logic script của PowerShell, hiểu cách các object, var (biến) hoạt động và triển khai nó một cách thông minh trên mạng của bạn sẽ khiến bạn tự hỏi tại sao lại không sử dụng PowerShell sớm hơn.

Hướng dẫn này sẽ mang đến những kiến thức cơ bản về PowerShell, giúp ích cho những bạn mới học CNTT, đặc biệt nếu bạn đã quen thuộc với Command Prompt của Windows. Bài viết sẽ giới thiệu cách sử dụng các công cụ và lệnh cơ bản, cách thao tác với các file và thư mục, hiểu các đối tượng, sử dụng các biến và quản lý các máy chủ từ xa.

Lịch sử vắn tắt của tiện ích dòng lệnh Windows

Sau khi Windows NT ra đời, CMD.EXE trở thành tiện ích dòng lệnh cho Windows. Mặc dù CMD.EXE thừa hưởng một số thành phần của người tiền nhiệm DOS (COMMAN.COM), nhưng nó vẫn dựa trên một ngôn ngữ kịch bản khá “sơ khai”: sử dụng các file Windows Command (.CMD và .BAT). Sự bổ sung của Windows Scripting Host và các ngôn ngữ VBScript, JScript đã nâng cao đáng kể tính năng kịch bản cho trình tiện ích.

Những công nghệ này là sự kết hợp khá cân bằng giữa tiện ích dòng lệnh nâng cao và môi trường kịch bản. Thực ra vấn đề có thể thao tác được với bao nhiêu file CMD.EXE, .CMD và Windows Scripting Host không phải là mối quan tâm thực sự. Thứ khiến người ta phàn nàn và bận tâm nhất là hoàn thành một số nhiệm vụ dường như đơn giản.

Sử dụng “khung làm việc” của các công cụ dòng lệnh và kịch bản, bất kỳ script ở mức tổng hợp vừa phải cũng đòi hỏi phải có sự kết hợp của cả các lệnh batch, Windows Scripting Host và các thực thi độc lập. Mỗi script đều sử dụng các quy ước khác nhau cho quá trình thực thi và yêu cầu, phân tích cú pháp, trả về dữ liệu.

Những biến yếu hỗ trợ trong CMD.EXE, các giao diện không nhất quán và khả năng truy cập giới hạn thiết lập Windows, kết hợp với một điểm yếu khác khiến kịch bản dòng lệnh trở nên khó khăn hơn trong triển khai và sử dụng. Chắc bạn sẽ thắc mắc ngay ‘một điểm yếu khác’ ở đây là gì? Xin thưa rằng đó là văn bản thuần tuý (text). Ở những công nghệ này, mọi thứ đều có dạng text. Dữ liệu đầu ra (output) của một lệnh hay kịch bản là text và phải được phân tích cú pháp cũng như định dạng lại để hoạt động như dữ liệu đầu vào (input) cho lệnh tiếp theo. Đây chính là điểm xuất phát cơ bản mà PowerShell lấy ra từ tất cả các trình tiện ích truyền thống.

Giới thiệu công cụ, lệnh và mô-đun của PowerShell

Ba khái niệm được giới thiệu trong phần này chỉ là những kiến thức rất cơ bản để hiểu các khái niệm chính tạo thành nền tảng của PowerShell. Bạn sẽ cần dành thêm thời gian để tìm hiểu và nắm vững được những khái niệm nâng cao hơn khi tiếp cận với các lệnh của PowerShell.

Công cụ PowerShell

PowerShell được cài đặt theo mặc định trong Windows 10, Windows 7, Windows Server 2008 R2 và các phiên bản Windows mới hơn. Những bản PowerShell mới được bổ sung thêm nhiều tính năng mới và "cmdlets" (thuật ngữ của Microsoft cho các lệnh PowerShell - phát âm là "command-lets") và được cài đặt bằng phiên bản tương ứng của Windows Management Framework (WMF).

Hiện tại WMF 5.1 là phiên bản mới nhất được khuyến nghị sử dụng. Trong một số trường hợp, một số tính năng mới phụ thuộc vào hệ điều hành bên cạnh phiên bản WMF. Chẳng hạn, Windows 8 và Windows Server 2012 hỗ trợ cmdlet Test-NetConnection, cho phép bạn kiểm tra kết nối với một cổng TCP/IP cụ thể, nhưng cmdlet này không khả dụng trong Windows 7 ngay cả khi chạy phiên bản WMF mới nhất.

Trên hầu hết các hệ thống Windows, người dùng sẽ có sẵn hai môi trường PowerShell, bảng điều khiển PowerShell và PowerShell ISE (Môi trường script tích hợp). Bảng điều khiển PowerShell xuất hiện giống như dòng lệnh truyền thống, nhưng với toàn bộ tính năng đầy đủ của PowerShell đằng sau nó. Tên biến, vòng lặp, tự động hoàn thành lệnh và piping có sẵn từ bảng điều khiển PowerShell.

Để sử dụng sâu hơn (như xây dựng script), PowerShell ISE cung cấp tính năng tự động hoàn thành câu lệnh, highlight code và khả năng hoàn tất code Intellisense của Microsoft để hỗ trợ bạn tạo và kiểm tra code PowerShell. PowerShell ISE cũng cho phép bạn làm việc với nhiều script PowerShell đồng thời sử dụng điều hướng theo tab.

cmdlets trong PowerShell

Nền tảng của các lệnh PowerShell chính là cmdlet. Microsoft đã thực hiện vài chiến lược thiết kế khi tạo ra cmdlet trong PowerShell.

Đầu tiên là khả năng dễ dàng suy ra tên của cmdlet hoặc ít nhất là làm cho chúng dễ khám phá hơn. Các lệnh PowerShell hay cmdlet cũng được thiết kế để dễ sử dụng hơn, cú pháp được tiêu chuẩn hóa, giúp tạo các script dễ dàng hơn từ giao diện dòng lệnh.

cmdlet dùng định dạng Verb-Noun (động từ - danh từ) như trong Get-Service, Stop-Service, hay Import-Csv. Phần động từ trong tên của cmdlet sẽ chỉ ra hành động được thực hiện trên danh từ. Thông thường, các cmdlet được sử dụng để lấy thông tin sẽ có động từ Get (lấy) trong tên, ví dụ như Get-Process hay Get-Content. Lệnh sử dụng để chỉnh sửa cái gì đó thường bắt đầu với động từ Set, để thêm thực thể mới vào đâu đó thì thường bắt đầu với Add hoặc New.

Thứ 2, các tham số thường được sử dụng trong PowerShell cũng được đặt tên một cách chuẩn hóa. Ví dụ, tham số -ComputerName cho phép cmdlet được thực hiện trên một hoặc nhiều máy tính từ xa. -Credential được sử dụng để cung cấp một đối tượng xác thực, chứa thông tin đăng nhập của người dùng, để chạy lệnh với tư cách là một người dùng cụ thể.

Module trong PowerShell

Bạn có thể sử dụng alias (bí danh) cho cả cmdlet và tham số để tiết kiệm số lần nhấn phím, rút ngắn độ dài tổng thể của câu lệnh (rất hữu ích khi bạn kết hợp nhiều lệnh với nhau). Dù các alias này không phải lúc nào cũng sử dụng quy ước đặt tên tiêu chuẩn, nhưng chúng vẫn phản ánh các tiện ích dòng lệnh truyền thống.

Trong PowerShell, các alias như DIR, CD, DEL và CLS tương ứng với cmdlet Get-ChildItem, Set-Location, Remove-Item và Clear-Host tương ứng. Alias tham số có thể hoạt động theo hai cách: chúng có thể sử dụng một alias được cmdlet xác định trước hoặc chúng có thể được đặt alias bằng cách nhập đủ các ký tự để tạo ra kết quả khớp duy nhất giữa các tham số được hỗ trợ của cmdlet.

Quản lý file và thư mục

Hầu hết quản trị viên hệ thống đều phải thao tác với file, thư mục trong quá trình làm việc của mình, đó có thể là di chuyển thư mục đến một vị trí khác trên máy chủ, lưu trữ file nhật ký hoặc tìm kiếm file lớn. Trong trường hợp các thao tác giống nhau bị lặp lại trên nhiều file thì dùng PowerShell để tự động hóa chúng sẽ là giải pháp tiết kiệm thời gian hiệu quả.

Để tìm file và thư mục thì một trong những công cụ dòng lệnh đầu tiên mà quản trị viên sẽ học trong máy tính ngày xưa là lệnh dir. Dir sẽ liệt kê file và thư mục có trong thư mục được chỉ định.

PowerShell có một lệnh tương tự ở dạng Cmdlet Get-ChildItem. Get-ChildItem cho phép bạn nhanh chóng xây dựng danh sách file trong thư mục theo cách để bạn có thể thao tác trên file này thông qua một lệnh pipe hoặc gán đầu ra cho một biến.

Get-ChildItem có thể được sử dụng đơn giản bằng cách cung cấp một đường dẫn, thông qua pipeline, sử dụng tham số -Path hoặc ngay sau tên cmdlet. Để điều chỉnh phản hồi do Get-ChildItem trả về, cần phải xem xét một số tham số được tạo sẵn bởi cmdlet.

Tham số -Filter là một cách bạn có thể tìm kiếm file. Mặc định, Get-ChildItem chỉ trả về các phần tử con trực tiếp của thư mục đích. Chức năng này có thể được mở rộng bằng cách sử dụng thêm -Recurse, tìm kiếm đệ quy các thư mục chứa trong thư mục hiện tại.

Trong PowerShell 4.0 Get-ChildItem thêm khả năng giới hạn kết quả cho file hoặc thư mục bằng cách sử dụng switch –File hoặc –Directory. Các phiên bản trước của PowerShell phải chuyển kết quả đến Where-Object, lọc trên thuộc tính PSIsContainer để thực hiện quyết định này.
 
Top Bottom