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.

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-PSSessiontidak 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 UpdateSessionPSSession 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 ITTaskPSSession 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 banyak opsi sesi adalah properti properti Koneksi ionInfo 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.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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).

Type:Int32
Position:Named
Default value:60
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Guid[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.
Type:OutputBufferingMode
Position:Named
Default value:Block
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:PSSession[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

PSSession

Anda dapat menyalurkan sesi ke cmdlet ini.

Output

PSSession

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.

  • 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. Nilai Busy 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.