PowerShell cung cấp cho bạn toàn bộ quyền kiểm soát cần thiết đối với PC Windows, và nó dễ học. Vì vậy, hãy từ bỏ Command Prompt và dùng các lệnh Windows PowerShell để tự động hóa những tác vụ quản trị lặp đi lặp lại.
Học PowerShell cũng dạy bạn cách xử lý hầu hết tác vụ quản trị Linux bên trong shell bash. PowerShell tương tự như những gì bạn tìm thấy trong hầu hết các bản phân phối Linux.
PowerShell là gì?
Windows PowerShell là giao diện dòng lệnh (command-line interface) và ngôn ngữ kịch bản (scripting language) được Microsoft phát triển cho quản trị viên hệ thống. Nhưng bạn không phải là admin hoặc lập trình viên để dùng nó vì nó đơn giản hơn nhiều so với các ngôn ngữ lập trình khác. Nó giống tiếng Anh thông thường, và mọi người có thể hiểu và dùng để quản trị máy tính.
Các lệnh dùng trong Windows PowerShell được gọi là "cmdlets". Chúng cho phép bạn kích hoạt một hành động cụ thể, hoặc chuỗi hành động, trên máy tính. Những hành động này có thể đơn giản, như đăng nhập mạng không dây, hoặc phức tạp hơn, như tự động hóa các tác vụ lặp lại cụ thể.
Để mở PowerShell, nhấn nút Start, gõ "powershell" vào hộp tìm kiếm và chọn Windows PowerShell. Bạn sẽ mở giao diện dòng lệnh, sẵn sàng để bắt đầu gõ lệnh.
Trong bài viết này, chúng tôi sẽ đi qua mười lệnh PowerShell hữu ích và dễ dùng nhất.
1. Get-Help
Cmdlet Get-Help là điểm khởi đầu tuyệt vời trong PowerShell. Nó cung cấp tổng quan về những gì bạn có thể làm và cũng rất hay khi bạn cần thêm thông tin về một cmdlet cụ thể.
Chỉ cần mở cửa sổ PowerShell và gõ Get-Help. Điều này sẽ mở tổng quan toàn diện dạy bạn PowerShell là gì, và bạn sẽ hiểu chức năng và cấu trúc của nó. Bạn cũng có thể truy cập web để lấy file trợ giúp nâng cao trực tiếp qua giao diện. Bạn có thể tải các file này để dùng sau.
Nhưng chưa hết với lệnh get-help. Gõ:
Get-Help *
PowerShell sẽ liệt kê tất cả cmdlets bạn có thể dùng lúc đó. Danh sách có thể rất lớn, bạn không cần học tất cả cmdlets hiển thị. Nhưng hãy thoải mái đọc và khám phá tất cả khả năng có sẵn.
Gõ:
Get-Help <tên lệnh>
Bạn không cần ngoặc, chỉ gõ tên lệnh bạn quan tâm, cmdlet này sẽ cho bạn thông tin cơ bản về nó. Để có giải thích chi tiết hơn về một lệnh, gõ:
Get-Help <tên lệnh> -Full
Nếu cần ví dụ cách dùng một lệnh cụ thể, gõ:
Get-Help <tên lệnh> -Example
2. Get-Command
Bạn muốn truy xuất thông tin về một lệnh cụ thể hoặc tập hợp lệnh nhanh chóng? Cmdlet Get-Command sẽ làm điều đó cho bạn. Có rất nhiều tùy chọn trong Get-Command, nhưng bạn, với tư cách người dùng cơ bản của PowerShell, không cần hầu hết chúng. Dưới đây là một số cmdlet cơ bản hữu ích, đặc biệt khi điều hướng các lệnh có sẵn.
Nếu muốn danh sách cmdlets cụ thể cùng loại:
Get-Command -<CommandType>
Ví dụ, cụm từ phức tạp này sẽ ra lệnh cho máy tính hiển thị danh sách tất cả lệnh loại cmdlet có sẵn và sắp xếp theo thứ tự bảng chữ cái của danh từ trong tên:
Get-Command -Type Cmdlet | Sort-Object -Property Noun | Format-Table -GroupBy Noun
Đây là ví dụ tuyệt vời của một lệnh phức tạp hơn sẽ khiến PowerShell thực thi tác vụ phức tạp. Khi bạn hiểu cú pháp, bạn sẽ thấy dùng PowerShell thường là cách nhanh nhất và dễ nhất để làm một số việc trên máy tính.
Nếu muốn tìm lệnh cụ thể theo tên, chỉ cần gõ:
Get-Command -Name <tên lệnh>
Nếu không biết tên chính xác của lệnh bạn tìm nhưng biết một phần tên, bạn có thể gõ:
Get-Command -Name <tên lệnh> -UseFuzzyMatching
Cmdlet này sẽ nhờ máy tính tìm các lệnh khớp gần với những gì bạn gõ trong trường
3. Get-Content
Nếu muốn xem nội dung file, dùng cmdlet Get-Content. Bạn cần chỉ định vị trí chính xác của file đó để máy tính tìm được.
Trong ví dụ trên, bạn thấy nội dung file văn bản test tạo ra cho mục đích này. Đây là lệnh đơn giản, nhưng nếu bạn biết nó làm gì, bạn có thể kết hợp với lệnh khác và thực hiện tác vụ thật mạnh mẽ qua Windows PowerShell.
4. Get-Process
Cmdlet Get-Process sẽ cho bạn thông tin về các tiến trình (process) đang chạy trên máy tính. Bạn có thể xem sử dụng bộ nhớ, chu kỳ CPU, ID tiến trình và các thuộc tính khác.
Nếu thêm tên tiến trình vào cmdlet này, bạn có thể xem thông tin về một tiến trình cụ thể. Ví dụ: nếu muốn thông tin tiến trình ứng dụng Discord, chỉ cần gõ Get-Process Discord.
Bạn có thể bắt đầu hoặc dừng tiến trình qua PowerShell bằng cách thay thế tiền tố "Get" của cú pháp. Để bắt đầu tiến trình, gõ:
Start-Process <tên hoặc ID tiến trình>
Để dừng tiến trình, gõ:
Stop-Process <tên hoặc ID tiến trình>
5. Get-Service
Là quản trị viên hệ thống, bạn có thể thấy cmdlet Get-Service rất hữu ích. Cmdlet đơn giản này sẽ hiển thị tất cả dịch vụ (services) đang chạy trên hệ thống và cho phép bạn kiểm soát chúng. Điều này nghĩa là bạn có thể thấy tất cả chương trình đang làm việc để máy tính chạy.
Bây giờ bạn có thể dùng tên dịch vụ để kiểm soát nó. Dùng lệnh như Restart-Service <tên dịch vụ> để khởi động lại dịch vụ bị treo, Stop-Service <tên dịch vụ> để dừng hoàn toàn, và Start-Service để khởi động lại.
6. Get-Item
Nếu cần một mục (item) cụ thể, có thể nhanh hơn tìm qua PowerShell thay vì dùng thanh tìm kiếm tích hợp của hệ điều hành. Đặc biệt tiện lợi nếu bạn biết vị trí file cần tìm. Chỉ cần dùng lệnh theo cách này:
Get-Item C:
Điều này sẽ đưa ra danh sách file trong ổ cứng "C:". Bạn có thể cụ thể hơn và tìm trong tất cả thư mục dưới hồ sơ người dùng hoặc đi sâu vào thư mục "documents" hoặc "downloads". Để làm vậy, gõ:
Get-Item C:\users\<tên người dùng>\*
Nếu cần truy xuất mục con (child item) từ một container (thùng chứa), như thư mục hệ thống, bạn có thể dùng cmdlet Get-ChildItem. Lệnh này sẽ hiển thị tất cả file và thư mục bên trong container đó. Giống như Get-Item, bạn cần chỉ định đường dẫn container.
Để xóa mục, bạn có thể thay hậu tố "Get" bằng "Remove". Điều này cho phép xóa mọi thứ, từ file và thư mục đến khóa registry và hàm. Gõ Remove-Item <đường dẫn\ tên>. Bạn có thể mở rộng cmdlet này để chỉ xóa file ẩn và "read-only" (chỉ đọc) hoặc xóa mục từ thư mục và thư mục con cụ thể.
7. ConvertTo-Html
Lệnh này giúp chuyển đổi đối tượng .NET thành file HTML có thể hiển thị trong trình duyệt web. Đây là cmdlet đầu ra (output), nghĩa là nó hoạt động tốt với các cmdlet khác. Chỉ cần thêm nó vào cuối các cmdlet khác và bao gồm đường dẫn file cụ thể.
Ví dụ, nếu muốn tạo file HTML hiển thị tên, đường dẫn và công ty của tất cả tiến trình hiện tại của máy tính cục bộ, gõ:
Get-Process | ConvertTo-Html -Property Name, Path, Company -Title "Process Information" | Out-File filename.htm
Thay filename.htm bằng bất kỳ tên file nào bạn muốn.
Để mở file đã tạo, dùng cmdlet Invoke-Item cộng với <tên file.htm>. Nội dung sẽ trông giống hình dưới.
8. Set-Executionpolicy
Nếu muốn chạy script PowerShell cục bộ, bạn phải thay đổi chính sách thực thi (execution policy) của chính PowerShell. Trên máy tính Windows, chính sách thực thi luôn bị hạn chế (restricted), và bạn cần thay thành RemoteSigned hoặc Unrestricted. Trên máy không phải Windows như Linux hay Mac, nó thường được đặt là Unrestricted và không thể thay đổi.
Nếu muốn tìm hiểu thêm về chính sách thực thi PowerShell, chỉ cần gõ:
help Set-ExecutionPolicy
PowerShell sẽ hiển thị file trợ giúp về chính sách thực thi trên máy hoặc thông báo nếu không có. Nhưng cũng cung cấp đường link bạn có thể theo dõi và đọc trực tuyến.
Để đặt chính sách thành RemoteSigned, gõ:
Set-Executionpolicy RemoteSigned
Để đặt thành Unrestricted, gõ:
Set-Executionpolicy Unrestricted
Để kiểm tra cài đặt hiện tại cho chính sách thực thi, gõ:
Get-Executionpolicy
Vì chính sách thực thi là một phần của chiến lược bảo mật PowerShell, nó sẽ yêu cầu xác nhận thay đổi. Gõ Y chỉ khi bạn chắc chắn muốn tiếp tục.
9. Select-Object
Lệnh này dùng để chọn đối tượng và tập hợp đối tượng, đối tượng duy nhất, và đối tượng ở vị trí cụ thể trong mảng. Có các tham số khác nhau để chỉ định đối tượng bạn muốn chọn. Trong số đó có thuộc tính (properties), giá trị số, và đối tượng đầu vào cụ thể.
Để chọn đối tượng theo thuộc tính, bạn cần chỉ định thuộc tính như name, ID, hoặc CPU. Bạn thậm chí có thể nhóm các thuộc tính, nhưng phải phân tách bằng dấu phẩy khi gõ lệnh. Để thấy cmdlet Select-Object hoạt động, gõ:
Get-Process | Select-Object -Property ProcessName, Id, CPU
PowerShell sẽ liệt kê tất cả tiến trình hiện tại và thuộc tính của chúng, như hình dưới.
Bây giờ bạn có thể dùng lệnh -ExpandProperty để lấy thông tin chi tiết về thuộc tính cụ thể. Nếu muốn chi tiết về thuộc tính Modules của loại thuộc tính ProcessName:
Get-Process Chrome | Select-Object -Property ProcessName -ExpandProperty Modules | Format-list
Đầu ra "Format-list" của lệnh ở đó để làm cho kết quả được định dạng và dễ đọc.
10. Export-CSV
Đôi khi lệnh PowerShell cho ra danh sách dài, như chúng ta thấy với cmdlet Get-Command. Danh sách dài và nhiều thông tin khó đọc, bạn muốn nó tổ chức hơn. Để làm vậy, xuất tất cả dữ liệu ra file CSV. Bạn có thể làm trực tiếp trong PowerShell bằng hàm Export-CSV.
Ví dụ, chúng ta thấy cmdlet Get-Command cho danh sách dài tất cả cmdlet có thể dùng trong PowerShell lúc đó. Bạn có thể kết hợp Get-Command và Export-CSV để tạo danh sách chi tiết với giá trị phân cách bằng dấu phẩy như name, source, version mà ứng dụng như Excel có thể nhận diện.
Để làm vậy, gõ lệnh sau vào dấu nhắc lệnh PowerShell nhưng lưu ý bạn có thể đặt bất kỳ đường dẫn nào, và đặt tên file khác:
Get-Command | Select Name, Source, Version | export-csv D:\AllCommands.csv
Bây giờ bạn có thể mở danh sách trong Excel, và bạn nên thấy gì đó tương tự hình sau.