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
Và hãy theo dõi phần còn lại của loạt phim trong tuần.
Công việc nền
Cho đến bây giờ mọi thứ tôi đã cho bạn thấy trong PowerShell đều đồng bộ, có nghĩa là chúng ta nhập thứ gì đó vào trong trình bao và không thể thực sự làm được gì cho đến khi lệnh đó kết thúc thực thi. Đây là nơi mà các công việc nền đến. Để bắt đầu một nền, công việc chỉ đơn giản là chuyển một khối tập lệnh vào lệnh ghép ngắn Start-Job.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Get-Job –Name GetFileList | Receive-Job –Keep
Get-Job –Name GetFileList | Remove-Job
Điều này sẽ xóa nó khỏi danh sách các công việc được trả về bởi Get-Job.
Công việc từ xa
Một vài bài học trước, chúng ta đã xem cách chúng ta có thể sử dụng remoting để thực hiện các lệnh PowerShell trên một máy từ xa bằng cách sử dụng Invoke-Command, nhưng bạn có biết bạn cũng có thể sử dụng Invoke-Command để khởi động một công việc từ xa trong nền không? Để làm như vậy, chỉ cần thêm tham số –AsJob vào cuối lệnh của bạn:
Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob
Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper
Get-Job -Id 3 –IncludeChildJob
Get-Job -Id 5 | Receive-Job –Keep
Công việc WMI
Công việc WMI cũng giống như Công việc từ xa, chỉ yêu cầu tham số –AsJob được thêm vào lệnh ghép ngắn Get-WmiObject.
Công việc đã lên lịch
Ba loại công việc cuối cùng mà chúng tôi đã xem xét không liên tục, có nghĩa là chúng chỉ có sẵn trong phiên hiện tại của bạn. Về cơ bản, điều đó có nghĩa là nếu bạn bắt đầu một công việc và sau đó mở một Bảng điều khiển PowerShell khác và chạy Get-Job, bạn sẽ không thấy bất kỳ công việc nào. Tuy nhiên, quay lại giao diện điều khiển mà bạn đã thực hiện công việc đó, bạn sẽ có thể thấy trạng thái của nó. Điều này trái ngược với Công việc đã lên lịch dai dẳng. Về cơ bản, một Job Scheduled là một khối script chạy trên một lịch trình. Trong quá khứ, ảnh hưởng tương tự có thể đạt được bằng cách sử dụng Windows Task Scheduler, mà thực sự là những gì đang xảy ra bên dưới mui xe. Để tạo một Job Scheduled mới, chúng ta thực hiện như sau:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Có rất nhiều điều xảy ra trong lệnh đó, vì vậy hãy chia nhỏ nó đi.
- Đầu tiên, chúng tôi cung cấp cho Job Scheduled của chúng tôi một cái tên GetEventLogs.
- Sau đó chúng ta nói với nó rằng khi được kích hoạt, chúng ta muốn nó chạy nội dung của khối tập lệnh được chỉ định, về cơ bản sẽ nhận được 100 mục mới nhất của Nhật ký sự kiện bảo mật.
- Tiếp theo, chúng tôi chỉ định trình kích hoạt. Vì tham số kích hoạt nhận một đối tượng kích hoạt làm đầu vào, chúng tôi đã sử dụng một lệnh cha để tạo ra một kích hoạt sẽ tắt mỗi ngày lúc 5 giờ chiều.
- Vì chúng ta đang xử lý bản ghi sự kiện, chúng ta cần phải chạy như một quản trị viên, mà chúng ta có thể chỉ định bằng cách tạo một đối tượng ScheduledJobOption mới và chuyển nó tới tham số ScheduledJobOption.
Get-ScheduledJob