Automatické načítání modulů

Než se pustíme do prohlídky dvou nových modulů, povíme si něco o možnosti takzvaného module autoloading. Pokud jste v PowerShell v2 potřebovali pracovat s cmdletem patřícím do určitého modulu, museli jste nejdříve tento modul načíst. V PowerShellu v3 již toto není potřeba. Stačí poprvé cmdlet použít a modul se automaticky importuje, jako kdybychom použili Import-Module. Podívejte se na následující obrázek:

image

Při startu PowerShellu se načetly pouze dva základní moduly. Poté jsem rovnou zavolal cmdlet Get-SmbShare. Ihned poté je vidět ve výpisu opětovného volání Get-Module, že modul SmbShare se načetl automaticky.

Automatické načítání funguje i při použití tabulátoru (doplňování jmen cmdletů), což je na jednu stranu výhoda při hledání vhodného příkazu. Na druhou stranu se tím zvětšuje možnost dostupných cmdletů při automatickém doplňování. Pokud by se vám toto automatické načítání nelíbilo, lze jej vypnout pomocí proměnné $PSModuleAutoLoadingPreference.

Sdílené složky

Dlouhou dobu jsme čekali na modul pro správu sdílených složek. Existovaly moduly vytvořené různými lidmi, ale oficiální podporu jsme neměli. S PowerShellem v3 přichází modul SmbShare, který v sobě obsahuje množství (přesně 28) užitečných cmdletů. Jelikož si myslím, že si zaslouží pozornost, budeme se dnes věnovat pouze tomuto modulu.

Nejdříve si ukážeme dostupné funkce (modul obsahuje opravdu funkce, nikoli cmdlety).

PS C:\> Get-Command -Module smbshare

CommandType  Name                              ModuleName
-----------  ----                              ----------
Function     Block-SmbShareAccess              SmbShare
Function     Close-SmbOpenFile                 SmbShare
Function     Close-SmbSession                  SmbShare
Function     Get-SmbClientConfiguration        SmbShare
Function     Get-SmbClientNetworkInterface     SmbShare
Function     Get-SmbConnection                 SmbShare
Function     Get-SmbMapping                    SmbShare
Function     Get-SmbMultichannelConnection     SmbShare
Function     Get-SmbMultichannelConstraint     SmbShare
Function     Get-SmbOpenFile                   SmbShare
Function     Get-SmbServerConfiguration        SmbShare
Function     Get-SmbServerNetworkInterface     SmbShare
Function     Get-SmbSession                    SmbShare
Function     Get-SmbShare                      SmbShare
Function     Get-SmbShareAccess                SmbShare
Function     Grant-SmbShareAccess              SmbShare
Function     New-SmbMapping                    SmbShare
Function     New-SmbMultichannelConstraint     SmbShare
Function     New-SmbShare                      SmbShare
Function     Remove-SmbMapping                 SmbShare
Function     Remove-SmbMultichannelConstraint  SmbShare
Function     Remove-SmbShare                   SmbShare
Function     Revoke-SmbShareAccess             SmbShare
Function     Set-SmbClientConfiguration        SmbShare
Function     Set-SmbServerConfiguration        SmbShare
Function     Set-SmbShare                      SmbShare
Function     Unblock-SmbShareAccess            SmbShare
Function     Update-SmbMultichannelConnection  SmbShare

Je vidět, že si dal Microsoft opravdu záležet a z pohledu správce souborového serveru zde nechybí nic důležitého. Na některé funkce se podíváme podrobněji.

Get-SmbShare

Seznam sdílených složek zobrazíme pomocí Get-SmbShare:

PS C:\> Get-SmbShare

Name    ScopeName  Path        Description
----    ---------  ----        -----------
ADMIN$  *          C:\Windows  Remote Admin
C$      *          C:\         Default share
E$      *          E:\         Default share
F$      *          F:\         Default share
IPC$    *                      Remote IPC

Všechny příkazy spouštím na čisté instalaci Windows 2012 Serveru, takže nejsou dostupné jiné, než administrativní sdílené složky. Každá složka obsahuje některé další zajímavé vlastnosti:

PS C:\> Get-SmbShare -Name c$ | Format-List *

PresetPathAcl         :
ShareState            : Online
AvailabilityType      : NonClustered
ShareType             : FileSystemDirectory
FolderEnumerationMode : Unrestricted
CachingMode           : Manual
CATimeout             : 0
ConcurrentUserLimit   : 0
ContinuouslyAvailable : False
CurrentUsers          : 0
Description           : Default share
EncryptData           : False
Name                  : C$
Path                  : C:\
Scoped                : False
ScopeName             : *
SecurityDescriptor    : O:SYG:SYD:(A;;GA;;;BA)(A;;GA;;;BO)(A;;GA;;;IU)
ShadowCopy            : False
Special               : True
Temporary             : False
Volume                : \\?\Volume{de1d5a93-11b8-11e2-93e8-806e6f6e6963}\
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/SMB:MSFT_SmbShare
CimInstanceProperties : {AvailabilityType, CachingMode, CATimeout,
ConcurrentUserLimit...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

New-SmbShare

Pojďme vytvořit novou sdílenou složku. Schválně nebudu zadávat žádné parametry z příkazové řádky, aby bylo vidět, které jsou povinné.

PS C:\> New-SmbShare

cmdlet New-SmbShare at command pipeline position 1
Supply values for the following parameters:´
Path: c:\temp\share1
Name: Share1

Name    ScopeName  Path           Description
----    ---------  ----           -----------
Share1  *          c:\temp\share1

Pokud se nyní podíváme na práva ke sdílení, jsou nastavena na Everyone/Read. To nám nemusí vždy vyhovovat (a asi opravdu nebude). Proto využijeme nastavení práv již při vytváření sdílení.

PS C:\> New-SmbShare -Path C:\Temp\Share2 -Name Share2 -FullAccess Administrators -NoAccess Everyone

Name    ScopeName  Path            Description
----    ---------  ----            -----------
Share2  *          C:\Temp\Share2

New-SmbShare totiž obsahuje parametry ChangeAccess, FullAccess, NoAccess a ReadAccess, pomocí kterých můžeme přístup ovlivnit.

Z prvního výpisu je vidět, že práva na složky se zobrazují jako SecurityDescriptor

SecurityDescriptor : O:SYG:SYD:(A;;GA;;;BA)(A;;GA;;;BO)(A;;GA;;;IU)

což není úplně příjemné počtení. Proto se nám bude hodit funkce Get-SmbShareAccess, která zobrazí práva v přehledné formě:

PS C:\> Get-SmbShareAccess Share1

Name    ScopeName  AccountName  AccessControlType  AccessRight
----    ---------  -----------  -----------------  -----------
Share1  *          Everyone     Allow              Read

Set-SmbShare

Pokud již máme sdílený adresář vytvořený, můžeme měnit jeho nastavení pomocí Set-SmbShare. Jednou z možností, jak nastavit práva na Share1 podle Share2 je například toto.

PS C:\> Set-SmbShare -Name Share1 -SecurityDescriptor (Get-SmbShare -Name Share2).SecurityDescriptor

Confirm
Are you sure you want to perform this action?Performing operation 'Modify' on Target '*,Share3'.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):

Pokud bychom toto nastavení prováděli ze skriptu, je potřeba použít parametr Force, abychom se „nezasekli“ na potvrzovacím dialogu.

Remove-SmbShare

Životní cyklus našich sdílených adresářů ukončíme pomocí Remove-SmbShare.

PS C:\> Get-SmbShare share*

Name    ScopeName  Path            Description
----    ---------  ----            -----------
Share1  *          c:\temp\share1
Share2  *          C:\Temp\Share2

PS C:\> Get-SmbShare share* | Remove-SmbShare -WhatIf
What if: Performing operation 'Remove-Share' on Target '*,Share1'.
What if: Performing operation 'Remove-Share' on Target '*,Share2'.

PS C:\> Get-SmbShare share* | Remove-SmbShare -Force
PS C:\> Get-SmbShare share*

*-SmbOpenFile

Na souborovém serveru se hodí, podívat se, které soubory jsou otevřené a kým.

image

Z obrázku je vidět, že jsem přes vytvořený share otevřel soubor test.txt. Poté jsem použil Get-SmbOpenFile pro zobrazení tohoto spojení.

PS C:\> Get-SmbOpenFile | Format-Table -AutoSize

FileId       SessionId    Path            ShareRelativePath ClientComputerName ClientUserName
------       ---------    ----            -----------------          ------------------ --------------
652835029037 652835029029 C:\Temp\Share3\ [fe80::e005:9d1a:128:f8ef] WIN2012\Administrator

PS C:\> Close-SmbOpenFile

Confirm
Are you sure you want to perform this action?Performing operation 'Close-File' on Target '652835029037'.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):Y

Otevřené spojení pak mohu i zavřít.

Další zajímavé funkce

Pro zjištění nastavení serveru slouží Get-SmbServerConfiguration.

PS C:\> Get-SmbServerConfiguration

AnnounceServer                  : False
AsynchronousCredits             : 64
AutoShareServer                 : True
AutoShareWorkstation            : True
CachedOpenLimit                 : 5
AnnounceComment                 :
EnableDownlevelTimewarp         : False
EnableLeasing                   : True
EnableMultiChannel              : True
EnableStrictNameChecking        : True
AutoDisconnectTimeout           : 0
DurableHandleV2TimeoutInSeconds : 30
EnableAuthenticateUserSharing   : False
EnableForcedLogoff              : True
EnableOplocks                   : True
EnableSecuritySignature         : False
ServerHidden                    : True
IrpStackSize                    : 15
KeepAliveTime                   : 2
MaxChannelPerSession            : 32
MaxMpxCount                     : 50
MaxSessionPerConnection         : 16384
MaxThreadsPerQueue              : 20
MaxWorkItems                    : 1
NullSessionPipes                :
NullSessionShares               :
OplockBreakWait                 : 35
PendingClientTimeoutInSeconds   : 120
RequireSecuritySignature        : False
EnableSMB1Protocol              : True
EnableSMB2Protocol              : True
Smb2CreditsMax                  : 2048
Smb2CreditsMin                  : 128
SmbServerNameHardeningLevel     : 0
TreatHostAsStableStorage        : False
ValidateAliasNotCircular        : True
ValidateShareScope              : True
ValidateShareScopeNotAliased    : True
ValidateTargetName              : True
EncryptData                     : False
RejectUnencryptedAccess         : True

V případě, že byste potřebovali některou hodnotu změnit, můžete použít naopak Set-SmbServerConfiguration.

Co třeba nastavení síťového rozhraní:

PS C:\> Get-SmbServerNetworkInterface

Scope Name Interface Index RSS Capable RDMA Capable Speed   IpAddress
---------- --------------- ----------- ------------ -----   ---------
*          12              False       False        54 Mbps 192.168.10.101
*          12              False       False        54 Mbps   fe80::e005:9d1a:...

Celý modul obsahuje funkce pro práci s následujícími vlastnostmi:

PS C:\> Get-Command -Module smbshare |% { $verb,$noun = $_.name -split '-'; $noun} | group | sort count -desc

Count Name                      Group
----- ----                      -----
    5 SmbShareAccess            {SmbShareAccess, SmbShareAccess, SmbShareAccess, SmbShareAccess...}
    4 SmbShare                  {SmbShare, SmbShare, SmbShare, SmbShare}
    3 SmbMapping                {SmbMapping, SmbMapping, SmbMapping}
    3 SmbMultichannelConstraint {SmbMultichannelConstraint, SmbMultichannelConstrain...}
    2 SmbOpenFile               {SmbOpenFile, SmbOpenFile}
    2 SmbSession                {SmbSession, SmbSession}
    2 SmbClientConfiguration    {SmbClientConfiguration, SmbClientConfiguration}
    2 SmbMultichannelConnection {SmbMultichannelConnection, SmbMultichannelConnection}
    2 SmbServerConfiguration    {SmbServerConfiguration, SmbServerConfiguration}
    1 SmbClientNetworkInterface {SmbClientNetworkInterface}
    1 SmbConnection             {SmbConnection}
    1 SmbServerNetworkInterface {SmbServerNetworkInterface}

Pokud by vás zajímala nápověda k dalším funkcím, najdete ji na TechNetu v sekci SMB Share Cmdlets in Windows PowerShell.

- David Moravec, MVP