about_Session_Configuration_Files

简短说明

描述会话配置文件,用于会话配置 (也称为“终结点”) 来定义使用会话配置的会话环境。

长说明

“会话配置文件”是一个文件扩展名为 .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 属性指示你是否使用空会话。

另请参阅