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 工作階段的許多功能。 您可以撰寫定義自定義 Runspace 的 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 屬性會告訴您是否使用空的會話。

另請參閱