Bagikan melalui


Invoke-Command

Menjalankan perintah pada komputer lokal dan jarak jauh.

Sintaks

Invoke-Command
      [-StrictMode <Version>]
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]

Deskripsi

Invoke-Command Cmdlet menjalankan perintah pada komputer lokal atau jarak jauh dan mengembalikan semua output dari perintah, termasuk kesalahan. Dengan menggunakan satu Invoke-Command perintah, Anda dapat menjalankan perintah di beberapa komputer.

Untuk menjalankan satu perintah di komputer jarak jauh, gunakan parameter ComputerName . Untuk menjalankan serangkaian perintah terkait yang berbagi data, gunakan New-PSSession cmdlet untuk membuat PSSession (koneksi persisten) di komputer jarak jauh, lalu gunakan parameter Invoke-Command Sesi untuk menjalankan perintah di PSSession. Untuk menjalankan perintah dalam sesi yang terputus, gunakan parameter InDisconnectedSession . Untuk menjalankan perintah di pekerjaan latar belakang, gunakan parameter AsJob .

Anda juga dapat menggunakan Invoke-Command di komputer lokal untuk menjalankan blok skrip sebagai perintah. PowerShell menjalankan blok skrip segera dalam cakupan anak dari cakupan saat ini.

Sebelum menggunakan Invoke-Command untuk menjalankan perintah pada komputer jarak jauh, baca about_Remote.

Dimulai dengan PowerShell 6.0 Anda dapat menggunakan Secure Shell (SSH) untuk membuat koneksi ke dan memanggil perintah di komputer jarak jauh. SSH harus diinstal pada komputer lokal dan komputer jarak jauh harus dikonfigurasi dengan titik akhir PowerShell SSH. Keuntungan dari sesi jarak jauh PowerShell berbasis SSH adalah berfungsi di beberapa platform (Windows, Linux, macOS). Untuk sesi berbasis SSH, Anda menggunakan parameter HostName atau SSHConnection untuk menentukan komputer jarak jauh dan informasi koneksi yang relevan. Untuk informasi selengkapnya tentang cara menyiapkan remoting PowerShell SSH, lihat PowerShell Remoting Over SSH.

Beberapa sampel kode menggunakan splatting untuk mengurangi panjang baris. Untuk informasi selengkapnya, lihat about_Splatting.

Contoh

Contoh 1: Menjalankan skrip di server

Contoh ini menjalankan Test.ps1 skrip pada komputer Server01.

Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

Parameter FilePath menentukan skrip yang terletak di komputer lokal. Skrip berjalan pada komputer jarak jauh dan hasilnya dikembalikan ke komputer lokal.

Contoh 2: Jalankan perintah di server jarak jauh

Contoh ini menjalankan Get-Culture perintah pada komputer jarak jauh Server01.

Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock {
    Get-Culture
}

Parameter ComputerName menentukan nama komputer jarak jauh. Parameter Kredensial digunakan untuk menjalankan perintah dalam konteks keamanan Domain01\User01, pengguna yang memiliki izin untuk menjalankan perintah. Parameter ScriptBlock menentukan perintah yang akan dijalankan pada komputer jarak jauh.

Sebagai respons, PowerShell meminta kata sandi dan metode autentikasi untuk akun User01. Kemudian menjalankan perintah pada komputer Server01 dan mengembalikan hasilnya.

Contoh 3: Jalankan perintah dalam koneksi persisten

Contoh ini menjalankan perintah yang sama Get-Culture dalam sesi, menggunakan koneksi persisten, pada komputer jarak jauh bernama Server02.

$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock { Get-Culture }

New-PSSession Cmdlet membuat sesi di komputer jarak jauh Server02 dan menyimpannya dalam $s variabel. Biasanya, Anda membuat sesi hanya saat menjalankan serangkaian perintah di komputer jarak jauh.

Invoke-Command Cmdlet menjalankan Get-Culture perintah di Server02. Parameter Sesi menentukan sesi yang disimpan dalam $s variabel.

Sebagai respons, PowerShell menjalankan perintah dalam sesi di komputer Server02.

Contoh 4: Gunakan sesi untuk menjalankan serangkaian perintah yang berbagi data

Contoh ini membandingkan efek menggunakan parameter ComputerName dan Session dari Invoke-Command. Ini menunjukkan cara menggunakan sesi untuk menjalankan serangkaian perintah yang berbagi data yang sama.

Invoke-Command -ComputerName Server02 -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -ComputerName Server02 -ScriptBlock { $p.VirtualMemorySize }
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -Session $s -ScriptBlock { $p.VirtualMemorySize }

17930240

Dua perintah pertama menggunakan parameter ComputerName untuk Invoke-Command menjalankan perintah pada komputer jarak jauh Server02. Perintah pertama menggunakan Get-Process cmdlet untuk mendapatkan proses PowerShell di komputer jarak jauh dan menyimpannya dalam $p variabel. Perintah kedua mendapatkan nilai properti VirtualMemorySize dari proses PowerShell.

Saat Anda menggunakan parameter ComputerName , PowerShell membuat sesi baru untuk menjalankan perintah. Sesi ditutup ketika perintah selesai. Variabel $p dibuat dalam satu koneksi, tetapi tidak ada dalam koneksi yang dibuat untuk perintah kedua.

Masalah diselesaikan dengan membuat sesi persisten pada komputer jarak jauh, lalu menjalankan kedua perintah dalam sesi yang sama.

New-PSSession Cmdlet membuat sesi persisten pada komputer Server02 dan menyimpan sesi dalam $s variabel. Baris Invoke-Command yang mengikuti menggunakan parameter Sesi untuk menjalankan kedua perintah dalam sesi yang sama. Karena kedua perintah berjalan dalam sesi yang sama, $p nilainya tetap aktif.

Contoh 5: Memanggil perintah dengan blok skrip yang disimpan dalam variabel

Contoh ini menunjukkan cara menjalankan perintah yang disimpan sebagai blok skrip dalam variabel. Saat blok skrip disimpan dalam variabel, Anda dapat menentukan variabel sebagai nilai parameter ScriptBlock .

$command = {
    Get-WinEvent -LogName PowerShellCore/Operational |
      Where-Object -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

Variabel $command menyimpan perintah yang diformat Get-WinEvent sebagai blok skrip. Menjalankan Invoke-Command perintah yang disimpan di $command komputer jarak jauh S1 dan S2.

Contoh 6: Jalankan satu perintah di beberapa komputer

Contoh ini menunjukkan cara menggunakan Invoke-Command untuk menjalankan satu perintah di beberapa komputer.

$parameters = @{
  ComputerName      = 'Server01', 'Server02', 'TST-0143', 'localhost'
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock       = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters

Parameter ComputerName menentukan daftar nama komputer yang dipisahkan koma. Daftar komputer mencakup nilai localhost, yang mewakili komputer lokal. Parameter ConfigurationName menentukan konfigurasi sesi alternatif. Parameter ScriptBlock berjalan Get-WinEvent untuk mendapatkan log peristiwa PowerShellCore/Operational dari setiap komputer.

Contoh 7: Mendapatkan versi program host di beberapa komputer

Contoh ini mendapatkan versi program host PowerShell yang berjalan di 200 komputer jarak jauh.

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {
    (Get-Host).Version
}

Karena hanya satu perintah yang dijalankan, Anda tidak perlu membuat koneksi persisten ke masing-masing komputer. Sebagai gantinya, perintah menggunakan parameter ComputerName untuk menunjukkan komputer. Untuk menentukan komputer, ia menggunakan Get-Content cmdlet untuk mendapatkan isi file Machine.txt, file nama komputer.

Invoke-Command Cmdlet menjalankan Get-Host perintah pada komputer jarak jauh. Ini menggunakan notasi titik untuk mendapatkan properti Versi host PowerShell.

Perintah ini berjalan satu per satu. Ketika perintah selesai, output perintah dari semua komputer disimpan dalam $version variabel. Output mencakup nama komputer tempat data berasal.

Contoh 8: Menjalankan pekerjaan latar belakang di beberapa komputer jarak jauh

Contoh ini menjalankan perintah pada dua komputer jarak jauh. Perintah Invoke-Command menggunakan parameter AsJob sehingga perintah berjalan sebagai pekerjaan latar belakang. Perintah berjalan pada komputer jarak jauh, tetapi pekerjaan ada di komputer lokal. Hasilnya ditransmisikan ke komputer lokal.

$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock { Get-EventLog system } -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        ---------------
1    Job1    Running    True          Server01,Server02  Get-EventLog system

$j = Get-Job
$j | Format-List -Property *

HasMoreData   : True
StatusMessage :
Location      : Server01,Server02
Command       : Get-EventLog system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id            : 1
Name          : Job1
ChildJobs     : {Job2, Job3}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

$results = $j | Receive-Job

New-PSSession Cmdlet membuat sesi di komputer jarak jauh Server01 dan Server02. Invoke-Command Cmdlet menjalankan pekerjaan latar belakang di setiap sesi. Perintah menggunakan parameter AsJob untuk menjalankan perintah sebagai pekerjaan latar belakang. Perintah ini mengembalikan objek pekerjaan yang berisi dua objek pekerjaan anak, satu untuk setiap pekerjaan yang dijalankan pada dua komputer jarak jauh.

Perintah Get-Job menyimpan objek pekerjaan dalam $j variabel. Variabel $j kemudian disalurkan ke Format-List cmdlet untuk menampilkan semua properti objek pekerjaan dalam daftar. Perintah terakhir mendapatkan hasil pekerjaan. Ini menyalurkan objek $j pekerjaan ke Receive-Job cmdlet dan menyimpan hasilnya dalam $results variabel.

Contoh 9: Menyertakan variabel lokal dalam perintah yang dijalankan di komputer jarak jauh

Contoh ini menunjukkan cara menyertakan nilai variabel lokal dalam perintah yang dijalankan pada komputer jarak jauh. Perintah menggunakan pengubah Using cakupan untuk mengidentifikasi variabel lokal dalam perintah jarak jauh. Secara default, semua variabel diasumsikan untuk didefinisikan dalam sesi jarak jauh. Pengubah Using cakupan diperkenalkan di PowerShell 3.0. Untuk informasi selengkapnya tentang pengubah Using cakupan, lihat about_Remote_Variables dan about_Scopes.

$Log = 'PowerShellCore/Operational'
Invoke-Command -ComputerName Server01 -ScriptBlock {
    Get-WinEvent -LogName $Using:Log -MaxEvents 10
}

Variabel $Log menyimpan nama log peristiwa, PowerShellCore/Operational. Invoke-Command Cmdlet berjalan Get-WinEvent di Server01 untuk mendapatkan sepuluh peristiwa terbaru dari log peristiwa. Nilai parameter LogName adalah $Log variabel yang diawali oleh Using pengubah cakupan untuk menunjukkan bahwa parameter dibuat dalam sesi lokal, bukan di sesi jarak jauh.

Contoh 10: Sembunyikan nama komputer

Contoh ini menunjukkan efek menggunakan parameter HideComputerName dari Invoke-Command. HideComputerName tidak mengubah objek yang dikembalikan cmdlet ini. Ini hanya mengubah tampilan. Anda masih dapat menggunakan cmdlet Format untuk menampilkan properti PsComputerName dari salah satu objek yang terpengaruh.

Invoke-Command -ComputerName S1, S2 -ScriptBlock { Get-Process PowerShell }

PSComputerName    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
--------------    -------  ------    -----      ----- -----   ------     --   -----------
S1                575      15        45100      40988   200     4.68     1392 PowerShell
S2                777      14        35100      30988   150     3.68     67   PowerShell

Invoke-Command -ComputerName S1, S2 -HideComputerName -ScriptBlock {
    Get-Process PowerShell
}

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
-------  ------    -----      ----- -----   ------     --   -----------
575      15        45100      40988   200     4.68     1392 PowerShell
777      14        35100      30988   150     3.68     67   PowerShell

Dua perintah pertama digunakan Invoke-Command untuk menjalankan Get-Process perintah untuk proses PowerShell. Output perintah pertama mencakup properti PsComputerName , yang berisi nama komputer tempat perintah dijalankan. Output perintah kedua, yang menggunakan HideComputerName, tidak menyertakan kolom PsComputerName .

Contoh 11: Gunakan kata kunci Param dalam blok skrip

Kata Param kunci dan parameter ArgumentList digunakan untuk meneruskan nilai variabel ke parameter bernama dalam blok skrip. Contoh ini menampilkan nama file yang dimulai dengan huruf a dan memiliki .pdf ekstensi.

Untuk informasi selengkapnya tentang Param kata kunci, lihat about_Language_Keywords.

$parameters = @{
    ComputerName = 'Server01'
    ScriptBlock  = {
        Param ($param1, $param2)
        Get-ChildItem -Name $param1 -Include $param2
    }
    ArgumentList = 'a*', '*.pdf'
}
Invoke-Command @parameters

aa.pdf
ab.pdf
ac.pdf
az.pdf

Invoke-Commandmenggunakan parameter ScriptBlock yang menentukan dua variabel, $param1 dan $param2. Get-ChildItemmenggunakan parameter bernama, Nama dan Sertakan dengan nama variabel. ArgumentList meneruskan nilai ke variabel.

Contoh 12: Gunakan variabel otomatis $args dalam blok skrip

Variabel $args otomatis dan parameter ArgumentList digunakan untuk meneruskan nilai array ke posisi parameter dalam blok skrip. Contoh ini menampilkan konten .txt file direktori server. Parameter Get-ChildItem Jalur adalah posisi 0 dan parameter Filter adalah posisi 1.

Untuk informasi selengkapnya tentang variabel, $args lihat about_Automatic_Variables

$parameters = @{
    ComputerName = 'Server01'
    ScriptBlock  = { Get-ChildItem $args[0] $args[1] }
    ArgumentList = 'C:\Test', '*.txt*'
}
Invoke-Command @parameters

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           6/12/2019    15:15            128 alog.txt
-a---           7/27/2019    15:16            256 blog.txt
-a---           9/28/2019    17:10             64 zlog.txt

Invoke-Commandmenggunakan parameter ScriptBlock dan Get-ChildItem menentukan $args[0] nilai array dan $args[1] . ArgumentList meneruskan $args nilai array ke Get-ChildItem posisi parameter untuk Jalur dan Filter.

Contoh 13: Jalankan skrip di semua komputer yang tercantum dalam file teks

Contoh ini menggunakan Invoke-Command cmdlet untuk menjalankan Sample.ps1 skrip pada semua komputer yang tercantum dalam Servers.txt file. Perintah menggunakan parameter FilePath untuk menentukan file skrip. Perintah ini memungkinkan Anda menjalankan skrip di komputer jarak jauh, meskipun file skrip tidak dapat diakses oleh komputer jarak jauh.

$parameters = @{
    ComputerName = (Get-Content Servers.txt)
    FilePath     = 'C:\Scripts\Sample.ps1'
    ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters

Saat Anda mengirimkan perintah, konten Sample.ps1 file disalin ke blok skrip dan blok skrip dijalankan pada setiap komputer jarak jauh. Prosedur ini setara dengan menggunakan parameter ScriptBlock untuk mengirimkan konten skrip.

Contoh 14: Jalankan perintah di komputer jarak jauh menggunakan URI

Contoh ini menunjukkan cara menjalankan perintah di komputer jarak jauh yang diidentifikasi oleh Pengidentifikasi Sumber Daya Seragam (URI). Contoh khusus ini menjalankan Set-Mailbox perintah di server Exchange jarak jauh.

$LiveCred = Get-Credential
$parameters = @{
  ConfigurationName = 'Microsoft.Exchange'
  ConnectionUri     = 'https://ps.exchangelabs.com/PowerShell'
  Credential        = $LiveCred
  Authentication    = 'Basic'
  ScriptBlock       = { Set-Mailbox Dan -DisplayName 'Dan Park' }
}
Invoke-Command @parameters

Baris pertama menggunakan Get-Credential cmdlet untuk menyimpan kredensial Windows Live ID dalam $LiveCred variabel. PowerShell meminta pengguna untuk memasukkan kredensial Windows Live ID.

Variabel $parameters adalah tabel hash yang berisi parameter yang akan diteruskan ke Invoke-Command cmdlet. Invoke-Command Cmdlet menjalankan Set-Mailbox perintah menggunakan konfigurasi sesi Microsoft.Exchange. Parameter ConnectionURI menentukan URL titik akhir server Exchange. Parameter Kredensial menentukan kredensial yang disimpan dalam $LiveCred variabel. Parameter AuthenticationMechanism menentukan penggunaan autentikasi dasar. Parameter ScriptBlock menentukan blok skrip yang berisi perintah .

Contoh 15: Gunakan opsi sesi

Contoh ini menunjukkan cara membuat dan menggunakan parameter SessionOption .

$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$parameters = @{
    ComputerName  = 'server01'
    UseSSL        = $true
    ScriptBlock   = { Get-HotFix }
    SessionOption = $so
    Credential    = 'server01\user01'
}
Invoke-Command @parameters

New-PSSessionOption Cmdlet membuat objek opsi sesi yang menyebabkan ujung jarak jauh tidak memverifikasi Otoritas Sertifikat, Nama Kanonis, dan Daftar Pencabutan saat mengevaluasi koneksi HTTPS masuk. Objek SessionOption disimpan dalam $so variabel .

Catatan

Menonaktifkan pemeriksaan ini nyaman untuk pemecahan masalah, tetapi jelas tidak aman.

Invoke-Command Cmdlet menjalankan Get-HotFix perintah dari jarak jauh. Parameter SessionOption diberikan $so variabel .

Contoh 16: Mengelola pengalihan URI dalam perintah jarak jauh

Contoh ini menunjukkan cara menggunakan parameter AllowRedirection dan SessionOption untuk mengelola pengalihan URI dalam perintah jarak jauh.

$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
  ConnectionUri    = 'https://ps.exchangelabs.com/PowerShell'
  ScriptBlock      = { Get-Mailbox dan }
  AllowRedirection = $true
  SessionOption    = $max
}
Invoke-Command @parameters

New-PSSessionOption Cmdlet membuat objek PSSessionOption yang disimpan dalam $max variabel. Perintah menggunakan parameter MaximumRedirection untuk mengatur properti MaximumConnectionRedirectionCount dari objek PSSessionOption ke 1.

Invoke-Command Cmdlet menjalankan Get-Mailbox perintah pada microsoft Server Exchange jarak jauh. Parameter AllowRedirection menyediakan izin eksplisit untuk mengalihkan koneksi ke titik akhir alternatif. Parameter SessionOption menggunakan objek sesi yang disimpan dalam $max variabel.

Akibatnya, jika komputer jarak jauh yang ditentukan oleh ConnectionURI mengembalikan pesan pengalihan, PowerShell mengalihkan koneksi, tetapi jika tujuan baru mengembalikan pesan pengalihan lain, nilai jumlah pengalihan 1 terlampaui, dan Invoke-Command mengembalikan kesalahan yang tidak mengakhiri.

Contoh 17: Mengakses berbagi jaringan dalam sesi jarak jauh

Contoh ini menunjukkan cara mengakses berbagi jaringan dari sesi jarak jauh. Tiga komputer digunakan untuk menunjukkan contoh. Server01 adalah komputer lokal, Server02 adalah komputer jarak jauh, dan Net03 berisi berbagi jaringan. Server01 tersambung ke Server02, lalu Server02 melakukan hop kedua ke Net03 untuk mengakses berbagi jaringan. Untuk informasi selengkapnya tentang bagaimana PowerShell Remoting mendukung hop antar komputer, lihat Membuat hop kedua di PowerShell Remoting.

Delegasi Penyedia Dukungan Keamanan Kredensial (CredSSP) yang diperlukan diaktifkan dalam pengaturan klien di komputer lokal, dan dalam pengaturan layanan pada komputer jarak jauh. Untuk menjalankan perintah dalam contoh ini, Anda harus menjadi anggota grup Administrator di komputer lokal dan komputer jarak jauh.

Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock { Enable-WSManCredSSP -Role Server -Force }
$parameters = @{
  ComputerName   = 'Server02'
  ScriptBlock    = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = 'CredSSP'
  Credential     = 'Domain01\Admin01'
}
Invoke-Command @parameters

Enable-WSManCredSSP Cmdlet memungkinkan delegasi CredSSP dari komputer lokal Server01 ke komputer jarak jauh Server02. Parameter Peran menentukan Klien untuk mengonfigurasi pengaturan klien CredSSP di komputer lokal.

New-PSSessionmembuat objek PSSession untuk Server02 dan menyimpan objek dalam $s variabel.

Invoke-Command Cmdlet menggunakan $s variabel untuk menyambungkan ke komputer jarak jauh, Server02. Parameter ScriptBlock berjalan Enable-WSManCredSSP di komputer jarak jauh. Parameter Peran menentukan Server untuk mengonfigurasi pengaturan server CredSSP di komputer jarak jauh.

Variabel $parameters berisi nilai parameter untuk menyambungkan ke berbagi jaringan. Invoke-Command Cmdlet menjalankan Get-Item perintah dalam sesi di $s. Perintah ini mendapatkan skrip dari \\Net03\Scripts berbagi jaringan. Perintah menggunakan parameter Autentikasi dengan nilai CredSSP dan parameter Kredensial dengan nilai Domain01\Admin01.

Contoh 18: Memulai skrip di banyak komputer jarak jauh

Contoh ini menjalankan skrip di lebih dari seratus komputer. Untuk meminimalkan dampak pada komputer lokal, ia terhubung ke setiap komputer, memulai skrip, lalu memutuskan sambungan dari setiap komputer. Skrip terus berjalan dalam sesi yang terputus.

$parameters = @{
  ComputerName          = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath              = '\\Scripts\Public\ConfigInventory.ps1'
  SessionOption         = @{
      OutputBufferingMode = 'Drop'
      IdleTimeout         = [timespan]::FromHours(12)
  }
}
Invoke-Command @parameters

Perintah menggunakan Invoke-Command untuk menjalankan skrip. Nilai parameter ComputerName adalah Get-Content perintah yang mendapatkan nama komputer jarak jauh dari file teks. Parameter InDisconnectedSession memutuskan sesi segera setelah memulai perintah. Nilai parameter FilePath adalah skrip yang Invoke-Command berjalan di setiap komputer.

Nilai SessionOption adalah tabel hash. Nilai OutputBufferingMode diatur ke Drop dan nilai IdleTimeout diatur ke 12 jam.

Untuk mendapatkan hasil perintah dan skrip yang berjalan dalam sesi yang terputus, gunakan Receive-PSSession cmdlet .

Contoh 19: Jalankan perintah di komputer jarak jauh menggunakan SSH

Contoh ini menunjukkan cara menjalankan perintah di komputer jarak jauh menggunakan Secure Shell (SSH). Jika SSH dikonfigurasi di komputer jarak jauh untuk meminta kata sandi, maka Anda akan mendapatkan permintaan kata sandi. Jika tidak, Anda harus menggunakan autentikasi pengguna berbasis kunci SSH.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }

Contoh 20: Jalankan perintah di komputer jarak jauh menggunakan SSH dan tentukan kunci autentikasi pengguna

Contoh ini menunjukkan cara menjalankan perintah di komputer jarak jauh menggunakan SSH dan menentukan file kunci untuk autentikasi pengguna. Anda tidak akan dimintai kata sandi kecuali autentikasi kunci gagal dan komputer jarak jauh dikonfigurasi untuk mengizinkan autentikasi kata sandi dasar.

$parameters = @{
    HostName    = 'UserA@LinuxServer01'
    ScriptBlock = { Get-MailBox * }
    KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command

Contoh 21: Menjalankan file skrip di beberapa komputer jarak jauh menggunakan SSH sebagai pekerjaan

Contoh ini menunjukkan cara menjalankan file skrip di beberapa komputer jarak jauh menggunakan SSH dan set parameter SSHConnection . Parameter SSHConnection mengambil array tabel hash yang berisi informasi koneksi untuk setiap komputer. Contoh ini mengharuskan komputer jarak jauh target memiliki SSH yang dikonfigurasi untuk mendukung autentikasi pengguna berbasis kunci.

$sshConnections = @(
    @{
        HostName    = "WinServer1"
        UserName    = "Domain\UserA"
        KeyFilePath = "C:\Users\UserA\id_rsa"
    }
    @{
        HostName    = "UserB@LinuxServer5"
        KeyFilePath = "/Users/UserB/id_rsa"
    }
)
$results = Invoke-Command -FilePath c:\Scripts\GetInfo.ps1 -SSHConnection $sshConnections

Contoh 22: Menyambungkan ke sesi SSH jarak jauh menggunakan opsi SSH

Contoh ini menunjukkan cara menjalankan file skrip pada komputer berbasis Linux jarak jauh menggunakan opsi SSH. Parameter Opsi mengambil hashtable nilai yang diteruskan sebagai opsi ke perintah yang mendasar ssh yang menetapkan koneksi ke sistem jarak jauh.

$options = @{
    Port=22
    User = 'UserB'
    Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options

Parameter

-AllowRedirection

Memungkinkan pengalihan koneksi ini ke Pengidentifikasi Sumber Daya Seragam (URI) alternatif.

Saat Anda menggunakan parameter ConnectionURI , tujuan jarak jauh dapat mengembalikan instruksi untuk mengalihkan ke URI yang berbeda. Secara default, PowerShell tidak mengalihkan koneksi, tetapi Anda dapat menggunakan parameter ini untuk memungkinkannya mengalihkan koneksi.

Anda juga dapat membatasi berapa kali koneksi dialihkan dengan mengubah nilai opsi sesi MaximumConnectionRedirectionCount . Gunakan parameter MaximumRedirection cmdlet New-PSSessionOption atau atur properti MaximumConnectionRedirectionCount dari $PSSessionOption variabel preferensi. Nilai defaultnya adalah 5.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ApplicationName

Menentukan segmen nama aplikasi dari URI koneksi. Gunakan parameter ini untuk menentukan nama aplikasi saat Anda tidak menggunakan parameter ConnectionURI dalam perintah .

Nilai default adalah nilai $PSSessionApplicationName variabel preferensi di komputer lokal. Jika variabel preferensi ini tidak ditentukan, nilai defaultnya adalah WSMAN. Nilai ini sesuai untuk sebagian besar penggunaan. Untuk informasi selengkapnya, lihat about_Preference_Variables.

Layanan WinRM menggunakan nama aplikasi untuk memilih pendengar untuk melayani permintaan koneksi. Nilai parameter ini harus cocok dengan nilai properti URLPrefix pendengar di komputer jarak jauh.

Jenis:String
Position:Named
Nilai default:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:False

-ArgumentList

Menyediakan nilai parameter untuk blokir skrip. Parameter dalam blok skrip diteruskan berdasarkan posisi dari nilai array yang disediakan ke ArgumentList. Ini dikenal sebagai percikan array. Untuk informasi selengkapnya tentang perilaku ArgumentList, lihat about_Splatting.

Jenis:Object[]
Alias:Args
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-AsJob

Menunjukkan bahwa cmdlet ini menjalankan perintah sebagai pekerjaan latar belakang pada komputer jarak jauh. Gunakan parameter ini untuk menjalankan perintah yang membutuhkan waktu lama untuk menyelesaikannya.

Saat Anda menggunakan parameter AsJob , perintah mengembalikan objek yang mewakili pekerjaan, lalu menampilkan prompt perintah. Anda dapat terus bekerja dalam sesi saat pekerjaan selesai. Untuk mengelola pekerjaan, gunakan *-Job cmdlet. Untuk mendapatkan hasil pekerjaan, gunakan Receive-Job cmdlet .

Parameter AsJob menyerupai menggunakan Invoke-Command cmdlet untuk menjalankan Start-Job cmdlet dari jarak jauh. Namun, dengan AsJob, pekerjaan dibuat di komputer lokal, meskipun pekerjaan berjalan di komputer jarak jauh. Hasil pekerjaan jarak jauh secara otomatis dikembalikan ke komputer lokal.

Untuk informasi selengkapnya tentang pekerjaan latar belakang PowerShell, lihat about_Jobs dan about_Remote_Jobs.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Authentication

Menentukan mekanisme yang digunakan untuk mengautentikasi kredensial pengguna. Autentikasi CredSSP hanya tersedia di Windows Vista, Windows Server 2008, dan versi sistem operasi Windows yang lebih baru.

Nilai yang dapat diterima untuk parameter ini adalah sebagai berikut:

  • Default
  • Dasar
  • Credssp
  • digest
  • Kerberos
  • Negosiasi
  • NegosiasiWithImplicitCredential

Nilai default-nya adalah Default.

Untuk informasi selengkapnya tentang nilai parameter ini, lihat Enumerasi AuthenticationMechanism.

Perhatian

Autentikasi Penyedia Dukungan Keamanan Kredensial (CredSSP), di mana kredensial pengguna diteruskan ke komputer jarak jauh untuk diautentikasi, dirancang untuk perintah yang memerlukan autentikasi pada lebih dari satu sumber daya, seperti mengakses berbagi jaringan jarak jauh. Mekanisme ini meningkatkan risiko keamanan operasi jarak jauh. Jika komputer jarak jauh disusupi, kredensial yang diteruskan ke komputer jarak jauh dapat digunakan untuk mengontrol sesi jaringan. Untuk informasi selengkapnya, lihat Penyedia Dukungan Keamanan Kredensial.

Jenis:AuthenticationMechanism
Nilai yang diterima:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Nilai default:Default
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-CertificateThumbprint

Menentukan sertifikat kunci publik digital (X509) dari akun pengguna yang memiliki izin untuk menyambungkan ke sesi yang terputus. Masukkan thumbprint sertifikat sertifikat.

Sertifikat digunakan dalam autentikasi berbasis sertifikat klien. Mereka hanya dapat dipetakan ke akun pengguna lokal dan tidak berfungsi dengan akun domain.

Untuk mendapatkan thumbprint sertifikat, gunakan Get-Item perintah atau Get-ChildItem di drive PowerShell Cert: .

Jenis:String
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ComputerName

Menentukan komputer tempat perintah dijalankan. Defaultnya adalah komputer lokal.

Saat Anda menggunakan parameter ComputerName , PowerShell membuat koneksi sementara yang hanya digunakan untuk menjalankan perintah yang ditentukan lalu ditutup. Jika Anda memerlukan koneksi persisten, gunakan parameter Sesi .

Ketik nama NETBIOS, alamat IP, atau nama domain yang sepenuhnya memenuhi syarat dari satu atau beberapa komputer dalam daftar yang dipisahkan koma. Untuk menentukan komputer lokal, ketik nama komputer, localhost, atau titik (.).

Untuk menggunakan alamat IP dalam nilai ComputerName, perintah harus menyertakan parameter Kredensial . Komputer harus dikonfigurasi untuk transportasi HTTPS atau alamat IP komputer jarak jauh harus disertakan dalam daftar WinRM TrustedHosts komputer lokal. Untuk petunjuk menambahkan nama komputer ke daftar TrustedHosts , lihat Cara Menambahkan Komputer ke Daftar Host Tepercaya.

Pada Windows Vista dan versi sistem operasi Windows yang lebih baru, untuk menyertakan komputer lokal dalam nilai ComputerName, Anda harus menjalankan PowerShell menggunakan opsi Jalankan sebagai administrator .

Jenis:String[]
Alias:Cn
Position:0
Nilai default:Local computer
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ConfigurationName

Menentukan konfigurasi sesi yang digunakan untuk PSSession baru.

Masukkan nama konfigurasi atau URI sumber daya yang sepenuhnya memenuhi syarat untuk konfigurasi sesi. Jika Anda hanya menentukan nama konfigurasi, URI skema berikut ditangguhkan: http://schemas.microsoft.com/PowerShell.

Ketika digunakan dengan SSH, parameter ini menentukan subsistem yang akan digunakan pada target seperti yang didefinisikan dalam sshd_config. Nilai default untuk SSH adalah powershell subsistem.

Konfigurasi sesi untuk sesi terletak di komputer jarak jauh. Jika konfigurasi sesi yang ditentukan tidak ada di komputer jarak jauh, perintah gagal.

Nilai default adalah nilai $PSSessionConfigurationName variabel preferensi di komputer lokal. Jika variabel preferensi ini tidak diatur, defaultnya adalah Microsoft.PowerShell. Untuk informasi selengkapnya, lihat about_Preference_Variables.

Jenis:String
Position:Named
Nilai default:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:False

-ConnectingTimeout

Menentukan jumlah waktu dalam milidetik yang diizinkan agar koneksi SSH awal selesai. Jika koneksi tidak selesai dalam waktu yang ditentukan, kesalahan akan ditampilkan.

Parameter ini diperkenalkan di PowerShell 7.2

Jenis:Int32
Position:Named
Nilai default:Unlimited
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ConnectionUri

Menentukan Pengidentifikasi Sumber Daya Seragam (URI) yang menentukan titik akhir koneksi sesi. URI harus sepenuhnya memenuhi syarat.

Format string ini adalah sebagai berikut:

<Transport>://<ComputerName>:<Port>/<ApplicationName>

Nilai defaultnya adalah sebagai berikut:

http://localhost:5985/WSMAN

Jika Anda tidak menentukan URI koneksi, Anda dapat menggunakan parameter UseSSL dan Port untuk menentukan nilai URI koneksi.

Nilai yang valid untuk segmen Transportasi URI adalah HTTP dan HTTPS. Jika Anda menentukan URI koneksi dengan segmen Transportasi, tetapi tidak menentukan port, sesi dibuat dengan port standar: 80 untuk HTTP dan 443 untuk HTTPS. Untuk menggunakan port default untuk remoting PowerShell, tentukan port 5985 untuk HTTP atau 5986 untuk HTTPS.

Jika komputer tujuan mengalihkan koneksi ke URI yang berbeda, PowerShell mencegah pengalihan kecuali Anda menggunakan parameter AllowRedirection dalam perintah.

Jenis:Uri[]
Alias:URI, CU
Position:0
Nilai default:http://localhost:5985/WSMAN
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ContainerId

Menentukan array ID kontainer.

Jenis:String[]
Position:Named
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-Credential

Menentukan akun pengguna yang memiliki izin untuk melakukan tindakan ini. Defaultnya adalah pengguna saat ini.

Ketik nama pengguna, seperti User01 atau Domain01\User01, atau masukkan objek PSCredential yang dihasilkan oleh Get-Credential cmdlet. Jika Anda mengetikkan nama pengguna, Anda akan diminta untuk memasukkan kata sandi.

Kredensial disimpan dalam objek PSCredential dan kata sandi disimpan sebagai SecureString.

Catatan

Untuk informasi selengkapnya tentang perlindungan data SecureString , lihat Seberapa aman SecureString?.

Jenis:PSCredential
Position:Named
Nilai default:Current user
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:False

-EnableNetworkAccess

Menunjukkan bahwa cmdlet ini menambahkan token keamanan interaktif ke sesi loopback. Token interaktif memungkinkan Anda menjalankan perintah dalam sesi loopback yang mendapatkan data dari komputer lain. Misalnya, Anda dapat menjalankan perintah dalam sesi yang menyalin file XML dari komputer jarak jauh ke komputer lokal.

Sesi loopback adalah PSSession yang berasal dan berakhir pada komputer yang sama. Untuk membuat sesi loopback, hilangkan parameter ComputerName atau atur nilainya ke titik (.), localhost, atau nama komputer lokal.

Secara default, sesi loopback dibuat menggunakan token jaringan, yang mungkin tidak menyediakan izin yang memadai untuk mengautentikasi ke komputer jarak jauh.

Parameter EnableNetworkAccess hanya efektif dalam sesi loopback. Jika Anda menggunakan EnableNetworkAccess saat membuat sesi di komputer jarak jauh, perintah berhasil, tetapi parameter diabaikan.

Anda dapat mengizinkan akses jarak jauh dalam sesi loopback menggunakan nilai CredSSP dari parameter Autentikasi , yang mendelegasikan kredensial sesi ke komputer lain.

Untuk melindungi komputer dari akses berbahaya, sesi loopback terputus yang memiliki token interaktif, yang dibuat menggunakan EnableNetworkAccess, hanya dapat disambungkan kembali dari komputer tempat sesi dibuat. Sesi terputus yang menggunakan autentikasi CredSSP dapat disambungkan kembali dari komputer lain. Untuk informasi selengkapnya, lihat Disconnect-PSSession .

Parameter ini diperkenalkan di PowerShell 3.0.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-FilePath

Menentukan skrip lokal yang dijalankan cmdlet ini pada satu atau beberapa komputer jarak jauh. Masukkan jalur dan nama file skrip, atau pipa jalur skrip ke Invoke-Command. Skrip harus ada di komputer lokal atau di direktori yang dapat diakses komputer lokal. Gunakan ArgumentList untuk menentukan nilai parameter dalam skrip.

Saat Anda menggunakan parameter ini, PowerShell mengonversi konten file skrip yang ditentukan ke blok skrip, mengirimkan blok skrip ke komputer jarak jauh, dan menjalankannya di komputer jarak jauh.

Jenis:String
Alias:PSPath
Position:1
Nilai default:None
Diperlukan:True
Terima input alur:False
Terima karakter wildcard:False

-HideComputerName

Menunjukkan bahwa cmdlet ini menghilangkan nama komputer setiap objek dari tampilan output. Secara default, nama komputer yang menghasilkan objek muncul di tampilan.

Parameter ini hanya memengaruhi tampilan output. Ini tidak mengubah objek.

Jenis:SwitchParameter
Alias:HCN
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-HostName

Menentukan array nama komputer untuk koneksi berbasis Secure Shell (SSH). Ini mirip dengan parameter ComputerName kecuali bahwa koneksi ke komputer jarak jauh dibuat menggunakan SSH daripada Windows WinRM.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:String[]
Position:Named
Nilai default:None
Diperlukan:True
Terima input alur:False
Terima karakter wildcard:False

-InDisconnectedSession

Menunjukkan bahwa cmdlet ini menjalankan perintah atau skrip dalam sesi yang terputus.

Saat Anda menggunakan parameter InDisconnectedSession , Invoke-Command membuat sesi persisten di setiap komputer jarak jauh, memulai perintah yang ditentukan oleh parameter ScriptBlock atau FilePath , lalu memutuskan sambungan dari sesi. Perintah terus berjalan dalam sesi yang terputus. InDisconnectedSession memungkinkan Anda menjalankan perintah tanpa mempertahankan koneksi ke sesi jarak jauh. Dan, karena sesi terputus sebelum hasil dikembalikan, InDisconnectedSession memastikan bahwa semua hasil perintah dikembalikan ke sesi yang disambungkan kembali, alih-alih dibagi antar sesi.

Anda tidak dapat menggunakan InDisconnectedSession dengan parameter Sesi atau parameter AsJob.

Perintah yang menggunakan InDisconnectedSession mengembalikan objek PSSession yang mewakili sesi yang terputus. Mereka tidak mengembalikan output perintah. Untuk menyambungkan ke sesi yang terputus, gunakan Connect-PSSession cmdlet atau Receive-PSSession . Untuk mendapatkan hasil perintah yang berjalan dalam sesi, gunakan Receive-PSSession cmdlet . Untuk menjalankan perintah yang menghasilkan output dalam sesi yang terputus, atur nilai opsi sesi OutputBufferingMode ke Drop. Jika Anda ingin tersambung ke sesi yang terputus, atur batas waktu diam dalam sesi sehingga memberikan waktu yang cukup bagi Anda untuk terhubung sebelum menghapus sesi.

Anda dapat mengatur mode buffering output dan batas waktu diam di parameter SessionOption atau dalam $PSSessionOption variabel preferensi. Untuk informasi selengkapnya tentang opsi sesi, lihat New-PSSessionOption dan about_Preference_Variables.

Untuk informasi selengkapnya tentang fitur Sesi Terputus, lihat about_Remote_Disconnected_Sessions.

Parameter ini diperkenalkan di PowerShell 3.0.

Jenis:SwitchParameter
Alias:Disconnected
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-InputObject

Menentukan input ke perintah . Masukkan variabel yang berisi objek atau ketik perintah atau ekspresi yang mendapatkan objek.

Saat menggunakan parameter InputObject , gunakan $Input variabel otomatis dalam nilai parameter ScriptBlock untuk mewakili objek input.

Jenis:PSObject
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:False

-JobName

Menentukan nama yang mudah diingat untuk pekerjaan latar belakang. Secara default, pekerjaan diberi nama Job<n>, di mana <n> adalah angka ordinal.

Jika Anda menggunakan parameter JobName dalam perintah, perintah dijalankan sebagai pekerjaan, dan Invoke-Command mengembalikan objek pekerjaan, bahkan jika Anda tidak menyertakan AsJob dalam perintah.

Untuk informasi selengkapnya tentang pekerjaan latar belakang PowerShell, lihat about_Jobs.

Jenis:String
Position:Named
Nilai default:Job<n>
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-KeyFilePath

Menentukan jalur file kunci yang digunakan oleh Secure Shell (SSH) untuk mengautentikasi pengguna di komputer jarak jauh.

SSH memungkinkan autentikasi pengguna dilakukan melalui kunci privat dan publik sebagai alternatif untuk autentikasi kata sandi dasar. Jika komputer jarak jauh dikonfigurasi untuk autentikasi kunci, parameter ini dapat digunakan untuk menyediakan kunci yang mengidentifikasi pengguna.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:String
Alias:IdentityFilePath
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-NoNewScope

Menunjukkan bahwa cmdlet ini menjalankan perintah yang ditentukan dalam cakupan saat ini. Secara default, Invoke-Command menjalankan perintah dalam cakupannya sendiri.

Parameter ini hanya valid dalam perintah yang dijalankan dalam sesi saat ini, yaitu perintah yang menghilangkan parameter ComputerName dan Session .

Parameter ini diperkenalkan di PowerShell 3.0.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Options

Menentukan hashtable opsi SSH yang digunakan saat menyambungkan ke sesi berbasis SSH jarak jauh. Opsi yang mungkin adalah nilai apa pun yang didukung oleh versi berbasis Unix dari perintah ssh .

Nilai apa pun yang secara eksplisit diteruskan oleh parameter lebih diutamakan daripada nilai yang diteruskan dalam hashtable Opsi . Misalnya, menggunakan parameter Port mengambil alih pasangan kunci-nilai yang Port diteruskan dalam hashtable Opsi .

Parameter ini ditambahkan di PowerShell 7.3.

Jenis:Hashtable
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Port

Menentukan port jaringan pada komputer jarak jauh yang digunakan untuk perintah ini. Untuk tersambung ke komputer jarak jauh, komputer jarak jauh harus mendengarkan porta yang digunakan koneksi. Port default adalah 5985 (port WinRM untuk HTTP) dan 5986 (port WinRM untuk HTTPS).

Sebelum menggunakan port alternatif, konfigurasikan pendengar WinRM di komputer jarak jauh untuk mendengarkan di port tersebut. Untuk mengonfigurasi pendengar, ketik dua perintah berikut pada prompt PowerShell:

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

Jangan gunakan parameter Port kecuali Anda harus. Port yang diatur dalam perintah berlaku untuk semua komputer atau sesi tempat perintah dijalankan. Pengaturan port alternatif mungkin mencegah perintah berjalan pada semua komputer.

Jenis:Int32
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-RemoteDebug

Digunakan untuk menjalankan perintah yang dipanggil dalam mode debug dalam sesi PowerShell jarak jauh.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-RunAsAdministrator

Menunjukkan bahwa cmdlet ini memanggil perintah sebagai Administrator.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ScriptBlock

Menentukan perintah yang akan dijalankan. Sertakan perintah dalam kurung kurawal ({ }) untuk membuat blok skrip. Saat menggunakan Invoke-Command untuk menjalankan perintah dari jarak jauh, variabel apa pun dalam perintah dievaluasi di komputer jarak jauh.

Catatan

Parameter untuk blok skrip hanya dapat diteruskan dari ArgumentList berdasarkan posisi. Parameter pengalihan tidak dapat diteruskan berdasarkan posisi. Jika Anda memerlukan parameter yang berperilaku seperti jenis SwitchParameter , gunakan jenis Boolean sebagai gantinya.

Jenis:ScriptBlock
Alias:Command
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:False
Terima karakter wildcard:False

-Session

Menentukan array sesi di mana cmdlet ini menjalankan perintah. Masukkan variabel yang berisi objek PSSession atau perintah yang membuat atau mendapatkan objek PSSession , seperti New-PSSession perintah atau Get-PSSession .

Saat Anda membuat PSSession, PowerShell membuat koneksi persisten ke komputer jarak jauh. Gunakan PSSession untuk menjalankan serangkaian perintah terkait yang berbagi data. Untuk menjalankan satu perintah atau serangkaian perintah yang tidak terkait, gunakan parameter ComputerName . Untuk informasi selengkapnya, lihat about_PSSessions.

Jenis:PSSession[]
Position:0
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-SessionName

Menentukan nama yang mudah diingat untuk sesi yang terputus. Anda dapat menggunakan nama untuk merujuk ke sesi dalam perintah berikutnya, seperti Get-PSSession perintah. Parameter ini hanya valid dengan parameter InDisconnectedSession .

Parameter ini diperkenalkan di PowerShell 3.0.

Jenis:String[]
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-SessionOption

Menentukan opsi tingkat lanjut untuk sesi tersebut. Masukkan objek SessionOption, seperti objek yang Anda buat menggunakan New-PSSessionOption cmdlet, atau tabel hash tempat kunci adalah nama opsi sesi dan nilainya adalah nilai opsi sesi.

Catatan

Jika Anda menentukan hashtable untuk SessionOption, PowerShell mengonversi hashtable menjadi objek System.Management.Automation.Remoting.PSSessionOption. Nilai untuk kunci yang ditentukan dalam hashtable ditransmisikan ke properti objek yang cocok. Ini berakibat berbeda dari memanggil New-PSSessionOption. Misalnya, nilai System.TimeSpan untuk properti batas waktu, seperti IdleTimeout, mengonversi nilai bilangan bulat menjadi tick alih-alih milidetik. Untuk informasi selengkapnya tentang objek PSSessionOption dan propertinya, lihat PSSessionOption

Nilai default untuk opsi ditentukan oleh nilai $PSSessionOption variabel preferensi, jika diatur. Jika tidak, nilai default ditetapkan oleh opsi yang diatur dalam konfigurasi sesi.

Nilai opsi sesi lebih diutamakan daripada nilai default untuk sesi yang diatur dalam $PSSessionOption variabel preferensi dan dalam konfigurasi sesi. Namun, mereka tidak lebih diutamakan daripada nilai maksimum, kuota, atau batas yang ditetapkan dalam konfigurasi sesi.

Untuk deskripsi opsi sesi yang menyertakan nilai default, lihat New-PSSessionOption. Untuk informasi tentang $PSSessionOption variabel preferensi, lihat about_Preference_Variables. Untuk informasi selengkapnya tentang konfigurasi sesi, lihat about_Session_Configurations.

Jenis:PSSessionOption
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-SSHConnection

Parameter ini mengambil array tabel hash di mana setiap tabel hash berisi satu atau beberapa parameter koneksi yang diperlukan untuk membuat koneksi Secure Shell (SSH). Parameter SSHConnection berguna untuk membuat beberapa sesi di mana setiap sesi memerlukan informasi koneksi yang berbeda.

Hashtable memiliki anggota berikut:

  • ComputerName (atau HostName)
  • Port
  • UserName
  • KeyFilePath (atau IdentityFilePath)

ComputerName (atau HostName) adalah satu-satunya pasangan kunci-nilai yang diperlukan.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:Hashtable[]
Position:Named
Nilai default:None
Diperlukan:True
Terima input alur:False
Terima karakter wildcard:False

-SSHTransport

Menunjukkan bahwa koneksi jarak jauh dibuat menggunakan Secure Shell (SSH).

Secara default PowerShell menggunakan Windows WinRM untuk menyambungkan ke komputer jarak jauh. Sakelar ini memaksa PowerShell untuk menggunakan parameter HostName untuk membuat koneksi jarak jauh berbasis SSH.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:SwitchParameter
Nilai yang diterima:true
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Subsystem

Menentukan subsistem SSH yang digunakan untuk PSSession baru.

Ini menentukan subsistem yang akan digunakan pada target seperti yang didefinisikan dalam sshd_config. Subsistem memulai versi PowerShell tertentu dengan parameter yang telah ditentukan sebelumnya. Jika subsistem yang ditentukan tidak ada di komputer jarak jauh, perintah gagal.

Jika parameter ini tidak digunakan, defaultnya powershell adalah subsistem.

Jenis:String
Position:Named
Nilai default:powershell
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-ThrottleLimit

Menentukan jumlah maksimum koneksi bersamaan yang dapat dibuat untuk menjalankan perintah ini. Jika Anda menghilangkan parameter ini atau memasukkan nilai 0, nilai default, 32, digunakan.

Batas pembatasan hanya berlaku untuk perintah saat ini, bukan ke sesi atau ke komputer.

Jenis:Int32
Position:Named
Nilai default:32
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-UserName

Menentukan nama pengguna untuk akun yang digunakan untuk menjalankan perintah pada komputer jarak jauh. Metode autentikasi pengguna tergantung pada bagaimana Secure Shell (SSH) dikonfigurasi pada komputer jarak jauh.

Jika SSH dikonfigurasi untuk autentikasi kata sandi dasar, maka Anda akan dimintai kata sandi pengguna.

Jika SSH dikonfigurasi untuk autentikasi pengguna berbasis kunci, jalur file kunci dapat disediakan melalui parameter KeyFilePath dan tidak ada permintaan kata sandi yang terjadi. Jika file kunci pengguna klien terletak di lokasi SSH yang diketahui, parameter KeyFilePath tidak diperlukan untuk autentikasi berbasis kunci, dan autentikasi pengguna terjadi secara otomatis berdasarkan nama pengguna. Untuk informasi selengkapnya, lihat dokumentasi SSH platform Anda tentang autentikasi pengguna berbasis kunci.

Ini bukan parameter yang diperlukan. Jika parameter UserName tidak ditentukan, maka nama pengguna yang masuk saat ini digunakan untuk koneksi.

Parameter ini diperkenalkan di PowerShell 6.0.

Jenis:String
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-UseSSL

Menunjukkan bahwa cmdlet ini menggunakan protokol Secure Sockets Layer (SSL) untuk membuat koneksi ke komputer jarak jauh. Secara default, SSL tidak digunakan.

WS-Management mengenkripsi semua konten PowerShell yang dikirimkan melalui jaringan. Parameter UseSSL adalah perlindungan tambahan yang mengirim data di seluruh HTTPS, bukan HTTP.

Jika Anda menggunakan parameter ini, tetapi SSL tidak tersedia pada port yang digunakan untuk perintah, perintah gagal.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-VMId

Menentukan array ID komputer virtual.

Jenis:Guid[]
Alias:VMGuid
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-VMName

Menentukan array nama komputer virtual.

Jenis:String[]
Position:Named
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

Input

ScriptBlock

Anda dapat menyalurkan perintah di blok skrip ke Invoke-Command. $Input Gunakan variabel otomatis untuk mewakili objek input dalam perintah.

Output

System.Management.Automation.PSRemotingJob

Jika Anda menggunakan parameter AsJob , cmdlet ini mengembalikan objek pekerjaan.

PSSession

Jika Anda menggunakan parameter InDisconnectedSession , cmdlet ini mengembalikan objek PSSession .

Object

Secara default, cmdlet ini mengembalikan output perintah yang dipanggil, yang merupakan nilai parameter ScriptBlock .

Catatan

PowerShell menyertakan alias berikut untuk Invoke-Command:

  • Semua platform:
    • icm

Pada Windows Vista, dan versi sistem operasi Windows yang lebih baru, untuk menggunakan parameter ComputerName untuk Invoke-Command menjalankan perintah di komputer lokal, Anda harus menjalankan PowerShell menggunakan opsi Jalankan sebagai administrator .

Saat Anda menjalankan perintah di beberapa komputer, PowerShell tersambung ke komputer dalam urutan muncul dalam daftar. Namun, output perintah ditampilkan dalam urutan yang diterima dari komputer jarak jauh, yang mungkin berbeda.

Kesalahan yang dihasilkan dari perintah yang Invoke-Command berjalan disertakan dalam hasil perintah. Kesalahan yang akan mengakhiri kesalahan dalam perintah lokal diperlakukan sebagai kesalahan yang tidak mengakhiri dalam perintah jarak jauh. Strategi ini memastikan bahwa mengakhiri kesalahan pada satu komputer tidak menutup perintah pada semua komputer tempat kesalahan dijalankan. Praktik ini digunakan bahkan ketika perintah jarak jauh dijalankan pada satu komputer.

Jika komputer jarak jauh tidak berada dalam domain yang dipercaya komputer lokal, komputer mungkin tidak dapat mengautentikasi kredensial pengguna. Untuk menambahkan komputer jarak jauh ke daftar host tepercaya di WS-Management, gunakan perintah berikut di WSMAN penyedia, di mana <Remote-Computer-Name> adalah nama komputer jarak jauh:

Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>

Saat Anda memutuskan sambungan PSSession menggunakan parameter InDisconnectedSession, status sesi Terputus dan ketersediaannya tidak ada. Nilai properti Status relatif terhadap sesi saat ini. Nilai Terputus berarti bahwa PSSession tidak tersambung ke sesi saat ini. Namun, itu tidak berarti bahwa PSSession terputus dari semua sesi. Ini mungkin terhubung ke sesi yang berbeda. Untuk menentukan apakah Anda dapat menyambungkan atau menyambungkan kembali ke sesi, gunakan properti Ketersediaan .

Nilai Ketersediaan Tidak Ada menunjukkan bahwa Anda dapat tersambung ke sesi. Nilai Sibuk menunjukkan bahwa Anda tidak dapat tersambung ke PSSession karena terhubung ke sesi lain. Untuk informasi selengkapnya tentang nilai properti Status sesi, lihat RunspaceState. Untuk informasi selengkapnya tentang nilai properti Ketersediaan sesi, lihat RunspaceAvailability.

Parameter HostName dan SSHConnection disertakan dimulai dengan PowerShell 6.0. Mereka ditambahkan untuk menyediakan Remoting PowerShell berdasarkan Secure Shell (SSH). PowerShell dan SSH didukung pada beberapa platform (Windows, Linux, macOS) dan PowerShell bekerja melalui platform ini di mana PowerShell dan SSH diinstal dan dikonfigurasi. Ini terpisah dari Windows sebelumnya hanya jarak jauh yang didasarkan pada WinRM dan banyak fitur dan batasan khusus WinRM tidak berlaku. Misalnya kuota berbasis WinRM, opsi sesi, konfigurasi titik akhir kustom, dan fitur pemutusan sambungan/koneksi ulang saat ini tidak didukung. Untuk informasi selengkapnya tentang cara menyiapkan remoting PowerShell SSH, lihat PowerShell Remoting Over SSH.

Executable ssh mendapatkan data konfigurasi dari sumber berikut dalam urutan berikut:

  1. opsi baris perintah
  2. file konfigurasi pengguna (~/.ssh/config)
  3. file konfigurasi di seluruh sistem (/etc/ssh/ssh_config)

Parameter cmdlet berikut dipetakan ke dalam ssh parameter dan opsi:

Parameter cmdlet parameter ssh opsi ssh -o yang setara
-KeyFilePath -i <KeyFilePath> -o IdentityFile=<KeyFilePath>
-UserName -l <UserName> -o User=<UserName>
-Port -p <Port> -o Port=<Port>
-ComputerName -Subsystem -s <ComputerName> <Subsystem> -o Host=<ComputerName>

Nilai apa pun yang secara eksplisit diteruskan oleh parameter lebih diutamakan daripada nilai yang diteruskan dalam hashtable Opsi . Untuk informasi selengkapnya tentang ssh_config file, lihat ssh_config(5).