Start-Job

Uruchamia zadanie w tle programu PowerShell.

Składnia

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [-WorkingDirectory <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-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 zwraca natychmiast, nawet jeśli zadanie potrwa 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 Start-Job uruchamiania zadań z typami niestandardowymi, zobacz dokumenty pomocy dotyczące funkcji typu zadania.

Począwszy od programu PowerShell 6.0, można uruchamiać zadania przy użyciu operatora ampersand (&) w tle. Funkcja operatora tła jest podobna do Start-Job. Obie metody uruchamiania zadania tworzą obiekt zadania PSRemotingJob . Aby uzyskać więcej informacji na temat używania ampersand (&), zobacz about_Operators.

Program PowerShell 7 wprowadził parametr WorkingDirectory , który określa początkowy katalog roboczy zadania w tle. Jeśli parametr nie jest określony, Start-Job domyślnie jest to bieżący katalog roboczy obiektu wywołującego, który uruchomił zadanie.

Uwaga

Tworzenie zadania w tle poza procesem Start-Job nie jest obsługiwane w scenariuszu, w którym program PowerShell jest hostowany w innych aplikacjach, takich jak program PowerShell Azure Functions.

Jest to wykonywane zgodnie z projektem, ponieważ Start-Job zależy od pliku wykonywalnego dostępnego pwsh w obszarze $PSHOME , aby rozpocząć zadanie w tle poza procesem, ale gdy aplikacja hostuje program PowerShell, jest bezpośrednio używana przy użyciu pakietów zestawu SDK NuGet programu PowerShell i nie pwsh będzie dostarczana razem.

Element zastępczy w tym scenariuszu pochodzi Start-ThreadJob z modułu ThreadJob.

Przykłady

Przykład 1. Uruchamianie zadania w tle

W tym przykładzie zostanie uruchomione zadanie w tle uruchomione na komputerze lokalnym.

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

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

Start-Job używa parametru ScriptBlock do uruchomienia Get-Process jako zadania w tle. Parametr Name określa, aby znaleźć procesy programu PowerShell, pwsh. Informacje o zadaniu są wyświetlane, a program PowerShell powraca 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. Użyj operatora tła, aby uruchomić zadanie w tle

W tym przykładzie użyto operatora ampersand (&) w tle, aby uruchomić zadanie w tle na komputerze lokalnym. Zadanie otrzymuje taki sam wynik jak Start-Job w przykładzie 1.

Get-Process -Name pwsh &

Id    Name   PSJobTypeName   State       HasMoreData     Location      Command
--    ----   -------------   -----       -----------     --------      -------
5     Job5   BackgroundJob   Running     True            localhost     Microsoft.PowerShell.Man...

Get-Processużywa parametru Name do określania procesów programu PowerShell. pwsh Ampersand (&) uruchamia polecenie jako zadanie w tle. Informacje o zadaniu są wyświetlane, a program PowerShell powraca 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 5.

Przykład 3. Uruchamianie zadania przy użyciu 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 działa 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 4. 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-Job używa parametru ScriptBlock , aby uruchomić polecenie, które określa Get-WinEvent , aby pobrać dziennik systemu . Parametr Credential określa konto użytkownika domeny z uprawnieniem 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 Właściwość określa gwiazdkę (*), aby wyświetlić wszystkie właściwości obiektu zadania.

Przykład 5. 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 , aby określić plik skryptu przechowywany na komputerze lokalnym.

Przykład 6. 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 7. Zbieranie i zapisywanie danych przy użyciu zadania w tle

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

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

Start-Job uż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 .

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

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

Start-Job -ScriptBlock { Get-Content $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 wyprowadza wyniki. Parametr Keep zapisuje dane wyjściowe zadania, aby można je było wyświetlić ponownie podczas sesji programu PowerShell.

Przykład 9. Ustawianie katalogu roboczego dla zadania w tle

Element WorkingDirectory umożliwia określenie alternatywnego katalogu dla zadania, z którego można uruchamiać skrypty lub otwierać pliki. W tym przykładzie zadanie w tle określa katalog roboczy inny niż bieżąca lokalizacja katalogu.

PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait

Path
----
C:\Test\Scripts

Bieżący katalog roboczy tego przykładu to C:\Test. Start-Job używa parametru WorkingDirectory , aby określić katalog roboczy zadania. Parametr ScriptBlock służy $PWD do wyświetlania katalogu roboczego zadania. Receive-Job wyświetla dane wyjściowe zadania w tle. Zadanie AutoRemoveJob usuwa zadanie i funkcja Wait pomija wiersz polecenia do momentu odebrania wszystkich wyników.

Przykład 10: 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.

Przykład 11. Uruchamianie zadania w Windows PowerShell 5.1

W tym przykładzie użyto parametru PSVersion z wartością 5.1 do uruchomienia zadania w sesji Windows PowerShell 5.1.

$PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      0      0      rc.1

$job = Start-Job { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job $job

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  3383

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
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:

  • Domyślny
  • Podstawowa
  • Credssp
  • Szyfrowane
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

Wartość domyślna to 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.

Przestroga

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
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 za pomocą protokołu SecureString , zobacz Jak bezpieczny jest protokół SecureString?.

Type:PSCredential
Position:Named
Default value:Current user
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 , aby uruchomić wystąpienie zaplanowanego zadania, zadanie jest uruchamiane natychmiast, niezależnie od wyzwalaczy zadań 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.

Ten parametr został wprowadzony w programie PowerShell 3.0.

Type:String
Position:0
Default value:None
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
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
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
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 $input automatycznej do reprezentowania obiektów wejściowych.

Type:PSObject
Position:Named
Default value:None
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 wieloznaczne nie są interpretowane jako znaki wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w znaki pojedynczego cudzysłowu. Znaki pojedynczego cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Name

Określa przyjazną nazwę nowego zadania. Możesz użyć nazwy , aby zidentyfikować zadanie w innych poleceniach cmdlet zadań, 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
Accept pipeline input:True
Accept wildcard characters:False
-PSVersion

Określa wersję programu PowerShell, która ma być używana do uruchamiania zadania. Gdy wartość parametru PSVersion wynosi 5.1 Zadanie jest uruchamiane w sesji Windows PowerShell 5.1. Dla każdej innej wartości zadanie jest uruchamiane przy użyciu bieżącej wersji programu PowerShell.

Ten parametr został dodany w programie PowerShell 7 i działa tylko w systemie Windows.

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

Począwszy od programu PowerShell 7, parametr RunAs32 nie działa w 64-bitowym programie PowerShell (pwsh). Jeśli parametr RunAs32 jest określony w 64-bitowym programie PowerShell, Start-Job zgłasza błąd wyjątku zakończenia. Aby uruchomić 32-bitowy proces programu PowerShell (pwsh) z programem RunAs32, musisz mieć zainstalowany 32-bitowy program PowerShell.

W 32-bitowym programie PowerShell 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
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
Accept pipeline input:False
Accept wildcard characters:False
-Type

Określa typ niestandardowy zadań uruchamianych przez Start-Job. Wprowadź niestandardową nazwę typu zadania, taką jak PSScheduledJob dla zaplanowanych zadań lub zadanie 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
Accept pipeline input:False
Accept wildcard characters:False
-WorkingDirectory

Określa początkowy katalog roboczy zadania w tle. Jeśli parametr nie zostanie określony, zadanie zostanie uruchomione z lokalizacji domyślnej. Domyślną lokalizacją jest bieżący katalog roboczy obiektu wywołującego, który uruchomił zadanie.

Ten parametr został wprowadzony w programie PowerShell 7.

Type:String
Position:Named
Default value:$HOME on Unix (macOS, Linux) and $HOME\Documents on Windows
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

String

Potok służy do wysyłania obiektu z właściwością Name do parametru Name . Na przykład można potokować obiekt FileInfo z Get-ChildItem do Start-Job.

Dane wyjściowe

System.Management.Automation.PSRemotingJob

Start-Job Zwraca obiekt PSRemotingJob reprezentujący zadanie, które zostało uruchomione.

Uwagi

Aby uruchomić polecenie w tle, Start-Job jest uruchamiane we własnej sesji w bieżącej sesji. Gdy polecenie cmdlet jest używane Invoke-Command do uruchamiania Start-Job polecenia w sesji na komputerze zdalnym, Start-Job uruchamia się w sesji w sesji zdalnej.