Get-PSSession

获取本地和远程计算机上的 PowerShell 会话。

语法

Get-PSSession
   [-Name <String[]>]
   [<CommonParameters>]
Get-PSSession
   [-ComputerName] <String[]>
   [-ApplicationName <String>]
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-Port <Int32>]
   [-UseSSL]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ComputerName] <String[]>
   [-ApplicationName <String>]
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-Port <Int32>]
   [-UseSSL]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConnectionUri] <Uri[]>
   [-ConfigurationName <String>]
   [-AllowRedirection]
   [-Name <String[]>]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConnectionUri] <Uri[]>
   [-ConfigurationName <String>]
   [-AllowRedirection]
   -InstanceId <Guid[]>
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -VMName <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -ContainerId <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -ContainerId <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -VMId <Guid[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -VMId <Guid[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -VMName <String[]>
   [<CommonParameters>]
Get-PSSession
   [-InstanceId <Guid[]>]
   [<CommonParameters>]
Get-PSSession
   [-Id] <Int32[]>
   [<CommonParameters>]

说明

cmdlet Get-PSSession 在本地和远程计算机上获取用户管理的 PowerShell 会话 (PSSessions) 。

从 Windows PowerShell 3.0 开始,会话存储在每个连接的远程端的计算机上。 可以使用 的 ComputerNameConnectionUri 参数 Get-PSSession 获取连接到本地计算机或远程计算机的会话,即使这些会话不是在当前会话中创建的。

如果没有参数, Get-PSSession 则获取在当前会话中创建的所有会话。

使用筛选参数(包括 NameIDInstanceIDStateApplicationNameConfigurationName )从返回的 Get-PSSession 会话中进行选择。

使用 ComputerNameConnectionUri 参数时,请使用其余参数配置运行命令的临时连接Get-PSSession

注意

在 Windows PowerShell 2.0 中,在没有参数的情况下,Get-PSSession获取在当前会话中创建的所有会话。 ComputerName 参数获取在当前会话中创建并连接到指定计算机的会话。

有关 PowerShell 会话的详细信息,请参阅 about_PSSessions

示例

示例 1:获取在当前会话中创建的会话

Get-PSSession

此命令获取在当前会话中创建的所有 PSSession 。 它不会获取在其他会话或其他计算机上创建的 PSSession ,即使它们连接到此计算机也是如此。

示例 2:获取连接到本地计算机的会话

Get-PSSession -ComputerName "localhost"

此命令获取连接到本地计算机的 PSSession 。 若要指示本地计算机,请键入计算机名称、localhost 或点 (.)

此命令返回本地计算机上的所有会话,即使它们是在不同会话中或不同计算机上创建的,也是如此。

示例 3:获取连接到计算机的会话

Get-PSSession -ComputerName "Server02"

Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  2 Session3        Server02       Disconnected  ITTasks                       Busy
  1 ScheduledJobs   Server02       Opened        Microsoft.PowerShell     Available
  3 Test            Server02       Disconnected  Microsoft.PowerShell          Busy

此命令获取连接到 Server02 计算机的 PSSession

此命令返回 Server02 上的所有会话,即使它们是在不同会话中或不同计算机上创建的,也是如此。

输出显示两个 Disconnected 会话具有状态和 Busy 可用性。 它们是在不同的会话中创建的,并且当前正在使用它们。 会话 ScheduledJobs (即 OpenedAvailable)是在当前会话中创建的。

示例 4:保存此命令的结果

New-PSSession -ComputerName Server01, Server02, Server03
$s1, $s2, $s3 = Get-PSSession

此示例演示如何将命令的结果 Get-PSSession 保存在多个变量中。

第一个命令使用 New-PSSession cmdlet 在三台远程计算机上创建 PSSession

第二个命令使用 cmdlet 获取三个 Get-PSSessionPSSession。 然后,它将每个 PSSession 保存在单独的变量中。

当 PowerShell 将对象的数组分配给变量数组时,它会将第一个对象分配给第一个变量,将第二个对象分配给第二个变量,依此类而论。 如果对象多于变量,则会将数组中所有剩余的对象都分配给最后一个变量。 如果变量多于对象,则弃用额外的变量。

示例 5:使用实例 ID 删除会话

Get-PSSession | Format-Table -Property ComputerName, InstanceID
$s = Get-PSSession -InstanceID a786be29-a6bb-40da-80fb-782c67f7db0f
Remove-PSSession -Session $s

此示例演示如何使用 PSSession 的实例 ID 获取 PSSession ,然后删除 PSSession

第一个命令获取在当前会话中创建的所有 PSSession 。 它将 PSSession 发送到 Format-Table cmdlet,该 cmdlet 显示每个 PSSessionComputerNameInstanceID 属性。

第二个命令使用 Get-PSSession cmdlet 获取特定的 PSSession 并将其保存在 变量中 $s 。 命令使用 InstanceID 参数来标识 PSSession

第三个命令使用 Remove-PSSession cmdlet 删除变量中的 $sPSSession

示例 6:获取具有特定名称的会话

此示例中的命令将查找具有特定名称格式且使用特定会话配置的会话,然后将连接到该会话。 你可以使用此类命令来查找同事在其中启动任务的会话,然后连接该会话以完成该任务。

Get-PSSession -ComputerName Server02, Server12 -Name BackupJob* -ConfigurationName ITTasks -SessionOption @{OperationTimeout=240000}

Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  3 BackupJob04     Server02        Disconnected        ITTasks                  None

$s = Get-PSSession -ComputerName Server02 -Name BackupJob04 -ConfigurationName ITTasks | Connect-PSSession
$s

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 5 BackupJob04     Server02        Opened        ITTasks                  Available

第一个命令获取名称以 BackupJob 开头并使用会话配置的 Server02 和 ITTasks Server12 远程计算机上的会话。命令使用 Name 参数指定名称模式,使用 ConfigurationName 参数指定会话配置。 SessionOption 参数的值是一个哈希表,它将 OperationTimeout240000 的值设置为毫秒 (4 分钟) 。 此设置为命令提供更多完成时间。 ConfigurationNameSessionOption 参数用于配置在每台计算机上运行 cmdlet 的 Get-PSSession 临时会话。输出显示命令返回 BackupJob04 会话。 会话断开连接, 可用性None,表示会话未使用。

第二个命令使用 Get-PSSession cmdlet 访问 BackupJob04 会话,使用 Connect-PSSession cmdlet 连接到会话。 该命令将该会话保存在 $s 变量中。

第三个命令获取 变量中的 $s 会话。 输出显示 Connect-PSSession 命令成功。 此会话处于 Opened 状态且可用。

示例 7:使用会话 ID 获取会话

Get-PSSession -Id 2

此命令获取 ID 2为 的 PSSession。 由于 ID 属性的值仅在当前会话中是唯一的, 因此 Id 参数仅对本地命令有效。

参数

-AllowRedirection

指示此 cmdlet 允许将此连接重定向到备用统一资源标识符 (URI) 。 默认情况下,PowerShell 不重定向连接。

此参数将创建的临时连接配置为使用 ConnectionUri 参数运行Get-PSSession命令。

已在 Windows PowerShell 3.0 中引入了此参数。

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

-ApplicationName

指定应用程序的名称。 此 cmdlet 仅连接到使用指定应用程序的会话。

输入连接 URI 的应用程序名称段。 例如,在以下连接 URI 中,应用程序名称为 WSMan:http://localhost:5985/WSMAN。 会话的应用程序名称存储在该会话的 Runspace.ConnectionInfo.AppName 属性中。

此参数的值用于选择和筛选会话。 它不会更改会话使用的应用程序。

Type:String
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Authentication

指定用于对运行命令的会话的凭据进行身份验证的机制 Get-PSSession

此参数将创建的临时连接配置为使用 ComputerNameConnectionUri 参数运行Get-PSSession命令。

此参数的可接受值为:

  • Default
  • Basic
  • CredSSP
  • Digest
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential.

默认值是 Default

有关此参数的值的详细信息,请参阅 AuthenticationMechanism 枚举

注意

在凭据安全支持提供程序 (CredSSP) 身份验证中,用户凭据传递到远程计算机中以进行验证,这种验证用于要求对多个资源(例如访问远程网络共享)进行验证的命令。 此机制增加了远程操作的安全风险。 如果远程计算机的安全受到威胁,则传递给该计算机的凭据可用于控制网络会话。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

指定有权创建运行命令的会话 Get-PSSession 的用户帐户的数字公钥证书 (X509) 。 输入证书的证书指纹。

此参数配置创建的临时连接,以便使用 ComputerNameConnectionUri 参数运行Get-PSSession命令。

在基于客户端证书的身份验证中使用证书。 证书只能映射到本地用户帐户,而不适用于域帐户。

若要获取证书指纹,请在 Get-Item PowerShell Cert: 驱动器中使用 或 Get-ChildItem 命令。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

指定计算机的名称数组。 获取连接到指定计算机的会话。 不允许使用通配符。 没有默认值。

从 Windows PowerShell 3.0 开始,PSSession 对象存储在每个连接的远程端的计算机上。 若要获取指定计算机上的会话,PowerShell 会创建与每台计算机的临时连接并运行 Get-PSSession 命令。

键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名。 若要指定本地计算机,请键入计算机名称 localhost或 () 点 .

注意

此参数仅从运行 Windows PowerShell 3.0 或更高版本 PowerShell 的计算机获取会话。 早期版本不存储会话。

Type:String[]
Aliases:Cn
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ConfigurationName

指定配置的名称。 此 cmdlet 仅获取到使用指定会话配置的会话。

输入会话配置的配置名称或完全限定的资源 URI。 如果仅指定配置名称,则会在前面添加以下架构 URI: http://schemas.microsoft.com/powershell。 会话的配置名称存储在该会话的 ConfigurationName 属性中。

此参数的值用于选择和筛选会话。 它不会更改会话使用的会话配置。

有关会话配置的详细信息,请参阅 about_Session_Configurations

Type:String
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectionUri

指定一个 URI,用于定义运行命令的临时会话 Get-PSSession 的连接终结点。 URI 必须完全限定。

此参数配置创建的临时连接,以便使用 ConnectionUri 参数运行Get-PSSession命令。

此字符串的格式为:

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

默认值为:http://localhost:5985/WSMAN

如果未指定 ConnectionUri,则可以使用 UseSSLComputerNamePortApplicationName 参数来指定 ConnectionURI 值。 URI 的 Transport 段的有效值为 HTTP 和 HTTPS。 如果使用传输段指定连接 URI,但未指定端口,则会使用标准端口创建会话: 80 用于 HTTP 和 443 HTTPS。 若要使用默认端口进行 PowerShell 远程处理,请为 HTTP 或 5986 HTTPS 指定端口5985

如果目标计算机将连接重定向到其他 URI,PowerShell 将阻止重定向,除非你在命令中使用 AllowRedirection 参数。

已在 Windows PowerShell 3.0 中引入了此参数。

此参数仅从运行 Windows PowerShell 3.0 或更高版本的 Windows PowerShell 的计算机获取会话。 早期版本不存储会话。

Type:Uri[]
Aliases:URI, CU
Position:0
Default value:Http://localhost:5985/WSMAN
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ContainerId

指定容器 ID 的数组。 此 cmdlet 启动与每个指定容器的交互式会话。 docker ps使用 命令获取容器 ID 的列表。 有关详细信息,请参阅 docker ps 命令的帮助。

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Credential

指定用户凭据。 此 cmdlet 使用指定用户的权限运行命令。 指定有权连接到远程计算机并运行命令的 Get-PSSession 用户帐户。 默认为当前用户。

键入用户名(如 User01Domain01\User01),或输入 cmdlet Get-Credential 生成的 PSCredential 对象。 如果键入用户名,系统会提示输入密码。

凭据存储在 PSCredential 对象中,密码存储为 SecureString

注意

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?

此参数配置为创建的临时连接,以便使用 ComputerNameConnectionUri 参数运行Get-PSSession命令。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

指定会话 ID 的数组。 此 cmdlet 仅获取具有指定 ID 的会话。 键入一个或多个 ID,用逗号分隔,或使用范围运算符 (..) 指定 ID 的范围。 不能将 ID 参数与 ComputerName 参数一起使用。

ID 是一个整数,用于唯一标识当前会话中的用户管理的会话。 它比 InstanceId 更容易记住和键入,但它仅在当前会话中是唯一的。 会话的 ID 存储在会话的 ID 属性中。

Type:Int32[]
Position:0
Default value:All sessions
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

指定会话的实例 ID 数组。 此 cmdlet 仅获取具有指定实例 ID 的会话。

实例 ID 是一个 GUID,用于在本地或远程计算机上唯一标识某个会话。 InstanceID 是唯一的,即使在 PowerShell 中运行多个会话也是如此。

会话的实例 ID 存储在该会话的 InstanceID 属性中。

Type:Guid[]
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定会话名称的数组。 此 cmdlet 仅获取具有指定友好名称的会话。 允许使用通配符。

会话的友好名称存储在该会话的 Name 属性中。

Type:String[]
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-Port

指定用于运行命令的临时连接的 Get-PSSession 指定网络端口。 若要连接到一台远程计算机,则必须在该连接所用的端口上侦听远程计算机。 默认端口为 5985(HTTP 的 WinRM 端口)和 5986(HTTPS 的 WinRM 端口)。

使用备用端口之前,你必须在远程计算机上配置 WinRM 侦听器,才能在该端口上进行侦听。 若要配置侦听器,请在 PowerShell 提示符处键入以下两个命令:

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

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

此参数配置为创建的临时连接,以便使用 ComputerNameConnectionUri 参数运行Get-PSSession命令。

除非必要,否则不要使用 Port 参数。 命令中设置的 端口 适用于运行该命令的所有计算机或会话。 备用端口设置可能会阻止在所有计算机上运行该命令。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:Int32
Position:Named
Default value:5985, 5986
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

为该会话指定高级选项。 输入 SessionOption 对象,例如使用 New-PSSessionOption cmdlet 创建的会话选项对象,或其中键为会话选项名称且值为会话选项值的哈希表。

选项的默认值由首选项变量的值 $PSSessionOption (如果已设置)确定。 否则,通过在会话配置中设置的选项创建默认值。

对于在首选项变量和会话配置中 $PSSessionOption 设置的会话,会话选项值优先于默认值。 但是,它们不优先于在会话配置中设置的最大值、配额或限制。

有关会话选项的说明(包括默认值),请参阅 New-PSSessionOption。 有关首选项变量的信息 $PSSessionOption ,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations

Type:PSSessionOption
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-State

指定会话状态。 此 cmdlet 仅获取处于指定状态的会话。 此参数的可接受值为:All、、OpenedDisconnectedClosedBroken。 默认值为 All

会话状态值相对于当前会话。 未在当前会话中创建且未连接到当前会话的会话的状态为 Disconnected ,即使它们连接到其他会话也是如此。

会话的状态存储在该会话的 State 属性中。

已在 Windows PowerShell 3.0 中引入了此参数。

Type:SessionFilterState
Accepted values:All, Opened, Disconnected, Closed, Broken
Position:Named
Default value:All
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ThrottleLimit

指定可建立以运行 Get-PSSession 命令的最大并发连接数。 如果省略此参数或输入 (零) 的值 0 ,则使用默认值 32。 节流限制仅适用于当前命令,而不适用于会话或计算机。

已在 Windows PowerShell 3.0 中引入了此参数。

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

-UseSSL

指示此 cmdlet 使用安全套接字层 (SSL) 协议建立运行命令的连接 Get-PSSession 。 默认情况下,不使用 SSL。 如果你使用此参数,但 SSL 在用于此命令的端口上不可用,则命令将失败。

此参数将创建的临时连接配置为使用 ComputerName 参数运行Get-PSSession命令。

已在 Windows PowerShell 3.0 中引入了此参数。

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

-VMId

指定虚拟机 ID 的数组。 此 cmdlet 与每个指定的虚拟机启动交互式会话。 若要查看可用的虚拟机,请使用以下命令:

Get-VM | Select-Object -Property Name, ID

Type:Guid[]
Aliases:VMGuid
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

指定一个虚拟机的名称数组。 此 cmdlet 与每个指定的虚拟机启动交互式会话。 若要查看可用的虚拟机,请使用 Get-VM cmdlet。

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

输入

None

不能通过管道将输入传递给此 cmdlet。

输出

PSSession

备注

  • 此 cmdlet 获取用户管理的会话 PSSession 对象“,例如使用 New-PSSessionEnter-PSSessionInvoke-Command cmdlet 创建的会话对象。 它不会获取启动 PowerShell 时创建的系统托管会话。
  • 从 Windows PowerShell 3.0 开始,PSSession 对象存储在连接服务器端或接收端的计算机上。 若要获取存储在本地计算机或远程计算机上的会话,PowerShell 与指定计算机建立临时会话,并在会话中运行查询命令。
  • 若要获取连接到远程计算机的会话,请使用 ComputerNameConnectionUri 参数来指定远程计算机。 若要筛选获取的 Get-PSSession 会话,请使用 名称IDInstanceIDState 参数。 使用其余参数配置使用的临时会话 Get-PSSession
  • 使用 ComputerNameConnectionUri 参数时,Get-PSSession仅从运行 Windows PowerShell 3.0 及更高版本的 PowerShell 的计算机获取会话。
  • PSSessionState 属性的值相对于当前会话。 因此,如果值为 Disconnected ,则表示 PSSession 未连接到当前会话。 但是,这并不意味着 PSSession 与所有会话断开连接。 它可能连接到另一个会话。 若要确定是否可以从当前会话连接或重新连接到 PSSession ,请使用 Availability 属性。

AvailabilityNone 值指示可连接到 PSSession。 如果值为 Busy ,则表示无法连接到 PSSession ,因为它已连接到另一个会话。

有关会话的 State 属性值的详细信息,请参阅 RunspaceState 枚举

有关 会话可用性属性 的值的详细信息,请参阅 RunspaceAvailability 枚举