共用方式為


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

另請參閱