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
Disconnect-PSSession
Cmdlet memutuskan sesi PowerShell (PSSession), seperti yang dimulai dengan menggunakan New-PSSession
cmdlet, dari sesi saat ini. Akibatnya, PSSession dalam keadaan terputus. Anda dapat tersambung ke PSSession yang terputus dari sesi saat ini atau dari sesi lain di komputer lokal atau komputer lain.
Disconnect-PSSession
Cmdlet terputus hanya membuka PSSessions yang terhubung ke sesi saat ini. Disconnect-PSSession
tidak dapat memutuskan sambungan PSSessions yang rusak atau tertutup, atau PSSessions interaktif yang dimulai dengan menggunakan Enter-PSSession
cmdlet, dan tidak dapat memutuskan PSSessions yang terhubung ke sesi lain.
Untuk menyambungkan kembali ke PSSession yang terputus, gunakan Connect-PSSession
cmdlet atau Receive-PSSession
.
Ketika PSSession terputus, perintah dalam PSSession terus berjalan sampai selesai, kecuali waktu PSSession 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 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 sambungan UpdateSession
PSSession 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 adalah Disconnected
dan Ketersediaannya adalah None
, yang menunjukkan bahwa sesi tidak sibuk dan dapat disambungkan kembali.
Contoh 2 - Memutuskan sambungan sesi dari komputer tertentu
Perintah ini memutuskan sambungan ITTask
PSSession pada komputer Server12 dari sesi saat ini. Sesi ITTask
dibuat dalam sesi saat ini dan tersambung ke komputer Server12. Perintah menggunakan Get-PSSession
cmdlet untuk mendapatkan sesi dan Disconnect-PSSession
cmdlet 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
Rangkaian perintah ini menunjukkan bagaimana Disconnect-PSSession
cmdlet 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 New-PSSession
cmdlet untuk membuat ITTask
sesi pada tiga komputer jarak jauh. Perintah menyimpan sesi dalam $s
variabel. Perintah kedua menggunakan parameter FilePath cmdlet Invoke-Command
untuk menjalankan skrip dalam sesi dalam $s
variabel.
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 Get-PSSession
cmdlet untuk mendapatkan ITTask
sesi pada komputer Srv1 dan Disconnect-PSSession
cmdlet untuk memutuskan sambungannya. Perintah ini tidak mempengaruhi ITTask
sesi pada komputer lain.
Perintah ketiga menggunakan Get-PSSession
cmdlet untuk mendapatkan ITTask
sesi. Output menunjukkan bahwa ITTask
sesi 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 Get-PSSession
cmdlet untuk mendapatkan ITTask
sesi di komputer Srv1. Dia menggunakan kredensial teknisi untuk mengakses sesi.
Selanjutnya, manajer menggunakan Connect-PSSession
cmdlet untuk menyambungkan ITTask
ke sesi di komputer Srv1. Perintah menyimpan sesi dalam $s
variabel.
Manajer menggunakan Invoke-Command
cmdlet untuk menjalankan beberapa perintah diagnostik dalam sesi dalam $s
variabel. Dia mengakui bahwa skrip gagal karena tidak menemukan direktori yang diperlukan.
Manajer menggunakan MkDir
fungsi untuk membuat direktori, lalu ia memulai ulang Get-PatchStatus.ps1
skrip 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 Get-PatchStatus.ps1
skrip yang membuat direktori yang diperlukan jika tidak ada.
Contoh 4 - Mengubah nilai batas waktu untuk PSSession
Contoh ini menunjukkan cara memperbaiki nilai properti IdleTimeout dari 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 menganggur sesi diatur dalam $PSSessionOption
variabel preferensi pada komputer lokal dan dalam konfigurasi sesi pada 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 New-PSSessionOption
cmdlet untuk membuat objek opsi sesi. Ini menggunakan parameter IdleTimeout untuk mengatur batas waktu diam 48 jam (172800000
milidetik). Perintah menyimpan objek opsi sesi dalam $Timeout
variabel.
Perintah kedua menggunakan New-PSSession
cmdlet untuk membuat ITTask
sesi di komputer Server01. Perintah menyimpan sesi dalam $s
variabel. Nilai parameter SessionOption adalah batas waktu diam 48 jam dalam $Timeout
variabel.
Perintah ketiga memutuskan sesi ITTask
dalam $s
variabel. 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 Invoke-Command
cmdlet untuk menjalankan Get-PSSessionConfiguration
perintah untuk Microsoft.PowerShell
konfigurasi sesi di komputer Server01. Perintah menggunakan Format-List
cmdlet untuk menampilkan semua properti konfigurasi sesi dalam daftar. Output menunjukkan bahwa properti MaxIdleTimeoutMS, yang menetapkan nilai IdleTimeout maksimum yang diizinkan untuk sesi yang menggunakan konfigurasi sesi, adalah 43200000
milidetik (12 jam).
Perintah kelima mendapatkan nilai opsi sesi sesi dalam $s
variabel. Nilai dari banyak opsi sesi adalah properti ConnectionInfo dari properti Runspace sesi. Output menunjukkan bahwa nilai properti IdleTimeout sesi adalah 172800000
milidetik (48 jam), yang melanggar kuota MaxIdleTimeoutMs 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 Anda mengonfirmasi 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 Get-PSSession
cmdlet. ID instans disimpan di properti ID sesi.
Jenis: | Int32[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-IdleTimeoutSec
Mengubah nilai batas waktu diam PSSession yang terputus. Masukkan nilai dalam detik. Nilai minimum adalah 60
(1 menit).
Batas waktu diam menentukan berapa lama PSSession yang terputus dipertahankan pada komputer jarak jauh. Ketika batas waktu berakhir, PSSession dihapus.
PSSessions yang terputus dianggap menganggur sejak terputus, bahkan jika perintah berjalan dalam sesi yang terputus.
Nilai default untuk batas waktu diam sesi diatur oleh nilai properti IdleTimeoutMs dari konfigurasi sesi. Nilai defaultnya adalah 7200000
milidetik (2 jam).
Nilai parameter ini lebih diutamakan daripada nilai properti IdleTimeout dari $PSSessionOption
variabel preferensi dan nilai batas waktu diam default dalam konfigurasi sesi. Namun, nilai ini tidak boleh melebihi nilai properti MaxIdleTimeoutMs dari 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 Get-PSSession
cmdlet . 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 mudah diingat, gunakan Get-PSSession
cmdlet. 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 memungkinkan Drop
perintah selesai, meskipun data mungkin hilang. Saat menggunakan Drop
nilai , 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 New-PSSession
dikembalikan cmdlet. Anda juga dapat menyalurkan objek PSSession ke Disconnect-PSSession
.
Get-PSSession
Cmdlet 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
, Disconnect-PSSession
perintah gagal.
Jenis: | PSSession[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-ThrottleLimit
Mengatur batas pembatasan untuk Disconnect-PSSession
perintah.
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
Windows PowerShell menyertakan alias berikut untuk Disconnect-PSSession
:
dnsn
Disconnect-PSSession
Cmdlet hanya berfungsi ketika komputer lokal dan jarak jauh menjalankan PowerShell 3.0 atau yang lebih baru.Jika Anda menggunakan
Disconnect-PSSession
cmdlet 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.
Saat Anda memutuskan sambungan PSSession, status sesi adalah
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, 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
None
Ketersediaan 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 Ketersediaan Runspace.