Udostępnij za pośrednictwem


Start-Job

Uruchamia zadanie w tle programu PowerShell.

Składnia

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]

Opis

Polecenie Start-Job cmdlet uruchamia zadanie w tle programu PowerShell na komputerze lokalnym.

Zadanie w tle programu PowerShell uruchamia polecenie bez interakcji z bieżącą sesją. Po uruchomieniu zadania w tle obiekt zadania jest zwracany natychmiast, nawet jeśli zadanie zajmuje dłuższy czas. Możesz kontynuować pracę w sesji bez przerwy podczas uruchamiania zadania.

Obiekt zadania zawiera przydatne informacje o zadaniu, ale nie zawiera wyników zadania. Po zakończeniu zadania użyj Receive-Job polecenia cmdlet , aby uzyskać wyniki zadania. Aby uzyskać więcej informacji na temat zadań w tle, zobacz about_Jobs.

Aby uruchomić zadanie w tle na komputerze zdalnym, użyj parametru AsJob dostępnego w wielu poleceniach cmdlet lub użyj Invoke-Command polecenia cmdlet , aby uruchomić Start-Job polecenie na komputerze zdalnym. Aby uzyskać więcej informacji, zobacz about_Remote_Jobs.

Począwszy od programu PowerShell 3.0, Start-Job można uruchamiać wystąpienia niestandardowych typów zadań, takich jak zaplanowane zadania. Aby uzyskać informacje o sposobie uruchamiania Start-Job zadań z typami niestandardowymi, zobacz dokumenty pomocy dotyczące funkcji typu zadania.

Domyślny katalog roboczy dla zadań jest zakodowany na stałe. Wartość domyślna systemu Windows to $HOME\Documents i w systemie Linux lub macOS wartość domyślna to $HOME. Kod skryptu uruchomiony w zadaniu w tle musi w razie potrzeby zarządzać katalogiem roboczym.

Przykłady

Przykład 1. Uruchamianie zadania w tle

W tym przykładzie uruchamia się zadanie w tle uruchamiane na komputerze lokalnym.

Start-Job -ScriptBlock { Get-Process -Name powershell }

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process -Name powershell

Start-Job używa parametru ScriptBlock do uruchamiania Get-Process jako zadania w tle. Parametr Name określa, aby znaleźć procesy programu PowerShell, powershell. Zostaną wyświetlone informacje o zadaniu, a program PowerShell powróci do monitu, gdy zadanie jest uruchamiane w tle.

Aby wyświetlić dane wyjściowe zadania, użyj Receive-Job polecenia cmdlet . Na przykład Receive-Job -Id 1.

Przykład 2. Uruchamianie zadania przy użyciu polecenia Invoke-Command

W tym przykładzie uruchomiono zadanie na wielu komputerach. Zadanie jest przechowywane w zmiennej i jest wykonywane przy użyciu nazwy zmiennej w wierszu polecenia programu PowerShell.

$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
   Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob

Zadanie, które używa Invoke-Command , jest tworzone i przechowywane w zmiennej $jobWRM . Invoke-Command używa parametru ComputerName , aby określić komputery, na których jest uruchamiane zadanie. Get-Content pobiera nazwy serwerów C:\Servers.txt z pliku.

Parametr ScriptBlock określa polecenie, które Get-Service pobiera usługę WinRM. Parametr JobName określa przyjazną nazwę zadania WinRM. Parametr ThrottleLimit ogranicza liczbę współbieżnych poleceń do 16. Parametr AsJob uruchamia zadanie w tle, które uruchamia polecenie na serwerach.

Przykład 3. Pobieranie informacji o zadaniu

Ten przykład pobiera informacje o zadaniu i wyświetla wyniki ukończonego zadania uruchomionego na komputerze lokalnym.

$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *

State         : Completed
HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Get-WinEvent -Log System
JobStateInfo  : Completed
Finished      : System.Threading.ManualResetEvent
InstanceId    : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id            : 18
Name          : Job18
ChildJobs     : {Job19}
PSBeginTime   : 8/8/2019 14:41:57
PSEndTime     : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}

Start-Jobużywa parametru ScriptBlock, aby uruchomić polecenie, które określaGet-WinEvent, aby uzyskać dziennik systemu. Parametr Credential określa konto użytkownika domeny z uprawnieniami do uruchamiania zadania na komputerze. Obiekt zadania jest przechowywany w zmiennej $j .

Obiekt w zmiennej $j jest wysyłany w dół potoku do Select-Object. Parametr Property określa gwiazdkę (*), aby wyświetlić wszystkie właściwości obiektu zadania.

Przykład 4. Uruchamianie skryptu jako zadania w tle

W tym przykładzie skrypt na komputerze lokalnym jest uruchamiany jako zadanie w tle.

Start-Job -FilePath C:\Scripts\Sample.ps1

Start-Job Używa parametru FilePath do określenia pliku skryptu przechowywanego na komputerze lokalnym.

Przykład 5. Pobieranie procesu przy użyciu zadania w tle

W tym przykładzie użyto zadania w tle, aby uzyskać określony proces według nazwy.

Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }

Start-Job używa parametru Name , aby określić przyjazną nazwę zadania, PShellJob. Parametr ScriptBlock określa Get-Process , aby pobrać procesy o nazwie programu PowerShell.

Przykład 6. Zbieranie i zapisywanie danych przy użyciu zadania w tle

W tym przykładzie uruchamia się zadanie, które zbiera dużą ilość danych mapy, a następnie zapisuje je w .tif pliku.

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32

Start-Jobużywa parametru Name, aby określić przyjazną nazwę zadania GetMappingFiles. Parametr InitializationScript uruchamia blok skryptu, który importuje moduł MapFunctions . Parametr ScriptBlock jest uruchamiany Get-Map i Set-Content zapisuje dane w lokalizacji określonej przez parametr Path. Parametr RunAs32 uruchamia proces jako 32-bitowy, nawet w 64-bitowym systemie operacyjnym.

Przykład 7. Przekazywanie danych wejściowych do zadania w tle

W tym przykładzie użyto zmiennej automatycznej $input do przetwarzania obiektu wejściowego. Użyj Receive-Job polecenia , aby wyświetlić dane wyjściowe zadania.

Start-Job -ScriptBlock { Get-Content -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Job używa parametru ScriptBlock do uruchomienia Get-Content z zmienną automatyczną $input . Zmienna $input pobiera obiekty z parametru InputObject . Receive-Job używa parametru Name , aby określić zadanie i wyświetlić wyniki. Parametr Keep zapisuje dane wyjściowe zadania, aby można było je wyświetlić ponownie podczas sesji programu PowerShell.

Przykład 8. Użyj parametru ArgumentList, aby określić tablicę

W tym przykładzie użyto parametru ArgumentList do określenia tablicy argumentów. Tablica jest rozdzielaną przecinkami listą nazw procesów.

Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad

Id     Name      PSJobTypeName   State       HasMoreData     Location     Command
--     ----      -------------   -----       -----------     --------     -------
1      Job1      BackgroundJob   Running     True            localhost    Get-Process -Name $args

Polecenie Start-Job cmdlet używa parametru ScriptBlock do uruchomienia polecenia. Get-Process używa parametru Name , aby określić zmienną $argsautomatyczną . Parametr ArgumentList przekazuje tablicę nazw procesów do $args. Nazwy procesów programu PowerShell, pwsh i Notatnika są procesami uruchomionymi na komputerze lokalnym.

Aby wyświetlić dane wyjściowe zadania, użyj Receive-Job polecenia cmdlet . Na przykład Receive-Job -Id 1.

Parametry

-ArgumentList

Określa tablicę argumentów lub wartości parametrów dla skryptu określonego przez parametr FilePath lub polecenie określone za pomocą parametru ScriptBlock .

Argumenty muszą być przekazywane do argumentu ArgumentList jako argument tablicy jednowymiarowej. Na przykład lista rozdzielona przecinkami. Aby uzyskać więcej informacji na temat zachowania argumentlist, zobacz about_Splatting.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

Określa mechanizm używany do uwierzytelniania poświadczeń użytkownika.

Dopuszczalne wartości tego parametru są następujące:

  • Wartość domyślna
  • Podstawowy
  • Credssp
  • Szyfrowane
  • Kerberos
  • Negocjacja
  • NegotiateWithImplicitCredential

Wartość domyślna to Wartość domyślna.

Uwierzytelnianie CredSSP jest dostępne tylko w systemach Windows Vista, Windows Server 2008 i nowszych wersjach systemu operacyjnego Windows.

Aby uzyskać więcej informacji na temat wartości tego parametru, zobacz AuthenticationMechanism.

Uwaga

Uwierzytelnianie dostawcy obsługi zabezpieczeń poświadczeń (CredSSP), w którym poświadczenia użytkownika są przekazywane do komputera zdalnego do uwierzytelnienia, jest przeznaczone dla poleceń wymagających uwierzytelniania w więcej niż jednym zasobie, takich jak uzyskiwanie dostępu do zdalnego udziału sieciowego. Ten mechanizm zwiększa ryzyko bezpieczeństwa operacji zdalnej. W przypadku naruszenia zabezpieczeń komputera zdalnego poświadczenia przekazywane do niego mogą służyć do kontrolowania sesji sieciowej.

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Określa konto użytkownika, które ma uprawnienia do wykonania tej akcji. Jeśli parametr Credential nie jest określony, polecenie używa poświadczeń bieżącego użytkownika.

Wpisz nazwę użytkownika, taką jak User01 lub Domain01\User01, lub wprowadź obiekt PSCredential wygenerowany przez Get-Credential polecenie cmdlet. Jeśli wpiszesz nazwę użytkownika, zostanie wyświetlony monit o wprowadzenie hasła.

Poświadczenia są przechowywane w obiekcie PSCredential , a hasło jest przechowywane jako secureString.

Uwaga

Aby uzyskać więcej informacji na temat ochrony danych SecureString , zobacz Jak bezpieczny jest protokół SecureString?.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionName

Określa nazwę definicji zadania, które uruchamia to polecenie cmdlet. Użyj tego parametru, aby uruchomić niestandardowe typy zadań, które mają nazwę definicji, taką jak zaplanowane zadania.

Gdy używasz Start-Job polecenia do uruchamiania wystąpienia zaplanowanego zadania, zadanie jest uruchamiane natychmiast, niezależnie od wyzwalaczy zadania lub opcji zadania. Wynikowe wystąpienie zadania jest zaplanowanym zadaniem, ale nie jest zapisywane na dysku, takie jak wyzwalane zaplanowane zadania. Nie można użyć parametru ArgumentList parametru , Start-Job aby podać wartości parametrów skryptów uruchamianych w zaplanowanym zadaniu. Aby uzyskać więcej informacji, zobacz about_Scheduled_Jobs.

Ten parametr został wprowadzony w programie PowerShell 3.0.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionPath

Określa ścieżkę definicji zadania, które uruchamia to polecenie cmdlet. Wprowadź ścieżkę definicji. Łączenie wartości parametrów DefinitionPath i DefinitionName jest w pełni kwalifikowaną ścieżką definicji zadania. Użyj tego parametru, aby uruchomić niestandardowe typy zadań, które mają ścieżkę definicji, taką jak zaplanowane zadania.

W przypadku zaplanowanych zadań wartość parametru DefinitionPath to $HOME\AppData\Local\Windows\PowerShell\ScheduledJob.

Ten parametr został wprowadzony w programie PowerShell 3.0.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Określa skrypt lokalny, który Start-Job jest uruchamiany jako zadanie w tle. Wprowadź ścieżkę i nazwę pliku skryptu lub użyj potoku, aby wysłać ścieżkę skryptu do Start-Job. Skrypt musi znajdować się na komputerze lokalnym lub w folderze, do którego ma dostęp komputer lokalny.

W przypadku użycia tego parametru program PowerShell konwertuje zawartość określonego pliku skryptu na blok skryptu i uruchamia blok skryptu jako zadanie w tle.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Określa polecenia uruchamiane przed uruchomieniem zadania. Aby utworzyć blok skryptu, należy ująć polecenia w nawiasy klamrowe ({}).

Użyj tego parametru, aby przygotować sesję, w której jest uruchamiane zadanie. Można na przykład użyć jej do dodawania funkcji, przystawek i modułów do sesji.

Type:ScriptBlock
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Określa dane wejściowe polecenia . Wprowadź zmienną zawierającą obiekty lub wpisz polecenie lub wyrażenie, które generuje obiekty.

W wartości parametru ScriptBlock użyj zmiennej automatycznej $input do reprezentowania obiektów wejściowych.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Określa skrypt lokalny, który to polecenie cmdlet jest uruchamiane jako zadanie w tle. Wprowadź ścieżkę skryptu na komputerze lokalnym.

Start-Job używa wartości parametru LiteralPath dokładnie tak, jak został wpisany. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Określa przyjazną nazwę nowego zadania. Możesz użyć nazwy , aby zidentyfikować zadanie do innych poleceń cmdlet zadania, takich jak Stop-Job polecenie cmdlet.

Domyślna przyjazna nazwa to Job#, gdzie # jest liczbą porządkową, która jest zwiększana dla każdego zadania.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-PSVersion

Określa wersję. Start-Job uruchamia zadanie z wersją programu PowerShell. Dopuszczalne wartości tego parametru to: 2.0 i 3.0.

Ten parametr został wprowadzony w programie PowerShell 3.0.

Type:Version
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

Wskazuje, że Start-Job zadanie jest uruchamiane w procesie 32-bitowym. Polecenie RunAs32 wymusza uruchomienie zadania w 32-bitowym procesie, nawet w 64-bitowym systemie operacyjnym.

W 64-bitowych wersjach systemów Windows 7 i Windows Server 2008 R2, gdy Start-Job polecenie zawiera parametr RunAs32 , nie można użyć parametru Credential w celu określenia poświadczeń innego użytkownika.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Określa polecenia do uruchomienia w zadaniu w tle. Aby utworzyć blok skryptu, należy ująć polecenia w nawiasy klamrowe ({}). Użyj zmiennej automatycznej $input , aby uzyskać dostęp do wartości parametru InputObject . Ten parametr jest wymagany.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Type

Określa typ niestandardowy dla zadań uruchomionych przez Start-Job. Wprowadź niestandardową nazwę typu zadania, na przykład PSScheduledJob dla zaplanowanych zadań lub zadania PSWorkflowJob dla zadań przepływów pracy. Ten parametr nie jest prawidłowy dla standardowych zadań w tle.

Ten parametr został wprowadzony w programie PowerShell 3.0.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

String

Do tego polecenia cmdlet można przekazać obiekt z właściwością Name do parametru Name . Na przykład można potokować obiekt FileInfo z pliku Get-ChildItem.

Dane wyjściowe

System.Management.Automation.PSRemotingJob

To polecenie cmdlet zwraca obiekt PSRemotingJob reprezentujący zadanie, które zostało uruchomione.

Uwagi

Program Windows PowerShell zawiera następujące aliasy dla programu Start-Job:

  • sajb

Aby uruchomić w tle, Start-Job działa we własnej sesji w bieżącej sesji. Gdy używasz Invoke-Command polecenia cmdlet do uruchamiania Start-Job polecenia w sesji na komputerze zdalnym, Start-Job jest uruchamiany w sesji w sesji zdalnej.