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-Command
menggunakan parameter ScriptBlock yang menentukan dua variabel, $param1
dan $param2
. Get-ChildItem
menggunakan 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-Command
menggunakan 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-PSSession
membuat 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
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.
Jika Anda menggunakan parameter InDisconnectedSession , cmdlet ini mengembalikan objek PSSession .
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:
- opsi baris perintah
- file konfigurasi pengguna (~/.ssh/config)
- 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).