DscResources/SmbShares/SmbShares.schema.psm1
configuration SmbShares { param ( [Parameter()] [ValidateSet('Server', 'Client')] $HostOS = 'Server', [Parameter()] [hashtable] $ServerConfiguration, [Parameter()] [hashtable[]] $Shares ) Import-DscResource -ModuleName PSDesiredStateConfiguration Import-DscResource -ModuleName ComputerManagementDsc if( $HostOS -eq 'Server' ) { WindowsFeature featureFileServer { Name = 'FS-FileServer' Ensure = 'Present' } $featureFileServer = '[WindowsFeature]featureFileServer' } if( $null -ne $ServerConfiguration ) { if( $HostOS -eq 'Server' ) { if( $ServerConfiguration.EnableSMB1Protocol -eq $false ) { WindowsFeature removeSMB1 { Name = 'FS-SMB1' Ensure = 'Absent' DependsOn = $featureFileServer } } $ServerConfiguration.DependsOn = $featureFileServer } $ServerConfiguration.IsSingleInstance = 'Yes' (Get-DscSplattedResource -ResourceName SmbServerConfiguration -ExecutionName "smbServerConfig" -Properties $ServerConfiguration -NoInvoke).Invoke($ServerConfiguration) } if( $null -ne $Shares ) { foreach( $share in $Shares ) { # Remove Case Sensitivity of ordered Dictionary or Hashtables $share = @{}+$share $shareId = $share.Name -replace '[:$\s]', '_' $share.DependsOn = $featureFileServer if( -not $share.ContainsKey('Ensure') ) { $share.Ensure = 'Present' } if( $share.Ensure -eq 'Present' ) { if( [string]::IsNullOrWhiteSpace($share.Path) ) { throw "ERROR: Missing path of the SMB share '$($share.Name)'." } # skip root paths $dirInfo = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList $share.Path if( $null -ne $dirInfo.Parent ) { File "Folder_$shareId" { DestinationPath = $share.Path Type = 'Directory' Ensure = 'Present' DependsOn = $featureFileServer } $share.DependsOn = "[File]Folder_$shareId" } } elseif ( [string]::IsNullOrWhiteSpace($share.Path) ) { $share.Path = 'Unused' } (Get-DscSplattedResource -ResourceName SmbShare -ExecutionName "SmbShare_$shareId" -Properties $share -NoInvoke).Invoke($share) } } } |