func_New-AlocDVLSCostumer.ps1

Function Global:New-AlocDVLSCostumer{
    [CmdletBinding(DefaultParameterSetName = 'Update')]    
    param(
    #When Adding
    [string][Parameter(ParameterSetName = "Add")]$SHORTName,
    [string][Parameter(ParameterSetName = "Add")]$LongName,

    #When Updating
    [string][Parameter(ParameterSetName = "Update")]$FolderName,

    #Allways
    [string][Parameter(ParameterSetName = "Add")][Parameter(ParameterSetName = "Update")]$BaseFolder = ""
    )

    if (-not (Get-Module RemoteDesktopManager)){
        try {
            Write-Host "Importing RemoteDesktopManager"
            Import-Module RemoteDesktopManager -ErrorAction Stop
        }
        catch {
            Write-Host "Module didn't load installing RemoteDesktopManager"
            Install-Package RemoteDesktopManager -Force
            try {
                Write-Host "Retrying import of RemoteDesktopManager"
                Import-Module RemoteDesktopManager -ErrorAction Stop
            }
            catch {
                Wirte-Host "Can't install or import RemoteDesktop"
            }
        }
    }
    try {
        $Cred = Import-Clixml .\DVLSAppID.clixml    
    }
    catch {
        Write-Warning 'DVLSAppID.clixml not found create one with AppID/Password to DVLS by executing "@{ID="<<App_ID>>";PW="<<App_Password>>"}|Export-Clixml DVLSAppID.clixml"'
    }

    $ds = New-RDMDataSource -Name "DVLS" -DVLS -Server "https://DVLS.aloc.com" -ScriptingTenantID $Cred.ID -ScriptingApplicationPassword $cred.PW
    #Set-RDMDataSource $ds # this saves the data source to disk
    Set-RDMCurrentDataSource $ds

    $SHORTName = (Read-Host -Prompt "Venligst indskriv kundens 4 bogstav's shortname")
    $LongName = (Read-Host -Prompt "Venligst indskriv kundens officelle")
    $BaseFolder = (Read-Host -Prompt "Venligst indskriv hvilken mappe, kunden skal oprettes i. normalt er det roden. Tryk blot enter hvis den skal ligge i roden")
    #$BaseFolder = ""
    #$FolderName = "SKAN - Skandia"

    if ($FolderName -eq ""){
        if ($SHORTName -ne "" -and $LongName -ne ""){
            Write-Host "Using Shortname and Longname"
            $FolderName = "$SHORTName - $LongName"
        }else{
            Write-host "Please Provide Both ShortName and LongName or FolderName"
        }
    }
    $ErrorActionPreference = "Stop"
    try {
        if ($BaseFolder -eq "") {
            $RootS = Get-RDMSession -Group $FolderName
        }else{
            $RootS = Get-RDMSession -Group "$BaseFolder\$FolderName"
        }
        Write-Host "Update root"
    }catch{
        Write-Host "Creating Costumer root"
        $RootS = New-RDMSession -Group "$BaseFolder" -Host "None" -Name $FolderName -Type Group
        $RootS.ImageName = "SampleOffice1Yellow"
        $RootS.CredentialConnectionID = "88E4BE76-4C5B-4694-AA9C-D53B7E0FE0DC" # Search User Vault for credentials
        $RootS.CredentialPrivateVaultSearchString = $SHORTName
        Set-RDMSession $RootS -ErrorAction Stop
    }
    Write-Host "Costumer root - Done"

    function New-CatagoryFolder {
        param (
            $Catagory,
            $ImageName,
            $Path
        )
        try {
            $CatagoryS = Get-RDMSession -GroupName "$($Path.Group)\$Catagory"
            Write-Host "Updating $Catagory"
        }
        catch {
            Write-Host "Creating $Catagory"
            $CatagoryS = New-RDMSession -Group "$($Path.Group)\$Catagory" -Host "None" -Name "$Catagory" -Type Group
        }

        $CatagoryS.ImageName = $ImageName
        $CatagoryS.CredentialConnectionID = "1310CF82-6FAB-4B7A-9EEA-3E2E451CA2CF" #Inherited
        $CatagoryS.Security.RoleOverride = "Inherited"
        Set-RDMSession $CatagoryS
        return $CatagoryS
        Write-Host "$Catagory - Done"
    }

    function New-CatagorySubfolder {
        param (
            $FolderPath,
            $Folder,
            $ImageName,
            $FolderName
        )
        try {
            $SubS = Get-RDMSession -GroupName "$($FolderPath.Group)\$FolderName" -IncludeSubFolders:$false -ErrorAction Stop
            $Subs = $SubS | Where-Object {$_.ConnectionType -eq "Group"}
            Write-Host "Updating $FolderName under $Folder"
        }
        catch {
            Write-Host "Creating $FolderName under $Folder"
            $SubS = New-RDMSession -Group "$($FolderPath.Group)\$FolderName" -Host "None" -Name "$FolderName" -Type Group
        }
        if ($FolderName -eq "Shared") {
            $FolderConNames = "PORTMAN","IDEAS","DATA"  
        }else{
            $FolderConNames = $FolderName
        }
        #"$($FolderPath.Group)\$FolderName"
        $SubS.ImageName = $ImageName
        $SubS.CredentialConnectionID = "1310CF82-6FAB-4B7A-9EEA-3E2E451CA2CF" #Inherited
        $SubS.Security.RoleOverride = "Custom"
        $SubS.Security.ViewOverride = "Custom"
        $RORights = @("ViewPassword","Execute","Attachment","Handbook")
        $RWRights = @("Add","Edit","Delete","Move","ViewPassword","Execute","Attachment","Handbook","EditAttachment","EditHandbook")
        $RightsLevels = @("RO","RW")
        foreach ($Level in $RightsLevels) {
            if ($Level -eq "RO"){
                $Rights = $RORights
            }elseif ($Level -eq "RW") {
                $Rights = $RWRights
            }else{
                Write-Host "Scripter fucked up"
                End
            }
            foreach ($ConFolder in $FolderConNames) {
                $AccessGroup = "FolderACL-$ConFolder-$Level"
                if ($SubS.Security.ViewRoles -notcontains $AccessGroup){
                    $SubS.Security.ViewRoles += $AccessGroup
                }
                foreach ($Right in $Rights) {
                    $Perms = @()
                    $Perms = $SubS.Security.Permissions
                    $ExistingPerm = $Perms | Where-Object {$_.Right -contains $Right}
                    if ($ExistingPerm.count -eq 1) {

                        $ExistingPerm.Roles += $AccessGroup
                    }else{
                        if ($ExistingPerm.count -gt 1) {
                            $SubS.Security.Permissions = $null
                        }
                        $Perm = New-Object Devolutions.RemoteDesktopManager.Business.ConnectionPermission
                        $Perm.Right = $Right
                        $Perm.Override = "Custom"
                        $Perm.Roles = $AccessGroup
                        $SubS.Security.Permissions += $Perm
                    }
                }
            }
        }
        Set-RDMSession $SubS
        Write-Host "$FolderName under $Folder - Done"
    }

    $Credentials = New-CatagoryFolder -Catagory "Credentials" -ImageName "SampleKey2Yellow" -Path $RootS
    #$Connections = New-CatagoryFolder -Catagory "Connections" -ImageName "SampleServerFarmAYellow" -Path $RootS
    $Documentation = New-CatagoryFolder -Catagory "Documentation" -ImageName "SampleDocumentGroup2Yellow" -Path $RootS

    New-CatagorySubfolder -FolderPath $Credentials -Folder "Credentials" -FolderName "PORTMAN" -ImageName "SampleSerialYellow"
    New-CatagorySubfolder -FolderPath $Credentials -Folder "Credentials" -FolderName "IDEAS" -ImageName "SampleSerialYellow"
    #New-CatagorySubfolder -FolderPath $Credentials -Folder "Credentials" -FolderName "DATA" -ImageName "SampleSerialYellow"
    New-CatagorySubfolder -FolderPath $Credentials -Folder "Credentials" -FolderName "Shared" -ImageName "SampleSerialYellow"

    #New-CatagorySubfolder -FolderPath $Connections -Folder "Connections" -FolderName "PORTMAN" -ImageName "SampleSerialYellow"
    #New-CatagorySubfolder -FolderPath $Connections -Folder "Connections" -FolderName "IDEAS" -ImageName "SampleSerialYellow"
    #New-CatagorySubfolder -FolderPath $Connections -Folder "Connections" -FolderName "DATA" -ImageName "SampleSerialYellow"
    #New-CatagorySubfolder -FolderPath $Connections -Folder "Connections" -FolderName "Shared" -ImageName "SampleSerialYellow"

    New-CatagorySubfolder -FolderPath $Documentation -Folder "Documentation" -FolderName "PORTMAN" -ImageName "SampleDocumentGroupYellow"
    New-CatagorySubfolder -FolderPath $Documentation -Folder "Documentation" -FolderName "IDEAS" -ImageName "SampleDocumentGroupYellow"
    #New-CatagorySubfolder -FolderPath $Documentation -Folder "Documentation" -FolderName "DATA" -ImageName "SampleDocumentGroupYellow"
    New-CatagorySubfolder -FolderPath $Documentation -Folder "Documentation" -FolderName "Shared" -ImageName "SampleDocumentGroupYellow"
}