Geek School: Tìm hiểu cách sử dụng công việc trong PowerShell

Mục lục:

Geek School: Tìm hiểu cách sử dụng công việc trong PowerShell
Geek School: Tìm hiểu cách sử dụng công việc trong PowerShell

Video: Geek School: Tìm hiểu cách sử dụng công việc trong PowerShell

Video: Geek School: Tìm hiểu cách sử dụng công việc trong PowerShell
Video: Cài Hệ Điều Hành Raspberry Pi | Dùng Cáp Mạng - KHÔNG Cần Màn Hình - YouTube 2024, Có thể
Anonim
PowerShell có bốn loại công việc - Công việc cơ bản, Công việc từ xa, Công việc WMI và Công việc theo lịch trình. Tham gia với chúng tôi khi chúng tôi tìm hiểu chúng là gì và cách chúng tôi có thể sử dụng chúng.
PowerShell có bốn loại công việc - Công việc cơ bản, Công việc từ xa, Công việc WMI và Công việc theo lịch trình. Tham gia với chúng tôi khi chúng tôi tìm hiểu chúng là gì và cách chúng tôi có thể sử dụng chúng.

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}

Bây giờ chúng ta được tự do làm bất cứ điều gì chúng ta muốn bên trong trình bao trong khi khối tập lệnh đó thực thi trong nền.
Bây giờ chúng ta được tự do làm bất cứ điều gì chúng ta muốn bên trong trình bao trong khi khối tập lệnh đó thực thi trong nền.
Khi bạn khởi động một công việc mới, PowerShell tạo một đối tượng công việc mới đại diện cho công việc đó. Bạn có thể nhận danh sách tất cả các công việc bất kỳ lúc nào bằng cách chạy lệnh ghép ngắn Get-Job.
Khi bạn khởi động một công việc mới, PowerShell tạo một đối tượng công việc mới đại diện cho công việc đó. Bạn có thể nhận danh sách tất cả các công việc bất kỳ lúc nào bằng cách chạy lệnh ghép ngắn Get-Job.
Các đối tượng công việc cho bạn biết về trạng thái của công việc. Ví dụ, trong ảnh chụp màn hình ở trên, chúng ta có thể thấy rằng chúng ta có một BackgroundJob được gọi là GetFileList vẫn đang chạy, nhưng đã bắt đầu trả về dữ liệu. Nếu tại bất kỳ thời điểm nào bạn quyết định rằng công việc đã chạy quá lâu, bạn có thể dễ dàng dừng nó bằng cách chuyển nó sang Stop-Job.
Các đối tượng công việc cho bạn biết về trạng thái của công việc. Ví dụ, trong ảnh chụp màn hình ở trên, chúng ta có thể thấy rằng chúng ta có một BackgroundJob được gọi là GetFileList vẫn đang chạy, nhưng đã bắt đầu trả về dữ liệu. Nếu tại bất kỳ thời điểm nào bạn quyết định rằng công việc đã chạy quá lâu, bạn có thể dễ dàng dừng nó bằng cách chuyển nó sang Stop-Job.

Get-Job –Name GetFileList | Stop-Job

Tuy nhiên, một khi bạn đã dừng công việc, bất kỳ dữ liệu nào nó nhận được cho đến khi bạn dừng nó vẫn còn. Tuy nhiên, có một bản ghi nhớ. Trong PowerShell, một khi bạn nhận được kết quả cho một công việc, họ sẽ bị xóa. Để chúng tồn tại, bạn phải chỉ định tham số chuyển đổi giữ của Receive – Job.
Tuy nhiên, một khi bạn đã dừng công việc, bất kỳ dữ liệu nào nó nhận được cho đến khi bạn dừng nó vẫn còn. Tuy nhiên, có một bản ghi nhớ. Trong PowerShell, một khi bạn nhận được kết quả cho một công việc, họ sẽ bị xóa. Để chúng tồn tại, bạn phải chỉ định tham số chuyển đổi giữ của Receive – Job.

Get-Job –Name GetFileList | Receive-Job –Keep

Khi bạn đã hoàn thành công việc, cách tốt nhất là xóa nó đi. Để loại bỏ công việc, chỉ cần đặt nó vào lệnh Remove-Job.
Khi bạn đã hoàn thành công việc, cách tốt nhất là xóa nó đi. Để loại bỏ công việc, chỉ cần đặt nó vào lệnh Remove-Job.

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.

Image
Image

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

Đó là một lệnh đơn giản và nên hoàn tất việc thực hiện ngay bây giờ, vì vậy hãy xem xét trạng thái công việc của chúng tôi.
Đó là một lệnh đơn giản và nên hoàn tất việc thực hiện ngay bây giờ, vì vậy hãy xem xét trạng thái công việc của chúng tôi.
Hmm, có vẻ như nó đã thất bại. Điều này đưa tôi lên gotcha đầu tiên của tôi với công việc. Khi bạn tạo một công việc mới của bất kỳ loại nào trong PowerShell, nó tạo ra một công việc cha mẹ ngoài một công việc con cho mỗi máy tính mà bạn đang chạy công việc chống lại. Khi bạn sử dụng lệnh ghép ngắn Get-Job, nó chỉ hiển thị cho bạn các công việc cha, và thuộc tính state là trường hợp xấu nhất, nghĩa là ngay cả khi lệnh không chạy trên một trăm máy tính, trạng thái công việc cha sẽ nói thất bại. Để xem danh sách các công việc con bạn cần sử dụng tham số IncludeChildJob.
Hmm, có vẻ như nó đã thất bại. Điều này đưa tôi lên gotcha đầu tiên của tôi với công việc. Khi bạn tạo một công việc mới của bất kỳ loại nào trong PowerShell, nó tạo ra một công việc cha mẹ ngoài một công việc con cho mỗi máy tính mà bạn đang chạy công việc chống lại. Khi bạn sử dụng lệnh ghép ngắn Get-Job, nó chỉ hiển thị cho bạn các công việc cha, và thuộc tính state là trường hợp xấu nhất, nghĩa là ngay cả khi lệnh không chạy trên một trăm máy tính, trạng thái công việc cha sẽ nói thất bại. Để xem danh sách các công việc con bạn cần sử dụng tham số IncludeChildJob.
Nếu bạn nhìn kỹ hơn, bạn sẽ thấy rằng công việc đã thực sự chỉ thất bại trên một máy tính, điều này đưa chúng ta đến với hình ảnh xác thực tiếp theo. Khi bạn thử và nhận kết quả cho công việc, nếu bạn chỉ định tên công việc hoặc ID của cha mẹ, PowerShell sẽ trả về dữ liệu từ tất cả các công việc con. Vấn đề là nếu có một lỗi trong một trong các công việc con, chúng ta sẽ được để lại với một số văn bản màu đỏ.
Nếu bạn nhìn kỹ hơn, bạn sẽ thấy rằng công việc đã thực sự chỉ thất bại trên một máy tính, điều này đưa chúng ta đến với hình ảnh xác thực tiếp theo. Khi bạn thử và nhận kết quả cho công việc, nếu bạn chỉ định tên công việc hoặc ID của cha mẹ, PowerShell sẽ trả về dữ liệu từ tất cả các công việc con. Vấn đề là nếu có một lỗi trong một trong các công việc con, chúng ta sẽ được để lại với một số văn bản màu đỏ.
Có hai cách để giải quyết vấn đề này. Thứ nhất, nếu bạn biết máy tính nào bạn muốn kết quả, bạn có thể sử dụng tham số ComputerName của lệnh Getieve –Job.
Có hai cách để giải quyết vấn đề này. Thứ nhất, nếu bạn biết máy tính nào bạn muốn kết quả, bạn có thể sử dụng tham số ComputerName của lệnh Getieve –Job.

Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

Ngoài ra, bạn có thể nhận được kết quả từ một công việc con cụ thể bằng cách sử dụng id công việc của nó.
Ngoài ra, bạn có thể nhận được kết quả từ một công việc con cụ thể bằng cách sử dụng id công việc của nó.

Get-Job -Id 3 –IncludeChildJob

Image
Image

Get-Job -Id 5 | Receive-Job –Keep

Image
Image

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.

Image
Image
Thật không may, điều này có nghĩa rằng họ cũng phải chịu cùng một gotchas tôi đã đề cập trong phần Công việc từ xa.
Thật không may, điều này có nghĩa rằng họ cũng phải chịu cùng một gotchas tôi đã đề cập trong phần Công việc từ xa.

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.
Vì đây là một loại công việc hơi khác, bạn cũng sẽ cần sử dụng một lệnh khác để lấy danh sách tất cả các công việc đã lên lịch trên máy.
Vì đây là một loại công việc hơi khác, bạn cũng sẽ cần sử dụng một lệnh khác để lấy danh sách tất cả các công việc đã lên lịch trên máy.

Get-ScheduledJob

Đề xuất: