Disconnect-PSSession
Putuskan sambungan dari sesi.
Sintaks
Disconnect-PSSession
[-Session] <PSSession[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-Name <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-InstanceId <Guid[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-Id] <Int32[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Deskripsi
Cmdlet ini hanya tersedia di platform Windows.
Cmdlet Disconnect-PSSession
memutuskan sesi PowerShell (PSSession ), seperti yang dimulai dengan menggunakan cmdlet New-PSSession
, dari sesi saat ini. Akibatnya, PSSession dalam keadaan terputus. Anda dapat tersambung ke PSSession terputus dari sesi saat ini atau dari sesi lain di komputer lokal atau komputer lain.
Cmdlet Disconnect-PSSession
terputus hanya terbuka PSSessions yang terhubung ke sesi saat ini.
Disconnect-PSSession
tidak dapat memutuskan sambungan PSSessions, atau interaktif PSSessions yang dimulai dengan menggunakan cmdlet Enter-PSSession
, dan tidak dapat memutuskan sambungan PSSessions yang terhubung ke sesi lain.
Untuk menyambungkan kembali ke PSSessionterputus, gunakan cmdlet Connect-PSSession
atau Receive-PSSession
.
Ketika PSSession terputus, perintah di PSSession terus berjalan hingga selesai, kecuali PSSession waktu habis atau perintah dalam PSSession diblokir oleh buffer output penuh. Untuk mengubah batas waktu diam, gunakan parameter IdleTimeoutSec. Untuk mengubah mode buffering output, gunakan parameter OutputBufferingMode Anda juga dapat menggunakan parameter InDisconnectedSession dari cmdlet Invoke-Command
untuk menjalankan perintah dalam sesi yang terputus.
Untuk informasi selengkapnya tentang fitur Sesi Terputus, lihat about_Remote_Disconnected_Sessions.
Cmdlet ini diperkenalkan di Windows PowerShell 3.0.
Contoh
Contoh 1 - Putuskan sambungan sesi menurut nama
Perintah ini memutuskan sambunganPSSession UpdateSession
pada komputer Server01 dari sesi saat ini. Perintah menggunakan parameter Nama untuk mengidentifikasi PSSession.
PS> Disconnect-PSSession -Name UpdateSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 UpdateSession Server01 Disconnected Microsoft.PowerShell None
Output menunjukkan bahwa upaya untuk memutuskan sambungan berhasil. Status sesi Disconnected
dan KetersediaanNone
, yang menunjukkan bahwa sesi tidak sibuk dan dapat disambungkan kembali.
Contoh 2 - Memutuskan sambungan sesi dari komputer tertentu
Perintah ini memutuskan sambunganPSSession ITTask
pada komputer Server12 dari sesi saat ini. Sesi ITTask
dibuat dalam sesi saat ini dan tersambung ke komputer Server12. Perintah menggunakan cmdlet Get-PSSession
untuk mendapatkan sesi dan cmdlet Disconnect-PSSession
untuk memutuskan sambungannya.
PS> Get-PSSession -ComputerName Server12 -Name ITTask |
Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Server12 Disconnected ITTasks None
Perintah Disconnect-PSSession
menggunakan parameter OutputBufferingMode untuk mengatur mode output ke Drop
. Pengaturan ini memastikan bahwa skrip yang berjalan dalam sesi dapat terus berjalan meskipun buffer output sesi penuh. Karena skrip menulis outputnya ke laporan pada berbagi file, output lain dapat hilang tanpa konsekuensi.
Perintah ini juga menggunakan parameter IdleTimeoutSec untuk memperpanjang batas waktu diam sesi menjadi 24 jam. Pengaturan ini memungkinkan waktu bagi administrator ini atau administrator lain untuk terhubung kembali ke sesi untuk memverifikasi bahwa skrip berjalan dan memecahkan masalah jika diperlukan.
Contoh 3 - Menggunakan beberapa PSSessions di beberapa komputer
Serangkaian perintah ini menunjukkan bagaimana cmdlet Disconnect-PSSession
dapat digunakan dalam skenario perusahaan. Dalam hal ini, teknisi baru memulai skrip dalam sesi di komputer jarak jauh dan mengalami masalah. Teknisi memutuskan sambungan dari sesi sehingga manajer yang lebih berpengalaman dapat terhubung ke sesi dan menyelesaikan masalah.
PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
2 ITTask Srv2 Opened Microsoft.PowerShell Available
3 ITTask Srv30 Opened Microsoft.PowerShell Available
PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $HOME\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $HOME\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s
Teknisi dimulai dengan membuat sesi di beberapa komputer jarak jauh dan menjalankan skrip di setiap sesi. Perintah pertama menggunakan cmdlet New-PSSession
untuk membuat sesi ITTask
pada tiga komputer jarak jauh. Perintah menyimpan sesi dalam variabel $s
. Perintah kedua menggunakan parameter FilePath cmdlet Invoke-Command
untuk menjalankan skrip dalam sesi dalam variabel $s
.
Skrip yang berjalan di komputer Srv1 menghasilkan kesalahan tak terduga. Teknisi menghubungi manajernya dan meminta bantuan. Manajer mengarahkan teknisi untuk memutuskan sambungan dari sesi sehingga dia dapat menyelidiki. Perintah kedua menggunakan cmdlet Get-PSSession
untuk mendapatkan sesi ITTask
pada komputer Srv1 dan cmdlet Disconnect-PSSession
untuk memutuskannya. Perintah ini tidak mempengaruhi sesi ITTask
pada komputer lain.
Perintah ketiga menggunakan cmdlet Get-PSSession
untuk mendapatkan sesi ITTask
. Output menunjukkan bahwa sesi ITTask
pada komputer Srv2 dan Srv30 tidak terpengaruh oleh perintah untuk memutuskan sambungan.
Manajer masuk ke komputer rumahnya, terhubung ke jaringan perusahaannya, memulai PowerShell, dan menggunakan cmdlet Get-PSSession
untuk mendapatkan sesi ITTask
di komputer Srv1. Dia menggunakan kredensial teknisi untuk mengakses sesi.
Selanjutnya, manajer menggunakan cmdlet Connect-PSSession
untuk menyambungkan ke sesi ITTask
di komputer Srv1. Perintah menyimpan sesi dalam variabel $s
.
Manajer menggunakan cmdlet Invoke-Command
untuk menjalankan beberapa perintah diagnostik dalam sesi dalam variabel $s
. Dia mengakui bahwa skrip gagal karena tidak menemukan direktori yang diperlukan.
Manajer menggunakan fungsi MkDir
untuk membuat direktori, lalu ia memulai ulang skrip Get-PatchStatus.ps1
dan memutuskan sambungan dari sesi. Manajer melaporkan temuannya kepada teknisi, menyarankan bahwa dia terhubung kembali ke sesi untuk menyelesaikan tugas, dan memintanya untuk menambahkan perintah ke skrip Get-PatchStatus.ps1
yang membuat direktori yang diperlukan jika tidak ada.
Contoh 4 - Mengubah nilai batas waktu untuk PSSession
Contoh ini menunjukkan cara memperbaiki nilai properti IdleTimeout sesi sehingga dapat terputus.
Properti batas waktu menganggur sesi sangat penting untuk sesi yang terputus, karena menentukan berapa lama sesi yang terputus dipertahankan sebelum dihapus. Anda dapat mengatur opsi batas waktu diam saat membuat sesi dan saat memutuskan sambungan. Nilai default untuk batas waktu diam sesi diatur dalam variabel preferensi $PSSessionOption
pada komputer lokal dan dalam konfigurasi sesi di komputer jarak jauh. Nilai yang ditetapkan untuk sesi lebih diutamakan daripada nilai yang ditetapkan dalam konfigurasi sesi, tetapi nilai sesi tidak boleh melebihi kuota yang ditetapkan dalam konfigurasi sesi, seperti nilai MaxIdleTimeoutMs.
PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds). Choose an idle time out
value that is within the allowed range and try again.
PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
Format-List -Property *
Architecture : 64
Filename : %windir%\system32\pwrshplugin.dll
ResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess : false
ProcessIdleTimeoutSec : 0
xmlns : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers : 5
lang : en-US
SupportsOptions : true
ExactMatch : true
RunAsUser :
IdleTimeoutms : 7200000
PSVersion : 3.0
OutputBufferingMode : Block
AutoRestart : false
SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB : 1024
MaxIdleTimeoutms : 2147483647
Uri : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion : 2
Name : microsoft.powershell
XmlRenderingType : text
Capability : {Shell}
RunAsPassword :
MaxProcessesPerShell : 15
ParentResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
Enabled : true
MaxShells : 25
MaxShellsPerUser : 25
Permission : BUILTIN\Administrators AccessAllowed
PSComputerName : localhost
RunspaceId : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName : True
PS> $s.Runspace.ConnectionInfo
ConnectionUri : http://Server01/wsman
ComputerName : Server01
Scheme : http
Port : 80
AppName : /wsman
Credential :
ShellUri : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism : Default
CertificateThumbprint :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize : 209715200
UseCompression : True
NoMachineProfile : False
ProxyAccessType : None
ProxyAuthentication : Negotiate
ProxyCredential :
SkipCACheck : False
SkipCNCheck : False
SkipRevocationCheck : False
NoEncryption : False
UseUTF16 : False
OutputBufferingMode : Drop
IncludePortInSPN : False
Culture : en-US
UICulture : en-US
OpenTimeout : 180000
CancelTimeout : 60000
OperationTimeout : 180000
IdleTimeout : 172800000
PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 ITTask Server01 Disconnected Microsoft.PowerShell None
PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000
Perintah pertama menggunakan cmdlet New-PSSessionOption
untuk membuat objek opsi sesi. Ini menggunakan parameter IdleTimeout untuk mengatur batas waktu diam 48 jam (172800000
milidetik). Perintah menyimpan objek opsi sesi dalam variabel $Timeout
.
Perintah kedua menggunakan cmdlet New-PSSession
untuk membuat sesi ITTask
di komputer Server01. Perintah menyimpan sesi dalam variabel $s
. Nilai parameter SessionOption adalah batas waktu menganggur 48 jam dalam variabel $Timeout
.
Perintah ketiga memutuskan sesi ITTask
dalam variabel $s
. Perintah gagal karena nilai batas waktu diam sesi melebihi kuota MaxIdleTimeoutMs dalam konfigurasi sesi. Karena batas waktu diam tidak digunakan sampai sesi terputus, pelanggaran ini dapat tidak terdeteksi saat sesi sedang digunakan.
Perintah keempat menggunakan cmdlet Invoke-Command
untuk menjalankan perintah Get-PSSessionConfiguration
untuk konfigurasi sesi Microsoft.PowerShell
di komputer Server01. Perintah menggunakan cmdlet Format-List
untuk menampilkan semua properti konfigurasi sesi dalam daftar. Output menunjukkan bahwa properti MaxIdleTimeoutMS, yang menetapkan nilai maksimum yang diizinkan IdleTimeout untuk sesi yang menggunakan konfigurasi sesi, 43200000
milidetik (12 jam).
Perintah kelima mendapatkan nilai opsi sesi sesi dalam variabel $s
. Nilai dari banyak opsi sesi adalah properti properti ConnectionInfo dari properti Runspace sesi. Output menunjukkan bahwa nilai properti IdleTimeout sesi 172800000
milidetik (48 jam), yang melanggar MaxIdleTimeoutMs kuota 12 jam dalam konfigurasi sesi. Untuk mengatasi konflik ini, Anda dapat menggunakan parameter ConfigurationName untuk memilih konfigurasi sesi yang berbeda atau menggunakan parameter IdleTimeout untuk mengurangi batas waktu diam sesi.
Perintah keenam memutuskan sesi. Ini menggunakan parameter IdleTimeoutSec untuk mengatur batas waktu diam ke maksimum 12 jam.
Perintah ketujuh mendapatkan nilai properti IdleTimeout dari sesi yang terputus, yang diukur dalam milidetik. Output mengonfirmasi bahwa perintah berhasil.
Parameter
-Confirm
Meminta konfirmasi sebelum menjalankan cmdlet.
Jenis: | SwitchParameter |
Alias: | cf |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Id
Memutuskan sambungan dari sesi dengan ID sesi yang ditentukan. Ketik satu atau beberapa ID (dipisahkan oleh koma), atau gunakan operator rentang (..
) untuk menentukan rentang ID.
Untuk mendapatkan ID sesi, gunakan cmdlet Get-PSSession
. ID instans disimpan di ID properti sesi.
Jenis: | Int32[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-IdleTimeoutSec
Mengubah nilai batas waktu diam dari PSSession yang terputus. Masukkan nilai dalam detik. Nilai minimum adalah 60
(1 menit).
Batas waktu diam menentukan berapa lama PSSession terputus dipertahankan di komputer jarak jauh. Ketika batas waktu berakhir, PSSession dihapus.
PSSessions terputus dianggap menganggur sejak sambungan terputus, bahkan jika perintah berjalan dalam sesi terputus.
Nilai default untuk batas waktu diam sesi diatur oleh nilai IdleTimeoutMs properti konfigurasi sesi. Nilai defaultnya adalah 7200000
milidetik (2 jam).
Nilai parameter ini lebih diutamakan daripada nilai properti IdleTimeout variabel preferensi $PSSessionOption
dan nilai batas waktu diam default dalam konfigurasi sesi. Namun, nilai ini tidak boleh melebihi nilai MaxIdleTimeoutMs properti konfigurasi sesi. Nilai default MaxIdleTimeoutMs adalah 12 jam (43200000
milidetik).
Jenis: | Int32 |
Position: | Named |
Nilai default: | 60 |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-InstanceId
Memutuskan sambungan dari sesi dengan ID instans yang ditentukan.
ID instans adalah GUID yang secara unik mengidentifikasi sesi di komputer lokal atau jarak jauh. ID instans unik, bahkan di beberapa sesi di beberapa komputer.
Untuk mendapatkan ID instans sesi, gunakan cmdlet Get-PSSession
. ID instans disimpan di properti InstanceID sesi.
Jenis: | Guid[] |
Position: | Named |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-Name
Memutuskan sambungan dari sesi dengan nama ramah yang ditentukan. Kartubebas diizinkan.
Untuk mendapatkan nama sesi yang ramah, gunakan cmdlet Get-PSSession
. Nama yang mudah diingat disimpan di properti Nama sesi.
Jenis: | String[] |
Position: | Named |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | True |
-OutputBufferingMode
Menentukan bagaimana output perintah dikelola dalam sesi yang terputus saat buffer output penuh. Nilai defaultnya adalah Block
.
Jika perintah dalam sesi terputus mengembalikan output dan buffer output terisi, nilai parameter ini secara efektif menentukan apakah perintah terus berjalan saat sesi terputus. Nilai Block
menangguhkan perintah hingga sesi disambungkan kembali. Nilai Drop
memungkinkan perintah selesai, meskipun data mungkin hilang. Saat menggunakan nilai Drop
, alihkan output perintah ke file pada disk.
Nilai yang valid adalah:
-
Block
: Ketika buffer output penuh, eksekusi ditangguhkan hingga buffer jelas. -
Drop
: Ketika buffer output penuh, eksekusi berlanjut. Saat output baru disimpan, output terlama dibuang. -
None
: Tidak ada mode buffering output yang ditentukan. Nilai properti OutputBufferingMode dari konfigurasi sesi digunakan untuk sesi yang terputus.
Jenis: | OutputBufferingMode |
Position: | Named |
Nilai default: | Block |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Session
Memutuskan sambungan dari PSSessions yang ditentukan. Masukkan objek PSSession, seperti yang dikembalikan cmdlet New-PSSession
. Anda juga dapat menyalurkan objek PSSession ke Disconnect-PSSession
.
Cmdlet Get-PSSession
bisa mendapatkan semua PSSessions yang berakhir di komputer jarak jauh, termasuk PSSessions yang terputus dan PSSessions yang terhubung ke sesi lain di komputer lain.
Disconnect-PSSession
memutuskan sambungan hanya PSSession yang tersambung ke sesi saat ini. Jika Anda menyalurkan PSSessions lainnya ke Disconnect-PSSession
, perintah Disconnect-PSSession
gagal.
Jenis: | PSSession[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-ThrottleLimit
Mengatur batas pembatasan untuk perintah Disconnect-PSSession
.
Batas pembatasan adalah 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 |
-WhatIf
Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.
Jenis: | SwitchParameter |
Alias: | wi |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
Anda dapat menyalurkan sesi ke cmdlet ini.
Output
Cmdlet ini mengembalikan objek yang mewakili sesi yang terputus.
Catatan
PowerShell menyertakan alias berikut untuk Disconnect-PSSession
:
- Windows:
dnsn
Cmdlet ini hanya tersedia di platform Windows.
Cmdlet
Disconnect-PSSession
hanya berfungsi ketika komputer lokal dan jarak jauh menjalankan PowerShell 3.0 atau yang lebih baru.Jika Anda menggunakan cmdlet
Disconnect-PSSession
pada sesi yang terputus, perintah tidak berpengaruh pada sesi dan tidak menghasilkan kesalahan.Sesi loopback yang terputus dengan token keamanan interaktif (yang dibuat dengan parameter EnableNetworkAccess) hanya dapat disambungkan kembali dari komputer tempat sesi dibuat. Pembatasan ini melindungi komputer dari akses berbahaya.
Ketika Anda memutuskan PSSession, status sesi
Disconnected
dan ketersediaannya Tidak Ada.Nilai properti Status relatif terhadap sesi saat ini. Oleh karena itu, nilai
Disconnected
berarti bahwa PSSession tidak terhubung ke sesi saat ini. Namun, 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
None
menunjukkan bahwa Anda dapat tersambung ke sesi. NilaiBusy
menunjukkan bahwa Anda tidak dapat tersambung ke PSSession karena terhubung ke sesi lain.Untuk informasi selengkapnya tentang nilai properti status sesi, lihat Enumerasi RunspaceState .
Untuk informasi selengkapnya tentang nilai properti Ketersediaan sesi, lihat Enumerasi RunspaceAvailability.