PowerShell và mọi điều bạn cần biết về tiện ích này – Tin 24h

Công nghệ

PowerShell là gì?

Microsoft PowerShell là một tiện ích dòng lệnh và tiếng nói của một dân tộc kịch bản, là công cụ mạnh mẽ dành cho những quản trị viên, giúp bạn với thể tự động hóa hàng loạt nhiệm vụ cho máy tính và mạng. PowerShell chứa những 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 những quản trị viên khoa học thông tin mua để quản lý những mạng lớn.

Học nhữngh sử dụng PowerShell sẽ giúp đơn thuần hóa nhiều làm việc tẻ nhạt hàng ngày. Bạn cũng với thể thực hiện những thay đổi toàn hệ thống thông qua mạng mà ko 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 với rất nhiều nhữngh 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 nhữngh 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 những 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 với 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 với một nhiệm vụ bảo trì thường xuyên mất vài phút để thiết lập, bạn với thể tạo script cho những 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ở tập lệnh đó và nó sẽ chạy trong nền. Nắm vững logic script của PowerShell, hiểu nhữngh những object, var (biến) hoạt động và triển khai nó một nhữngh thông minh trên mạng của bạn sẽ lúcến cho bạn tự hỏi tại sao lại ko sử dụng PowerShell sớm hơn.

Hướng dẫn này sẽ mang tới 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 trưng nếu bạn đã quen thuộc với Command Prompt của Windows. Bài viết sẽ giới thiệu nhữngh sử dụng những công cụ và lệnh cơ bản, nhữngh thao tác với những tệp và thư mục, hiểu những mục tiêu, sử dụng những biến và quản lý những máy chủ từ xa.

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

Sau lúc 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 tiếng nói của một dân tộc kịch bản khá “sơ khai”: sử dụng những file Windows Command (.CMD và .BAT). Sự bổ sung của Windows Scripting Host và những tiếng nói của một dân tộc VBScript, JScript đã tăng đáng kể tính năng kịch bản cho trình tiện ích.

Những khoa học này là sự kết hợp khá cân bằng giữa tiện ích dòng lệnh tăng và môi trường kịch bản. Thực ra vấn đề với thể thao tác được với bao nhiêu file CMD.EXE, .CMD và Windows Scripting Host ko phải là mối quan tâm thực sự. Thứ lúcến cho 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 thuần.

Sử dụng “khung làm việc” của những 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 với sự kết hợp của cả những lệnh batch, Windows Scripting Host và những thực thi độc lập. Mỗi script đều sử dụng những 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 tư vấn trong CMD.EXE, những giao diện ko 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 lúcến cho 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 khoa học này, mọi thứ đều với 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ả những 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 những 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à cnắm vững được những khái niệm tăng hơn lúc tiếp cận với những 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à những 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 những 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 nền tảng sử dụng kế bên phiên bản WMF. Chẳng hạn, Windows 8 và Windows Server 2012 tư vấn 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 ko khả dụng trong Windows 7 ngay cả lúc chạy phiên bản WMF mới nhất.

Trên hầu hết những hệ thống Windows, người sử dụng sẽ với sẵn hai môi trường PowerShell, bảng điều lúcển PowerShell và PowerShell ISE (Môi trường tập lệnh tích hợp). Bảng điều lúcển PowerShell xuất hiện tương tự dòng lệnh truyền thống, nhưng với toàn bộ trọng lượng của PowerShell đằng sau nó. Tên biến, vòng lặp, hoàn thành tab và đường ống đều với sẵn từ bảng điều lúcển PowerShell. Để sử dụng sâu hơn (như xây dựng tập lệnh), PowerShell ISE cung cấp tính năng hoàn tất tab, highlight code và khả năng hoàn tất code Intellisense của Microsoft để tư vấn 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 tập lệnh PowerShell đồng thời sử dụng điều hướng theo tab.

cmdlets trong PowerShell

Nền tảng của những lệnh PowerShell chính là cmdlet. Microsoft đã thực hiện vài chiến lược thiết kế lúc 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 những tập lệnh dễ dàng hơn từ giao diện dòng lệnh.

cmdlet sử 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, những cmdlet được sử dụng để lđấy thông tin sẽ với độ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 chiếc 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, những tham số thường được sử dụng trong PowerShell cũng được đặt tên một nhữngh 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 mục tiêu xác thực, chứa thông tin đăng nhập của người sử dụng, để chạy lệnh với tư nhữngh là một người sử dụng cụ thể.

Module trong PowerShell

Bạn với 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 lúc bạn kết hợp nhiều lệnh với nhau). Dù những alias này ko 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 những tiện ích dòng lệnh truyền thống.

rong PowerShell, những 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ố với thể hoạt động theo hai nhữngh: chúng với thể sử dụng một alias được cmdlet xác định trước hoặc chúng với thể được đặt alias bằng nhữngh nhập đủ những ký tự để tạo ra kết quả khớp duy nhất giữa những tham số được tư vấn của cmdlet.

Kịch bản PowerShell = Các file Batch trên Steroids

Bản thân PowerShell được viết trong tiếng nói của một dân tộc .NET và dựa đa phần trên .NET Framework. Bởi vậy mà PowerShell được thiết kế như một trình tiện ích hướng mục tiêu và tiếng nói của một dân tộc kịch bản. Tất cả trong PowerShell đều được xem như một mục tiêu với đầy đủ tính năng của .NET Framework. Một lệnh đưa ra tập hợp những mục tiêu với thể được sử dụng bằng nhữngh sử dụng thuộc tính và phương thức của kiểu mục tiêu đó. Khi bạn muốn đưa dữ liệu đầu ra của một lệnh vào ống dẫn cho một lệnh khác, PowerShell thực tế sẽ cho mục tiêu qua, ko phải chỉ là dữ liệu đầu ra dạng text của dòng lệnh lần đầu tiên. Điều này tạo cho lệnh tiếp theo khả năng truy cập đầy đủ tất cả thuộc tính và phương thức của mục tiêu trong đường ống dẫn.

Việc coi tất cả mọi thứ như là một mục tiêu và khả năng chấp thuận mục tiêu giữa những lệnh là một thay đổi lớn về mặt lý thuyết cho những tiện ích dòng lệnh. Điều đó nói lên rằng, PowerShell vẫn hoạt động tương tự một trình tiện ích shell truyền thống. Lệnh, kịch bản, thực thi với thể được gõ và chạy từ dòng lệnh và kết quả được hiển thị ở dạng text. Các file windows .CMD và .BAT, VBScripts, JScripts và những thực thi hoạt động bên trong CMD.EXE, tất cả vẫn chạy trong PowerShell. Tuy nhiên, vì chúng ko hướng mục tiêu nên ko với quyền truy cập đầy đủ tới những mục tiêu được tạo và sử dụng trong PowerShell. Các kịch bản và thực thi di sản này vẫn sẽ coi mọi thứ dưới dạng text, nhưng bạn với thể kết hợp PowerShell với một số khoa học khác. Đây là điểm rất trọng yếu nếu bạn muốn bắt đầu sử dụng PowerShell bằng một tập tổng hợp những script đã tồn tại mà ko thể chuyển đổi hết chúng trong một lần.

Ví dụ về một PowerShell Script

Đọc và hiểu chiếc tuyệt vời của khoa học mới là một chuyện, còn xem xét và sử dụng nó lại là chuyện khác! Ở phần còn lại của bài này, chúng ta sẽ cùng phát triển một script PowerShell để minh chứng cho những khả năng cũng như nhữngh sử dụng của nó.

DIR là một trong những lệnh phổ biến nhất ở CMD.EXE. Lệnh này đưa ra tất cả file và thư mục con chứa trong một thư mục mẹ (như Hình 1). Cùng với tên của từng mục tiêu, thông tin đưa ra còn với ngày giờ update mới nhất và kích thước của từng file. DIR còn hiển thị kích thước tổng hợp của tất cả những file trong thư mục, cũng như tổng số file và tổng thư mục con.


Hình 1

Chạy DIR trong PowerShell cũng đưa ra một danh sách thư mục như Hình 2, nhưng hơi khác một chút. PowerShell ko với lệnh DIR mà thay vào đó là Get-ChildItem, cũng thực hiện chức năng tương tự. Trong PowerShell, DIR là một bí danh cho Get-ChildItem. Tôi ko với ý định đi sâu vào những bí danh trong bài này. Bạn với thể tưởng tượng DIR trong PowerShell như là một tên viết tắt cho Get-ChildItem.

DIR trong PowerShell cung cấp nhiều thông tin tương tự đã nói ở trên: một danh sách file và folder, ngày tháng thời gian update lần cuối và kích thước từng file. Tuy nhiên nó thiếu phần thông tin tóm tắt mà DIR trong CMD.EXE cung cấp: tổng kích thước của tất cả những file trong thư mục, tổng số file và tổng số thư mục con.


Hình 2

Với kịch bản ví dụ, bạn sẽ cần tạo một script PowerShell mô phỏng lệnh CMD.EXE DIR. Bên dưới tôi sẽ giải thích những phần cốt yếu nhất trong một script.

DIR.PS1: Tiêu đề (Header)

Một script PowerShell bao gồm những lệnh PowerShell trong một file văn bản thuần tuý với đuôi tăng khoảng trống .PS1. Thay thế DIR, bạn sẽ sử dụng một file text gọi là DIR.PS1.

Để chạy script, gõ lệnh như sau ở màn hình của PowerShell:

.DIR.PS1 X:Folder

Trong đó X là ký tự phân vùng ổ (như C, D, E) và Folder là tên thư mục.

Nếu muốn biết một số thông tin về phân vùng ổ, bạn sẽ phải sử dụng Windows Management Instrumentation (WMI). Chi tiết về WMI nằm ngoài phạm vi của bài này nên chúng ta sẽ ko nói tới ở đây. Nhưng đoạn mã PowerShell bên dưới cũng khá dễ hiểu để ko cần sử dụng tới trợ giúp của WMI. Bạn với thể tạo một biến “$filter” để sử dụng với lệnh Get-WmiObject. Biến lọc này (tức filter) nói với lệnh Get-WmiObject rằng bạn chỉ muốn với thông tin về một ổ đĩa cụ thể. Kết quả của lệnh Get-WmiObject được lưu trữ ở một biến gọi là $volInfo. Nhớ rằng, trong PowerShell mọi thứ đều là mục tiêu; $volInfo trên sự thật cũng là một mục tiêu kết quả trả ra từ Get-WmiObject.

$filter = “DeviceID = ‘” + $drive + “:'”
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Bây giờ bạn đã với thể truy cập tất cả những mục tiêu và phương thức gắn với mục tiêu. Dãy số của phân vùng ổ với thể truy cập qua thuộc tính VolumeSerialNumber. Thông tin trả về là một dãy số dạng xâu 8 ký tự. Nhưng thường thì bạn muốn định dạng nó theo kiểu bốn số tách riêng một, nhữngh nhau bởi một dấu nối ngang. với thể thực hiện tương tự như ở dòng bên dưới. Dấu nối ở cuối dòng thứ nhất là ký tự nối tiếp dòng trong PowerShell. Về cơ bản, nó chỉ nói cho PowerShell biết rằng dòng ko bị ngắt quãng mà bao gồm cả dòng tiếp theo. Khi viết mã ko cần phân tách dòng, nhưng để giảm bề rộng và để cho đoạn mã dễ đọc, bạn nên thực hiện điều này.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + “-” + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Bây giờ đã với mục tiêu $volInfo, bạn với thể viết thông tin header DIR cho màn hình. Nếu ổ đĩa ko với tên, đoạn text viết cho màn hình sẽ khác một chút so với ổ đĩa với tên. Một lệnh If-Else đơn thuần được sử dụng để kiểm tra xem thuộc tính VolumeName với là xâu rỗng hay ko. Lệnh Write-Host được sử dụng để viết từng dòng lệnh cho màn hình.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Ký tự “ `n ” ở đầu và cuối lệnh Write-Host được sử dụng để chèn dòng mới vào trước và sau văn bản. Lệnh Write-Host thêm một dòng mới vào cuối mỗi dòng. Vì thế tác động của “ `n ” là tạo dòng trống trước và sau dòng văn bản.

Bạn với nhắm cụm “-eq” trong lệnh If? Đó là một toán tử so sánh bằng. Bảng bên dưới sẽ cho bạn biết tất cả những toán tử so sánh:

-eq, -ieq So sánh bằng
-ne, -ine So sánh ko bằng
-gt, -igt So sánh lớn hơn
-ge, -ige So sánh lớn hơn hoặc bằng
-lt, -ilt So sánh nhỏ hơn
-le, -ile So sánh nhỏ hơn hoặc bằng

Ký tự -i ở trước những toán tử so sánh là để chỉ toán tử đó ko phân biệt chữ hoa, chữ thường.


Hình 3: Dữ liệu đầu ra (output) của script hiện bạn đang với

DIR.PS1: Danh sách file/thư mục

Bây giờ, bạn đã sẵn sàng hiển thị nội dung và đặc tính của thư mục này. Điều lần đầu tiên cần làm là gọi lệnh PowerShell Get-ChildItem để đưa ra tập hợp những file và đưa vào script như một tham số. Lệnh Get-ChildItem sẽ lđấy ra tập hợp mục tiêu file và folder, ko chỉ tên mà còn dẫn ống những mục tiêu này trực tiếp vào lệnh Sort-Object để sắp xếp chúng. Mặc định lệnh Sort-Object sẽ sắp xếp mục tiêu dựa theo thuộc tính Name. Vì thế bạn ko cần phải mô tả bất kỳ tham số khác nào. Tập hợp những mục tiêu đã sắp xếp sau đó sẽ được lưu trữ trong một biến với tên $items.

$items = Get-ChildItem $args[0] | Sort-Object

Sau lúc với được tập hợp mục tiêu file và folder, bạn cần lặp vòng lại chúng và hiển thị những đặc trưng phù hợp. Lệnh sử dụng cho việc này là ForEach. Với từng file hay folder, đặc trưng được hiển thị ra sẽ là ngày giờ update cuối cùng, tên, chiều dài hay kích thước file. Thứ lạ trông như những xâu ký tự bên trong ngoặc tròn là mã định dạng xâu .NET. Chúng được sử dụng để căn lề trái/phải cho những trường và định dạng ngày tháng, thời gian, số. Việc hiểu những mã định dạng xâu này ko trọng yếu lắm, vì chúng ko phải là thứ cốt yếu phản ánh bản chất của script này.

Lệnh If là nơi bạn xác định xem liệu với mục tiêu nào là thư mục hay ko. Nếu ký tự lần đầu tiên của thuộc tính Mode là “d”, mục tiêu là một thư mục. Bạn cần kiểm tra lại vì mã viết cho thư mục thường khác với mã viết cho file.

Chú ý dòng $totalDirs++ bên trong lệnh If. Đây là bộ đếm với trách nhiệm theo dõi số thư mục. Tương tự, với một biến $totalFiles được sử dụng để theo dõi tổng kích thước của tất cả những file. Những giá trị này luôn được tính toán trong quá trình thực thi. Nhưng chúng chỉ được hiển thị lúc quá trình lập danh sách file kết thúc.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}


Hình 4: Hiển thị dữ liệu xuất của script được update.

DIR.PS1: Hậu đề (Footer)

Chỉ còn một việc còn lại là viết lên màn hình tổng số file, thư mục, kích thước tổng cùng của tất cả những file và ko gian trống trên phân vùng ổ này. Để thực hiện bạn sẽ cần sử dụng những biến bộ đếm ($totalFiles, $totalDirs, $totalSize) đã tạo ở phần trước. Bạn với thể biết được lượng ko gian trống từ biến $volInfo đã tạo từ lúc bắt đầu viết script.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")


Hình 5: Hiển thị hoàn toàn dữ liệu đầu ra (output) của script.

Những dự báo và khả năng tăng với thể

Mặc dù script mà bạn tạo đưa ra dữ liệu đầu ra sắp giống hệt của lệnh CMD.EXE DIR nhưng cũng với một số dự báo bạn cần biết tới và một số tăng với thể thực hiện được.

  • Bản script này ko thực hiện bất kỳ kiểm tra lỗi nào.
  • Nếu một đường dẫn hợp lệ ko được đưa vào script, script sẽ hỏng với một thông báo lỗi PowerShell.
  • Tổng số thư mục đưa ra trong script ít hơn 2 so với kết quả từ lệnh CMD.EXE DIR vì lệnh Get-ChildItem ko tính hai thư mục “.” và “..” như ở CMD.EXE.
  • Script của bạn chỉ sắp xếp thứ tự theo tên file, tên thư mục và ko cung cấp thêm bất kỳ nhữngh sắp xếp theo thuộc tính nào khác.
  • Script của bạn ko với khả năng hiển thị nội dung thư mục và tất cả thư mục con.

Kết luận

Mặc dù PowerShell là một trình tiện ích và tiếng nói của một dân tộc scripting mạnh nhưng bạn chỉ cần bỏ ra ít thời gian là đã với thể nắm bắt và sử dụng nó, nhất là lúc chưa quen thuộc với môi trường .NET Framework. Tôi hy vọng bài báo này cùng với script ví dụ sẽ hữu ích cho bất kỳ ai muốn hiểu về PowerShell. Nhưng script được tạo ví dụ trong bài khá đơn thuần. Tin rằng nó với thể được xây dựng, phát triển hoàn thiện hơn để phục vụ tốt cho nhiều trình ứng dụng phức tạp hơn.

Các bạn đang xem tin tức tại Tin 24h 24h – Chúc những bạn một ngày vui vẻ

Từ khóa: PowerShell và mọi điều bạn cần biết về tiện ích này

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai.