A távoli futtatási környezetek („játszóterek”) számos paraméterét be lehet állítani annak érdekében, hogy például túl sok, vagy néhány nagyon túlbuzgó helpdeskes nehogy túl nagy terhelést rakjon a tartományvezérlőnkre. Ezen lehetőségek feltérképezésére nézzünk bele az eddig még nem igazán feltérképezett WSMAN: meghajtónkra:
[1] PS C:\> cd wsman:
[2] PS WSMan:\> dir
WSManConfig:
ComputerName Type
------------ ----
localhost Container
Itt nem sok minden van, menjünk még mélyebbre:
[3] PS WSMan:\> cd .\localhost
[4] PS WSMan:\localhost> dir | ft -AutoSize
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost
Name Value Type
---- ----- ----
MaxEnvelopeSizekb 150 System.String
MaxTimeoutms 60000 System.String
MaxBatchItems 32000 System.String
MaxProviderRequests 4294967295 System.String
Client Container
Service Container
Shell Container
Listener Container
Plugin Container
ClientCertificate Container
Itt már van néhány paraméterünk, de ezek un. „globális” paraméterei a WinRM szolgáltatásnak. Láthatók ebben a listában „könyvtárszerű” elemek, amelyekbe be lehet lépni, és ott újabb elemek találhatók majd. Nézzük ezeknek a fő könyvtáraknak a szerepét:
Könyvtár neve |
Szerepe |
Client |
A távoli futtatás kliensoldali jellemzői. Ez a tartományvezérlőnkön ebben a helyzetben nem érdekes, hiszen az a mi szempontunkból most nem kliens. |
Service |
A WinRM szolgáltatás globális paraméterei, a „szerver” oldal. |
Shell |
Ez a távoli futtatási környezet, és annak jellemzői. |
Listener |
A kiszolgáló „figyelő” komponensének beállításai, pl. milyen porton és melyik IP címére érkező kéréseket fogadja. |
Plugin |
Itt vannak a „játszóterek”, azaz a különböző távoli futtatási környezetek. Vannak itt már alaphelyzetben létrehozottak, de ide jött létre az én „helpdesk” környezetem is. |
ClientCertificate |
Ha tanúsítványalapú hitelesítés van megkövetelve, akkor itt lehet tárolni a kliens által felmutatott tanúsítványokat. |
Nézzünk bele elsőként a Plugin könyvtárba:
[36] PS WSMan:\localhost\Plugin> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin
Name Type Keys
---- ---- ----
Event Forwarding Plugin Container {Name=Event Forwarding Plugin}
HelpDesk Container {Name=HelpDesk}
microsoft.powershell Container {Name=microsoft.powershell}
Microsoft.PowerShell32 Container {Name=Microsoft.PowerShell32}
microsoft.ServerManager Container {Name=microsoft.ServerManager}
SEL Plugin Container {Name=SEL Plugin}
WMI Provider Container {Name=WMI Provider}
Az általam létrehozott HelpDesk környezet mellett megtalálhatók a Windows által egyéb célokra használt WinRM futtatási környezetei, valamint az alaphelyzet szerinti PowerShell távoli futtatásoknak otthont adó microsoft.powershell és Microsoft.PowerShell32 futtatási környezetek. Ezeket is testre lehet szabni, de inkább menjünk bele a HelpDesk-be:
[42] PS WSMan:\localhost\Plugin> cd .\HelpDesk
[43] PS WSMan:\localhost\Plugin\HelpDesk> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\HelpDesk
WARNING: column "Type" does not fit into the display and was removed.
Name Value
---- -----
xmlns http://schemas.microsoft.com/wbem/wsman/1/config/...
Name HelpDesk
Filename %windir%\system32\pwrshplugin.dll
SDKVersion 1
XmlRenderingType text
lang en-US
InitializationParameters
Resources
Látható, hogy ezen a szinten is van néhány beállítás, de nézzük a két alkönyvtárt:
[44] PS WSMan:\localhost\Plugin\HelpDesk> cd .\InitializationParameters
[45] PS WSMan:\localhost\Plugin\HelpDesk\InitializationParameters> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\HelpDesk\In
itializationParameters
ParamName ParamValue
--------- ----------
PSVersion 2.0
startupscript C:\lurdy\startup...
Itt látható a környezet létrehozásánál megadott szkript, nézzük a Resources mappát, illetve egy kicsit mélyebbre is megyek:
[46] PS WSMan:\localhost\Plugin\HelpDesk\InitializationParameters> cd ..\resour
ces
[47] PS WSMan:\localhost\Plugin\HelpDesk\Resources> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\HelpDesk\Re
sources
Name Type Keys
---- ---- ----
Resource_201271944 Container {Uri=http://schemas.microsof...
[48] PS WSMan:\localhost\Plugin\HelpDesk\Resources> cd .\Resource_201271944
[49] PS WSMan:\localhost\Plugin\HelpDesk\Resources\Resource_201271944> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\HelpDesk\Re
sources\Resource_201271944
WARNING: column "Type" does not fit into the display and was removed.
Name Value
---- -----
ResourceUri http://schemas.microsoft.com/powershell/HelpDesk
SupportsOptions true
ExactMatch true
Capability {Shell}
Security
Látható itt, majdnem legalul, hogy a Capability elemnél hivatkozik a Shell-re, mint alkalmazásra, azaz itt a háttérben egy konzol fut. Ezt a Shell elemet korábban már láttunk a localhost szint alatt. Menjünk oda most vissza:
[54] PS WSMan:\localhost> cd .\Shell
[55] PS WSMan:\localhost\Shell> dir
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell
WARNING: column "Type" does not fit into the display and was removed.
Name Value
---- -----
AllowRemoteShellAccess true
IdleTimeout 180000
MaxConcurrentUsers 5
MaxShellRunTime 2147483647
MaxProcessesPerShell 15
MaxMemoryPerShellMB 150
MaxShellsPerUser 5
Na, itt már nagyon konkrét dolgok vannak a távoli futtatási környezetre vonatkozólag, például az, hogy engedélyezett-e ez egyáltalán. Vagy ha a helpdeskes nem csinál semmit, akkor mennyi idő múlva törölje a neki dinamikusan kialakított „játszóteret”. Ez itt 18000 másodperc, azaz 5 óra. Láthatjuk azt is, hogy egy időben 5 távoli csatlakozást enged és környezetenként 150 MB memória felhasználását engedélyezi és felhasználónként maximum 5 környezetet lehet nyitni.
Természetesen átírhatjuk ezeket a paramétereket:
[69] PS WSMan:\localhost\Shell> Set-Item .\AllowRemoteShellAccess -Value $false
Azaz ideiglenesen megtiltottam a távoli futtatás lehetőségét. Ezután a helpdeskes ezt tapasztalja:
PS C:\> Get-ADUser -Filter {name -like "főn*"}
Starting a command on remote server failed with the
following error message :
The WS-Management service cannot process the request.
The service is configure
d to not accept any remote shell requests. For more
information, see the about
_Remote_Troubleshooting Help topic.
+
CategoryInfo : OperationStopped:
(System.Manageme...pressionSy
ncJob:PSInvokeExpressionSyncJob) [], PSRemotingTransportException
+
FullyQualifiedErrorId : JobFailure
Azaz nem tud távoli parancsokat futtatni.
Ezekkel a lehetőségekkel tehát olyan speciális futtatási környezeteket tudunk kialakítani, amelyeket a célközönség számára testre tudunk szabni, így pont azokat a szolgáltatásokat tudják elérni, amelyek számukra a munkájuk végzéséhez szükségesek.
Előfordulhat, hogy nem mi állítunk be valaki másnak ilyen távoli, korlátozott környezetet, hanem bennünk merül fel a gyanú, hogy más által nekünk biztosított környezet szűkített. Ezt a következő kifejezéssel tudjuk ellenőrizni:
$result = Invoke-Command -Session $s -ScriptBlock {$ExecutionContext.SessionState.LanguageMode} -ErrorAction SilentlyContinue
$fullLanguageMode = ($result -eq [System.Management.Automation.PSLanguageMode]::FullLanguage)