1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Khai quat v power shell

9 89 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Khái quát PowerShell Windows PowerShell trình tiện ích dòng lệnh ngơn ngữ kịch Microsoft cung cấp Tạo lại phải nghiên cứu quan tâm đến PowerShell? Vì trình tiện ích kiểu khác biệt? Tất nhiên, tiện ích khẳng định “khác” so với cũ, PowerShell có số thành phần thực phân biệt với trình tiện ích khác Ở xem xét số thành phần ngôn ngữ kịch PowerShell tạo kịch (script) PowerShell ví dụ từ thứ dường lộn xộn Lịch sử vắn tắt tiện ích dòng lệnh Windows Sau Windows NT đời, CMD.EXE trở thành tiện ích dòng lệnh cho Windows Mặc dù CMD.EXE thừa hưởng số thành phần người tiền nhiệm DOS (COMMAN.COM), dựa ngôn ngữ kịch “sơ khai”: sử dụng file Windows Command (.CMD BAT) Sự bổ sung Windows Scripting Host ngôn ngữ VBScript, JScript nâng cao đáng kể tính kịch cho trình tiện ích Những cơng nghệ kết hợp cân tiện ích dòng lệnh nâng cao môi trường kịch Thực vấn đề thao tác với file CMD.EXE, CMD Windows Scripting Host mối quan tâm thực Thứ khiến người ta phàn nàn bận tâm hoàn thành số nhiệm vụ dường đơn giản Sử dụng “khung làm việc” cơng cụ dòng lệnh kịch bản, script mức tổng hợp vừa phải đòi hỏi phải có kết hợp lệnh batch, Windows Scripting Host thực thi độc lập Mỗi script sử dụng quy ước khác cho q trình thực thi u cầu, phân tích cú pháp, trả liệu Những biến yếu hỗ trợ CMD.EXE, giao diện không quán khả truy cập giới hạn thiết lập Windows, kết hợp với điểm yếu khác khiến kịch dòng lệnh trở nên khó khăn triển khai sử dụng Chắc bạn thắc mắc ‘một điểm yếu khác’ gì? Xin thưa văn tuý (text) Ở công nghệ này, thứ có dạng text Dữ liệu đầu (output) lệnh hay kịch text phải phân tích cú pháp định dạng lại để hoạt động liệu đầu vào (input) cho lệnh Đây điểm xuất phát mà PowerShell lấy từ tất trình tiện ích truyền thống Kịch PowerShell = Các file Batch Steroids Bản thân PowerShell viết ngôn ngữ NET dựa chủ yếu NET Framework Bởi mà PowerShell thiết kế trình tiện ích hướng đối tượng ngơn ngữ kịch Tất PowerShell xem đối tượng với đầy đủ tính NET Framework Một lệnh đưa tập hợp đối tượng sử dụng cách dùng thuộc tính phương thức kiểu đối tượng Khi bạn muốn đưa liệu đầu lệnh vào ống dẫn cho lệnh khác, PowerShell thực tế cho đối tượng qua, liệu đầu dạng text dòng lệnh Điều tạo cho lệnh khả truy cập đầy đủ tất thuộc tính phương thức đối tượng đường ống dẫn Việc coi tất thứ đối tượng khả chấp thuận đối tượng lệnh thay đổi lớn mặt lý thuyết cho tiện ích dòng lệnh Điều nói lên rằng, PowerShell hoạt động giống trình tiện ích shell truyền thống Lệnh, kịch bản, thực thi gõ chạy từ dòng lệnh kết hiển thị dạng text Các file windows CMD BAT, VBScripts, JScripts thực thi hoạt động bên CMD.EXE, tất chạy PowerShell Tuy nhiên, chúng khơng hướng đối tượng nên khơng có quyền truy cập đầy đủ tới đối tượng tạo dùng PowerShell Các kịch thực thi di sản coi thứ dạng text, bạn kết hợp PowerShell với số công nghệ khác Đây điểm quan trọng bạn muốn bắt đầu sử dụng PowerShell tập tổng hợp script tồn mà chuyển đổi hết chúng lần Một PowerShell Script Đọc hiểu tuyệt vời công nghệ chuyện, xem xét sử dụng lại chuyện khác! Ở phần lại này, phát triển script PowerShell để minh chứng cho khả cách sử dụng DIR lệnh phổ biến CMD.EXE Lệnh đưa tất file thư mục chứa thư mục mẹ (như Hình 1) Cùng với tên đối tượng, thơng tin đưa có ngày update kích thước file DIR hiển thị kích thước tổng hợp tất file thư mục, tổng số file tổng thư mục Hình Chạy DIR PowerShell đưa danh sách thư mục Hình 2, khác chút PowerShell khơng có lệnh DIR mà thay vào Get-ChildItem, thực chức tương tự Trong PowerShell, DIR bí danh cho Get-ChildItem Tơi khơng có ý định sâu vào bí danh Bạn tưởng tượng DIR PowerShell tên viết tắt cho Get-ChildItem DIR PowerShell cung cấp nhiều thông tin giống nói trên: danh sách file folder, ngày tháng thời gian update lần cuối kích thước file Tuy nhiên thiếu phần thơng tin tóm tắt mà DIR CMD.EXE cung cấp: tổng kích thước tất file thư mục, tổng số file tổng số thư mục Hình Với kịch ví dụ, bạn cần tạo script PowerShell mô lệnh CMD.EXE DIR Bên giải thích phần cốt yếu script DIR.PS1: Tiêu đề (Header) Một script PowerShell bao gồm lệnh PowerShell file văn tuý với đuôi mở rộng PS1 Thay DIR, bạn dùng file text gọi DIR.PS1 Để chạy script, gõ lệnh sau hình PowerShell: DIR.PS1 X:Folder Trong X ký tự phân vùng ổ (như C, D, E) Folder tên thư mục Nếu muốn biết số thông tin phân vùng ổ, bạn phải dùng Windows Management Instrumentation (WMI) Chi tiết WMI nằm phạm vi nên không đề cập tới Nhưng đoạn mã PowerShell bên dễ hiểu để không cần dùng đến trợ giúp WMI Bạn tạo biến “$filter” để dùng với lệnh Get-WmiObject Biến lọc (tức filter) nói với lệnh Get-WmiObject bạn muốn có thơng tin ổ đĩa cụ thể Kết lệnh Get-WmiObject lưu trữ biến gọi $volInfo Nhớ rằng, PowerShell thứ đối tượng; $volInfo đối tượng kết trả từ Get-WmiObject $filter = "DeviceID = '" + $drive + ":'" $volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter Bây bạn truy cập tất đối tượng phương thức gắn với đối tượng Dãy số phân vùng ổ truy cập qua thuộc tính VolumeSerialNumber Thông tin trả dãy số dạng xâu ký tự Nhưng thường bạn muốn định dạng theo kiểu bốn số tách riêng một, cách dấu nối ngang thực tương tự dòng bên Dấu nối cuối dòng thứ ký tự nối tiếp dòng PowerShell Về bản, nói cho PowerShell biết dòng khơng bị ngắt qng mà bao gồm dòng Khi viết mã khơng cần phân tách dòng, để giảm bề rộng đoạn mã dễ đọc, bạn nên thực điều $serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" +` $volInfo.VolumeSerialNumber.SubString(4, 4) Bây có đối tượng $volInfo, bạn viết thơng tin header DIR cho hình Nếu ổ đĩa khơng có tên, đoạn text viết cho hình khác chút so với ổ đĩa có tên Một lệnh If-Else đơn giản dùng để kiểm tra xem thuộc tính VolumeName có xâu rỗng hay khơng Lệnh Write-Host dùng để viết dòng lệnh cho 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 cuối lệnh Write-Host dùng để chèn dòng vào trước sau văn Lệnh Write-Host thêm dòng vào cuối dòng Vì tác động “ `n ” tạo dòng trống trước sau dòng văn Hình 4: Hiển thị liệu xuất script update DIR.PS1: Hậu đề (Footer) Chỉ việc lại viết lên hình tổng số file, thư mục, kích thước tổng cộng tất file không gian trống phân vùng ổ Để thực bạn cần sử dụng biến đếm ($totalFiles, $totalDirs, $totalSize) tạo phần trước Bạn biết lượng không gian trống từ biến $volInfo tạo từ lúc bắt đầu viết script Write-Host ("{0, File(s)" + ` "{0, bytes") Write-Host ("{0, Dir(s)" + ` "{0, " bytes free`n") 16:N0}" -f $totalFiles + " 15:N0}" -f $totalSize + " 16:N0}" -f $totalDirs + " 16:N0}" -f $volInfo.FreeSpace + Hình 5: Hiển thị hoàn toàn liệu đầu (output) script Những dự báo khả nâng cao Mặc dù script mà bạn tạo đưa liệu đầu gần giống hệt lệnh CMD.EXE DIR có số dự báo bạn cần biết đến số nâng cao thực • Bản script khơng thực kiểm tra lỗi • Nếu đường dẫn hợp lệ không đưa vào script, script hỏng với thơng báo lỗi PowerShell • Tổng số thư mục đưa script so với kết từ lệnh CMD.EXE DIR lệnh Get-ChildItem khơng tính hai thư mục “.” “ ” CMD.EXE • Script bạn xếp thứ tự theo tên file, tên thư mục không cung cấp thêm cách xếp theo thuộc tính khác • Script bạn khơng có khả hiển thị nội dung thư mục tất thư mục Kết luận Mặc dù PowerShell trình tiện ích ngôn ngữ scripting mạnh bạn cần bỏ thời gian nắm bắt sử dụng nó, chưa quen thuộc với môi trường NET Framework Tôi hy vọng báo với script ví dụ hữu ích cho muốn hiểu PowerShell Nhưng script tạo ví dụ đơn giản Tin xây dựng, phát triển hồn thiện để phục vụ tốt cho nhiều trình ứng dụng phức tạp ... V i kịch v dụ, bạn cần tạo script PowerShell mô lệnh CMD.EXE DIR Bên tơi giải thích phần cốt yếu script DIR.PS1: Tiêu đề (Header) Một script PowerShell bao gồm lệnh PowerShell file v n tuý v i... hoạt động liệu đầu v o (input) cho lệnh Đây điểm xuất phát mà PowerShell lấy từ tất trình tiện ích truyền thống Kịch PowerShell = Các file Batch Steroids Bản thân PowerShell viết ngôn ngữ NET... dòng PowerShell V bản, nói cho PowerShell biết dòng khơng bị ngắt qng mà bao gồm dòng Khi viết mã khơng cần phân tách dòng, để giảm bề rộng đoạn mã dễ đọc, bạn nên thực điều $serial = $volInfo.VolumeSerialNumber.SubString(0,

Ngày đăng: 13/03/2019, 22:11

TỪ KHÓA LIÊN QUAN

w