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:
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.
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.