create shared folder

This topic contains 2 replies, has 2 voices, and was last updated by  Marco 4 years, 3 months ago.

  • Author
    Posts
  • #8285

    Marco
    Participant

    Hello readers

    I i'm working on a new function that will create a new folder and make it a share @ the same time.
    Now i'm having a small problem when i try to create a share by WMI i get a return message what says "

    21 Error 21: Invalid Parameter

    i hope that some of you cant see what my problem is.
    i think its about converting the 2 varible's into 1 what gives me the problem.

    BTW its my first code so if you have some tips as well feel free 🙂

    Function new-sharedfolder{
        [CmdletBinding()]
        param(
                [Parameter( Mandatory=$True,
                            valuefrompipeline=$True,
                            valuefrompipelinebypropertyname=$True)]
                [string[]]$folders,
    
                [parameter( Mandatory=$true)]
                [validatelength(1,1)]
                [string[]]$drive,
            
                [Parameter( Mandatory=$True)]
                [string[]]$users,
    
                [parameter (mandatory=$true)]
                [validateset("ReadAndExecute","Modify")]
                [string[]]$permission,
    
                [parameter()]
                [string[]]$computername = "localhost"
            )
        BEGIN{}
    
        PROCESS{
    
            foreach($folder in $folders){
                $folderstatus = $True
                Write-Verbose "Creating folder $folder "
                Try {
                    new-item $drive":\"$folder -ItemType directory -ErrorAction stop | Out-Null
                }
                catch {                Write-Warning "Folder $sharepath1 already excist"             $folderstatus = $False
                }
                if ($folderstatus) {
                    foreach($user in $Users){
                    Write-Verbose "updating ACL for $user"
                        $acl = Get-Acl $drive":\"$folder
                        $acl.SetAccessRuleProtection($True, $False)
                        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
                        $acl.AddAccessRule($rule)
                        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$User","$permission", "ContainerInherit, ObjectInherit", "None", "Allow")
                        $acl.AddAccessRule($rule)
                        Set-Acl $drive":\"$folder $acl
                    }
                    	
                    Write-Verbose "Creating Share $folder "
                    $Share = [WMICLASS] "\\$computername\Root\Cimv2:Win32_Share"
                	
                $result = $Share.Create("$sharepath, $folder, 0")
    
    
    
    	            switch ($result.ReturnValue)
    	            {
    		            0 {$text += "has been success fully created" }
    		            2 {$text += "Error 2: Access Denied" }
    		            8 {$text += "Error 8: Unknown Failure" }
    		            9 {$text += "Error 9: Invalid Name"}
    		            10 {$text += "Error 10: Invalid Level" }
    		            21 {$text += "Error 21: Invalid Parameter" }
    		            22 {$text += "Error 22 : Duplicate Share"}
    		            23 {$text += "Error 23: Redirected Path" }
    		            24 {$text += "Error 24: Unknown Device or Directory" }
    		            25 {$text += "Error 25: Net Name Not Found" }
    	            }
    	            #Create Custom return object and Add results
    	            $return = New-Object System.Object
    	            $return | Add-Member -type NoteProperty -name ReturnCode -value $result.ReturnValue
    	            $return | Add-Member -type NoteProperty -name Message -value $text	
    	            #Return result object
    	            $return
    
    
                    Write-Verbose "reading folder information"
                     Get-Acl $drive":\"$folder  | Format-List
                    }
                }
            }
    }
    
    new-sharedfolder -folder "labs2" -drive e -users "First1.Last1","first1.last2" -permission ReadAndExecute -Verbose
  • #8289

    Poshoholic
    Participant

    You need to remove the quotes from your parameters in $share.Create.

    i.e. This:

    $Share.Create(“$sharepath, $folder, 0″)

    should be written like this:

    $Share.Create($sharepath, $folder, 0)

    Oh, and if this is really your first script, you're off to an absolutely fantastic start. 🙂

  • #8290

    Marco
    Participant

    thanks for the feedback that was the solution for my problem
    i was afraid that the problem was this part of code

    New-Variable sharepath -Value $drive":\"$folder

    because of the mixture of 2 variables and flat text into one variable

    [quote=8289]Oh, and if this is really your first script, you’re off to an absolutely fantastic start. :)
    [/quote]
    Thanks with guideline created by Don Jones in his collection of CBT Nuggets gives me a good start.
    and my past with writing PHP and HTML websites from scratch are also working ofcourse 🙂

You must be logged in to reply to this topic.