Geek School: Viết kịch bản PowerShell đầy đủ đầu tiên của bạn

Mục lục:

Geek School: Viết kịch bản PowerShell đầy đủ đầu tiên của bạn
Geek School: Viết kịch bản PowerShell đầy đủ đầu tiên của bạn

Video: Geek School: Viết kịch bản PowerShell đầy đủ đầu tiên của bạn

Video: Geek School: Viết kịch bản PowerShell đầy đủ đầu tiên của bạn
Video: Bản Tin Roblox - Anh Em Win 7 Toang Rồi.... Hàng Loạt PC Chặn Roblox Hoạt Động - YouTube 2024, Tháng tư
Anonim
Một vài tuần trước, The Geek đã chỉ cho bạn cách bạn có thể sử dụng dấu nhắc lệnh để tìm ra khi máy tính của bạn được khởi động lần cuối. Trong lần cài đặt cuối cùng của trường Geek cho PowerShell, chúng ta sẽ viết một lệnh PowerShell có thể sử dụng lại để làm điều tương tự.
Một vài tuần trước, The Geek đã chỉ cho bạn cách bạn có thể sử dụng dấu nhắc lệnh để tìm ra khi máy tính của bạn được khởi động lần cuối. Trong lần cài đặt cuối cùng của trường Geek cho PowerShell, chúng ta sẽ viết một lệnh PowerShell có thể sử dụng lại để làm điều tương tự.

Hãy nhớ đọc các bài viết trước trong loạt bài này:

  • Tìm hiểu cách tự động hóa Windows bằng 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 cách định dạng, lọc và so sánh trong PowerShell
  • Tìm hiểu cách sử dụng Remoting trong PowerShell
  • Sử dụng PowerShell để lấy thông tin máy tính
  • Làm việc với các bộ sưu tập trong PowerShell
  • Tìm hiểu cách sử dụng công việc trong PowerShell
  • Tìm hiểu cách mở rộng PowerShell
  • Học các biến PowerShell, đầu vào và đầu ra

Viết kịch bản đầu tiên của bạn

Điều đầu tiên chúng ta cần làm là tìm cách truy cập thông tin mà chúng tôi đang tìm kiếm. Vì chúng ta đang xử lý thông tin quản lý, có lẽ chúng ta cần xem xét sử dụng WMI, thực sự có một lớp gọi là Win32_OperatingSystem cho phép bạn xem thông tin chi tiết về hệ điều hành của bạn, bao gồm cả lần cuối cùng nó khởi động.

Vì vậy, bây giờ chúng tôi biết nơi chúng tôi có thể tìm thấy thông tin chúng tôi đang tìm kiếm, mở ISE và nhập nội dung sau.
Vì vậy, bây giờ chúng tôi biết nơi chúng tôi có thể tìm thấy thông tin chúng tôi đang tìm kiếm, mở ISE và nhập nội dung sau.

Get-WmiObject -Class Win32_OperatingSystem –ComputerName localhost |

Select-Object -Property CSName,LastBootUpTime

Lưu ý: Tôi đã phải chia mã của tôi trên hai dòng để tất cả đều phù hợp với ảnh chụp màn hình, nhưng bạn có thể gõ nó trên một dòng. Nếu bạn chọn chia nó thành hai dòng, hãy đảm bảo rằng ký tự ống là ký tự cuối cùng trên dòng 1.

Giờ hãy nhấp vào nút "Chạy tập lệnh" màu lục hoặc nhấn phím F5 trên bàn phím của bạn để kiểm tra mã.
Giờ hãy nhấp vào nút "Chạy tập lệnh" màu lục hoặc nhấn phím F5 trên bàn phím của bạn để kiểm tra mã.
Image
Image

Thời gian WMI có thể hơi khó hiểu. Bằng cách đó, chúng tôi có nghĩa là nếu bạn nhìn vào tài sản LastBootUpTime, nó nói 2013-03-19 lúc 18:26:21, nhưng vì lý do nào đó, các nhân viên WMI đã quyết định ghép tất cả chúng vào một chuỗi đơn. May mắn cho chúng tôi, chúng tôi không phải lo lắng về việc phân tích cú pháp chuỗi theo cách thủ công vì có cách dễ dàng hơn để thực hiện việc đó, mặc dù nâng cao hơn. Bạn sẽ cần thay đổi phần Chọn đối tượng của mã để trông giống như sau:

Select-Object -Property CSName,@{n=”Last Booted”;

e={[Management.ManagementDateTimeConverter]::ToDateTime($_.LastBootUpTime)}}

Những gì chúng ta đang làm ở đây là tạo một thuộc tính tùy chỉnh được gọi là "Last Booted" và xác định rằng giá trị của nó phải là kết quả của việc gọi phương thức tĩnh ToDateTime trên thuộc tính LastBootUpTime của đối tượng đường ống hiện tại. Mã của bạn bây giờ sẽ trông như thế này.

Chạy mã ngay bây giờ sẽ mang lại thời gian khởi động cuối cùng dễ đọc hơn nhiều.
Chạy mã ngay bây giờ sẽ mang lại thời gian khởi động cuối cùng dễ đọc hơn nhiều.
Bây giờ chúng ta hài lòng với chức năng cơ bản của kịch bản, chúng ta cần lưu nó. Để đơn giản, hãy lưu nó như sau:
Bây giờ chúng ta hài lòng với chức năng cơ bản của kịch bản, chúng ta cần lưu nó. Để đơn giản, hãy lưu nó như sau:

C:Get-LastBootTime.ps1

Bây giờ chuyển sang nửa dưới của ISE và chạy như sau:
Bây giờ chuyển sang nửa dưới của ISE và chạy như sau:

C:Get-LastBootTime.ps1

Tuyệt quá! Kịch bản của chúng tôi đang hoạt động như mong đợi, tuy nhiên vẫn có một vấn đề với tập lệnh của chúng tôi. Chúng tôi đã mã hóa cứng tên của máy tính mà chúng tôi muốn có thời gian khởi động cuối cùng cho. Thay vì các giá trị hardcoding, chúng ta nên cung cấp một tham số để bất cứ ai đang sử dụng kịch bản có thể chọn máy tính mà họ chạy kịch bản lệnh. Để thực hiện điều đó, hãy chuyển đến đầu tập lệnh của bạn và thực hiện các thao tác sau.
Tuyệt quá! Kịch bản của chúng tôi đang hoạt động như mong đợi, tuy nhiên vẫn có một vấn đề với tập lệnh của chúng tôi. Chúng tôi đã mã hóa cứng tên của máy tính mà chúng tôi muốn có thời gian khởi động cuối cùng cho. Thay vì các giá trị hardcoding, chúng ta nên cung cấp một tham số để bất cứ ai đang sử dụng kịch bản có thể chọn máy tính mà họ chạy kịch bản lệnh. Để thực hiện điều đó, hãy chuyển đến đầu tập lệnh của bạn và thực hiện các thao tác sau.

param( [string]$ComputerName )

Sau đó thay thế giá trị localhost được mã hóa bằng biến $ ComputerName. Kịch bản của bạn bây giờ sẽ trông như thế này:

Lưu tập lệnh của bạn, sau đó quay lại nửa dưới của ISE và xem trợ giúp cho tập lệnh của bạn.
Lưu tập lệnh của bạn, sau đó quay lại nửa dưới của ISE và xem trợ giúp cho tập lệnh của bạn.

help C:Get-LastBootTime.ps1

Tuyệt vời, vì vậy bây giờ chúng ta có thể chỉ định tên của máy tính mà chúng ta muốn có được thời gian khởi động cuối cùng để sử dụng tham số ComputerName mới của chúng ta. Thật không may, vẫn còn một vài điều sai trái. Thứ nhất, tham số ComputerName là tùy chọn và thứ hai, đó là điều hữu ích nhất mà tôi từng thấy, vì vậy, hãy khắc phục những vấn đề đó nhanh chóng. Để làm cho tham số ComputerName bắt buộc, hãy thay đổi nội dung của khối param thành sau.
Tuyệt vời, vì vậy bây giờ chúng ta có thể chỉ định tên của máy tính mà chúng ta muốn có được thời gian khởi động cuối cùng để sử dụng tham số ComputerName mới của chúng ta. Thật không may, vẫn còn một vài điều sai trái. Thứ nhất, tham số ComputerName là tùy chọn và thứ hai, đó là điều hữu ích nhất mà tôi từng thấy, vì vậy, hãy khắc phục những vấn đề đó nhanh chóng. Để làm cho tham số ComputerName bắt buộc, hãy thay đổi nội dung của khối param thành sau.

[Parameter(Mandatory=$true)][string]$ComputerName

Để tạo một tệp trợ giúp tốt hơn, phương pháp phổ biến nhất là sử dụng trợ giúp dựa trên nhận xét. Điều đó có nghĩa là chúng tôi chỉ thêm một nhận xét dài thêm vào đầu tập lệnh.

<#.SYNOPSIS Shows when last your PC started up..DESCRIPTION This is a WMI wrapper function to get the time that your PC last started up..PARAMETER ComputerName The name of the Computer you want to run the command against..EXAMPLE Get-LastBootTime -ComputerName localhost.LINK www.howtogeek.com #>

Một khi tất cả được thực hiện, bạn nên kết thúc với một kịch bản như thế này.

Đề xuất: