Seriál Windows PowerShell: PowerShell v3 – jak na sdílené složky (část 31.)

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