about_Session_Configuration_Files

简短说明

介绍会话配置文件,用于在会话配置(也称为“终结点”)中定义使用会话配置的会话的环境。

长说明

此信息仅适用于在 Windows 上运行的 PowerShell。

“会话配置文件”是一个包含哈希表的带有 .pssc 文件扩展名的文本文件,哈希表中包含会话配置属性和值。 可以使用会话配置文件来设置会话配置的属性。 这样做将定义使用该会话配置的任何 PowerShell 会话的环境。

会话配置文件无需使用复杂 C# 程序集或脚本即可轻松创建自定义会话配置。

“会话配置”或“终结点”是本地计算机设置的集合,用于确定哪些用户可以在计算机上创建会话、用户可以在这些会话中运行哪些命令以及会话是否应作为特权虚拟帐户运行。 有关会话配置的详细信息,请参阅 about_Session_Configurations

Windows PowerShell 2.0 中引入了会话配置,Windows PowerShell 3.0 中引入了会话配置文件。 必须使用 Windows PowerShell 3.0 以在会话配置中包含会话配置文件。 但是,Windows PowerShell 2.0(及更高版本)的用户受会话配置中的设置的影响。

创建自定义会话

可以通过在会话配置中指定会话属性来自定义 PowerShell 会话的许多功能。 可以通过编写定义自定义运行空间的 C# 程序来自定义会话,也可以使用会话配置文件来定义使用会话配置创建的会话的属性。 一般情况下,使用会话配置文件比编写 C# 程序更容易。

可以使用会话配置文件创建各种会话,包括为高度受信任的用户创建功能齐全的会话、创建允许最小访问的锁定会话、创建专用会话以及仅包含这些任务所需模块的会话、非特权用户只能以特权帐户身份运行特定命令的会话。

除此之外,还可以管理会话的用户是否可以使用 PowerShell 语言元素(如脚本块),或者他们是否只能运行命令。 可以管理用户可以在会话中运行的 PowerShell 版本、管理将哪些模块导入到会话中,还可以管理用户可以运行哪些 cmdlet、函数和别名会话。 使用 RoleDefinitions 字段时,可以根据组成员身份在会话中为用户提供不同的功能。

有关 RoleDefinitions 以及如何定义此值的详细信息,请参阅 New-PSRoleCapabilityFile Cmdlet 的帮助主题。

创建会话配置文件

创建会话配置文件最简单的方法是使用 New-PSSessionConfigurationFile cmdlet。 此 cmdlet 生成一个使用正确语法和格式且自动验证许多配置文件属性值的文件。

有关可在会话配置文件中设置的属性的详细说明,请参阅 New-PSSessionConfigurationFile cmdlet 的帮助主题。

以下命令创建使用默认值的会话配置文件。 生成的配置文件仅使用默认值,因为不包括 Path 参数以外的任何参数(指定文件路径):

New-PSSessionConfigurationFile -Path .\Defaults.pssc

若要在默认文本编辑器中查看新配置文件,请使用以下命令:

Invoke-Item -Path .\Defaults.pssc

若要为用户可在其中运行命令的会话创建会话配置,但不使用 PowerShell 语言的其他元素,请键入:

New-PSSessionConfigurationFile -LanguageMode NoLanguage
-Path .\NoLanguage.pssc

在前面的命令中,将 LanguageMode 参数设置为 NoLanguage 可防止用户执行编写或运行脚本或使用变量等操作。

若要为用户只能在其中使用 Get cmdlet 的会话创建会话配置,请键入:

New-PSSessionConfigurationFile -VisibleCmdlets Get-*
-Path .\GetSessions.pssc

在前面的示例中,将 VisibleCmdlets 参数设置为 Get-* 会将用户限制到具有以字符串值“Get-”开头的名称的 cmdlet。

若要为在特权虚拟帐户(而不是用户凭据)下运行的会话创建会话配置,请键入:

New-PSSessionConfigurationFile -RunAsVirtualAccount
-Path .\VirtualAccount.pssc

若要为用户可见命令在其中的角色功能文件中指定的会话创建会话配置,请键入:

New-PSSessionConfigurationFile -RoleDefinitions
@{ 'CONTOSO\User' = @{ RoleCapabilities = 'Maintenance' }}
-Path .\Maintenance.pssc

使用会话配置文件

创建会话配置时,可以包含会话配置文件,也可以稍后将文件添加到会话配置。

若要在创建会话配置时包括会话配置文件,请使用 Register-PSSessionConfiguration cmdlet 的 Path 参数。

例如,以下命令在创建 NoLanguage 会话配置时使用 NoLanguage.pssc 文件。

Register-PSSessionConfiguration -Name NoLanguage
-Path .\NoLanguage.pssc

当新的 NoLanguage 会话启动时,用户将仅有权访问 PowerShell 命令。

若要将会话配置文件添加到现有会话配置,请使用 Set-PSSessionConfiguration cmdlet 和 Path 参数。 这会影响使用指定会话配置创建的任何新会话。 请注意,Set-PSSessionConfiguration cmdlet 会更改会话本身,不会修改会话配置文件。

例如,以下命令将 NoLanguage.pssc 文件添加到 LockedDown 会话配置。

Set-PSSessionConfiguration -Name LockedDown
-Path .\NoLanguage.pssc

当用户使用 LockedDown 会话配置创建会话时,他们将能够运行 cmdlet,但无法创建或使用变量、赋值或使用其他 PowerShell 语言元素。

以下命令使用 New-PSSession cmdlet 在使用 LockedDown 会话配置的计算机 Srv01 上创建会话,并在 $s 变量中保存对会话的对象引用。 会话配置的 ACL(访问控制列表)确定谁可以使用它来创建会话。

$s = New-PSSession -ComputerName Srv01
-ConfigurationName LockedDown

由于 NoLanguage 约束已添加到 LockedDown 会话配置,因此 LockedDown 会话中的用户只能运行 PowerShell 命令和 cmdlet。 例如,以下两个命令使用 Invoke-Command cmdlet 在 $s 变量中引用的会话中运行命令。 运行 Get-UICulture cmdlet 且不使用任何变量的第一个命令成功。 获取 $PSUICulture 变量值的第二个命令失败。

Invoke-Command -Session $s {Get-UICulture}
en-US

Invoke-Command -Session $s {$PSUICulture}
The syntax is not supported by this runspace. This might be
because it is in no-language mode.
+ CategoryInfo          : ParserError: ($PSUICulture:String) [],
ParseException
+ FullyQualifiedErrorId : ScriptsNotAllowed

编辑会话配置文件

除了 RunAsVirtualAccount 和 RunAsVirtualAccountGroups 之外,会话配置中的所有设置都可以通过编辑会话配置使用的会话配置文件来修改。 为此,请先找到会话配置文件的活动副本。

在会话配置中使用会话配置文件时,PowerShell 将创建会话配置文件的活动副本,并将其存储在本地计算机上的 $pshome\SessionConfig 目录中。

会话配置文件的活动副本位置存储在会话配置对象的 ConfigFilePath 属性中。

以下命令获取 NoLanguage 会话配置的会话配置文件的位置。

(Get-PSSessionConfiguration -Name NoLanguage).ConfigFilePath

该命令返回与下方类似的文件路径:

C:\WINDOWS\System32\WindowsPowerShell\v1.0\SessionConfig\
NoLanguage_0c115179-ff2a-4f66-a5eb-e56e5692ba22.pssc

可在任何文本编辑器中编辑 .pssc 文件。 保存文件后,将由使用会话配置的任何新会话来部署。

如果需要修改 RunAsVirtualAccount 或 RunAsVirtualAccountGroups 设置,则必须取消注册会话配置并重新注册包含已编辑值的会话配置文件。

测试会话配置文件

使用 Test-PSSessionConfigurationFile cmdlet 测试手动编辑的会话配置文件。 这一点很重要:如果文件语法和值无效,则用户将无法使用会话配置来创建会话。

例如,以下命令测试 NoLanguage 会话配置的活动会话配置文件。

Test-PSSessionConfigurationFile -Path C:\WINDOWS\System32\
WindowsPowerShell\v1.0\SessionConfig\
NoLanguage_0c115179-ff2a-4f66-a5eb-e56e5692ba22.pssc

如果配置文件中的语法和值有效,Test-PSSessionConfigurationFile 将返回 True。 如果语法和值无效,则 cmdlet 返回 False。

可以使用 Test-PSSessionConfigurationFile 测试任何会话配置文件,包括 New-PSSessionConfiguration cmdlet 创建的文件。 有关详细信息,请参阅 Test-PSSessionConfigurationFile cmdlet 的帮助主题。

删除会话配置文件

无法从会话配置中删除会话配置文件。 但是,可以将该文件替换为使用默认设置的新文件。 这有效地取消了原始配置文件所使用的设置。

若要替换会话配置文件,请创建使用默认设置的新会话配置文件,然后使用 Set-PSSessionConfiguration cmdlet 将自定义会话配置文件替换为新文件。

例如,以下命令创建默认会话配置文件,然后替换 NoLanguage 会话配置中的活动会话配置文件。

New-PSSessionConfigurationFile -Path .\Default.pssc
Set-PSSessionConfiguration -Name NoLanguage
-Path .\Default.pssc

这些命令完成后,NoLanguage 会话配置实际上将为使用该会话配置创建的所有会话提供完整的语言支持(默认设置)。

查看会话配置的属性:使用会话配置文件表示会话配置的会话配置对象具有其他属性,便于发现和分析会话配置。 (请注意,下面显示的类型名称包括格式化的视图定义。)可以通过运行 Get-PSSessionConfiguration cmdlet 并将返回的数据通过管道传递给 Get-Member cmdlet 来查看属性:

Get-PSSessionConfiguration NoLanguage | Get-Member
TypeName: Microsoft.PowerShell.Commands.PSSessionConfigurationCommands
#PSSessionConfiguration

Name                          MemberType     Definition
----                          ----------     ----------
Equals                        Method         bool Equals(System.O...
GetHashCode                   Method         int GetHashCode()
GetType                       Method         type GetType()
ToString                      Method         string ToString()
Architecture                  NoteProperty   System.String Archit...
Author                        NoteProperty   System.String Author...
AutoRestart                   NoteProperty   System.String AutoRe...
Capability                    NoteProperty   System.Object[] Capa...
CompanyName                   NoteProperty   System.String Compan...
configfilepath                NoteProperty   System.String config...
Copyright                     NoteProperty   System.String Copyri...
Enabled                       NoteProperty   System.String Enable...
ExactMatch                    NoteProperty   System.String ExactM...
ExecutionPolicy               NoteProperty   System.String Execut...
Filename                      NoteProperty   System.String Filena...
GUID                          NoteProperty   System.String GUID=0...
ProcessIdleTimeoutSec         NoteProperty   System.String Proces...
IdleTimeoutms                 NoteProperty   System.String IdleTi...
lang                          NoteProperty   System.String lang=e...
LanguageMode                  NoteProperty   System.String Langua...
MaxConcurrentCommandsPerShell NoteProperty   System.String MaxCon...
MaxConcurrentUsers            NoteProperty   System.String MaxCon...
MaxIdleTimeoutms              NoteProperty   System.String MaxIdl...
MaxMemoryPerShellMB           NoteProperty   System.String MaxMem...
MaxProcessesPerShell          NoteProperty   System.String MaxPro...
MaxShells                     NoteProperty   System.String MaxShells
MaxShellsPerUser              NoteProperty   System.String MaxShe...
Name                          NoteProperty   System.String Name=N...
PSVersion                     NoteProperty   System.String PSVersion
ResourceUri                   NoteProperty   System.String Resour...
RunAsPassword                 NoteProperty   System.String RunAsP...
RunAsUser                     NoteProperty   System.String RunAsUser
SchemaVersion                 NoteProperty   System.String Schema...
SDKVersion                    NoteProperty   System.String SDKVer...
OutputBufferingMode           NoteProperty   System.String Output...
SessionType                   NoteProperty   System.String Sessio...
UseSharedProcess              NoteProperty   System.String UseSha...
SupportsOptions               NoteProperty   System.String Suppor...
xmlns                         NoteProperty   System.String xmlns=...
XmlRenderingType              NoteProperty   System.String XmlRen...
Permission                    ScriptProperty System.Object Permis...

使用这些属性可以轻松搜索特定的会话配置。 例如,可以使用 ExecutionPolicy 属性查找支持使用 RemoteSigned 执行策略的会话的会话配置。 请注意,由于 ExecutionPolicy 属性仅在使用会话配置文件的会话上存在,因此该命令可能不会返回所有符合条件的会话配置。

Get-PSSessionConfiguration |
where {$_.ExecutionPolicy -eq "RemoteSigned"}

以下命令获取 RunAsUser 是 Exchange 服务管理员的会话配置。

 Get-PSSessionConfiguration |
where {$_.RunAsUser -eq "Exchange01\Admin01"}

若要查看与配置关联的角色定义的信息,请使用 Get-PSSessionCapability cmdlet。 通过此 cmdlet,可以确定特定终结点中特定用户可用的命令和环境。

说明

会话配置还支持称为“空”会话的会话类型。 使用“空”会话类型,可以使用所选命令创建自定义会话。 如果没有将模块、函数或脚本添加到空会话中,则该会话将限于表达式,并且可能没有任何实际用途。 SessionType 属性指示你是否正在使用空会话。

另请参阅