Tests/Integration/MSFT_SmbShare.config.ps1
#region HEADER # Integration Test Config Template Version: 1.2.0 #endregion $configFile = [System.IO.Path]::ChangeExtension($MyInvocation.MyCommand.Path, 'json') if (Test-Path -Path $configFile) { <# Allows reading the configuration data from a JSON file for real testing scenarios outside of the CI. #> $ConfigurationData = Get-Content -Path $configFile | ConvertFrom-Json } else { $ConfigurationData = @{ AllNodes = @( @{ NodeName = 'localhost' CertificateFile = $env:DscPublicCertificatePath ShareName1 = 'DscTestShare1' SharePath1 = 'C:\DscTestShare1' ShareName2 = 'DscTestShare2' SharePath2 = 'C:\DscTestShare2' UserName1 = ('{0}\SmbUser1' -f $env:COMPUTERNAME) UserName2 = ('{0}\SmbUser2' -f $env:COMPUTERNAME) UserName3 = ('{0}\SmbUser3' -f $env:COMPUTERNAME) UserName4 = ('{0}\SmbUser4' -f $env:COMPUTERNAME) Password = 'P@ssw0rd1' } ) } } <# .SYNOPSIS Creates the prerequisites for the other tests. This creates a folder that will be shared. #> Configuration MSFT_SmbShare_Prerequisites_Config { Import-DscResource -ModuleName 'PSDesiredStateConfiguration' node $AllNodes.NodeName { File 'CreateFolderToShare1' { Ensure = 'Present' Type = 'Directory' DestinationPath = $Node.SharePath1 } File 'CreateFolderToShare2' { Ensure = 'Present' Type = 'Directory' DestinationPath = $Node.SharePath2 } User 'CreateAccountUser1' { Ensure = 'Present' UserName = Split-Path -Path $Node.UserName1 -Leaf Password = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList @( (Split-Path -Path $Node.UserName1 -Leaf), (ConvertTo-SecureString -String $Node.Password -AsPlainText -Force) ) } User 'CreateAccountUser2' { Ensure = 'Present' UserName = Split-Path -Path $Node.UserName2 -Leaf Password = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList @( (Split-Path -Path $Node.UserName2 -Leaf), (ConvertTo-SecureString -String $Node.Password -AsPlainText -Force) ) } User 'CreateAccountUser3' { Ensure = 'Present' UserName = Split-Path -Path $Node.UserName3 -Leaf Password = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList @( (Split-Path -Path $Node.UserName3 -Leaf), (ConvertTo-SecureString -String $Node.Password -AsPlainText -Force) ) } User 'CreateAccountUser4' { Ensure = 'Present' UserName = Split-Path -Path $Node.UserName4 -Leaf Password = New-Object ` -TypeName System.Management.Automation.PSCredential ` -ArgumentList @( (Split-Path -Path $Node.UserName1 -Leaf), (ConvertTo-SecureString -String $Node.Password -AsPlainText -Force) ) } } } <# .SYNOPSIS Create the SMB share with default values, and no permissions. #> Configuration MSFT_SmbShare_CreateShare1_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Name = $Node.ShareName1 Path = $Node.SharePath1 } } } <# .SYNOPSIS Create the SMB share with default values, and no permissions. #> Configuration MSFT_SmbShare_CreateShare2_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Name = $Node.ShareName2 Path = $Node.SharePath2 FullAccess = @() ChangeAccess = @($Node.UserName1) ReadAccess = @() NoAccess = @() } } } <# .SYNOPSIS Update all properties of the SMB share. .NOTES The property ContinuouslyAvailable cannot be set to $true because that property requires the share to be a cluster share in a Failover Cluster. Log Name: Microsoft-Windows-SMBServer/Operational Event ID: 1800 Level: Error Description: CA failure - Failed to set continuously available property on a new or existing file share as the file share is not a cluster share. #> Configuration MSFT_SmbShare_UpdateProperties_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Name = $Node.ShareName1 Path = $Node.SharePath1 FolderEnumerationMode = 'AccessBased' CachingMode = 'None' ConcurrentUserLimit = 20 ContinuouslyAvailable = $false Description = 'A new description' EncryptData = $true FullAccess = @($Node.UserName1) ChangeAccess = @($Node.UserName2) ReadAccess = @($Node.UserName3) NoAccess = @($Node.UserName4) } } } <# .SYNOPSIS Remove permission, and no other properties should be changed. #> Configuration MSFT_SmbShare_RemovePermission_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Name = $Node.ShareName1 Path = $Node.SharePath1 FullAccess = @() ChangeAccess = @() ReadAccess = @('Everyone') NoAccess = @() } } } <# .SYNOPSIS Remove the share 1. #> Configuration MSFT_SmbShare_RemoveShare1_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Ensure = 'Absent' Name = $Node.ShareName1 Path = 'NotUsed_CanBeAnyValue' } } } <# .SYNOPSIS Remove the share 2. #> Configuration MSFT_SmbShare_RemoveShare2_Config { Import-DscResource -ModuleName 'ComputerManagementDsc' node $AllNodes.NodeName { SmbShare 'Integration_Test' { Ensure = 'Absent' Name = $Node.ShareName2 Path = 'NotUsed_CanBeAnyValue' } } } <# .SYNOPSIS Clean up the prerequisites. #> Configuration MSFT_SmbShare_Cleanup_Config { Import-DscResource -ModuleName 'PSDesiredStateConfiguration' node $AllNodes.NodeName { File 'RemoveShareFolder1' { Ensure = 'Absent' Type = 'Directory' DestinationPath = $Node.SharePath1 } File 'RemoveShareFolder2s' { Ensure = 'Absent' Type = 'Directory' DestinationPath = $Node.SharePath2 } User 'RemoveAccountUser1' { Ensure = 'Absent' UserName = Split-Path -Path $Node.UserName1 -Leaf } User 'RemoveAccountUser2' { Ensure = 'Absent' UserName = Split-Path -Path $Node.UserName2 -Leaf } User 'RemoveAccountUser3' { Ensure = 'Absent' UserName = Split-Path -Path $Node.UserName3 -Leaf } User 'RemoveAccountUser4' { Ensure = 'Absent' UserName = Split-Path -Path $Node.UserName4 -Leaf } } } |