DSCResources/XD7LabAdministrator/XD7LabAdministrator.schema.psm1

configuration XD7LabAdministrator {
     param (
        ## Citrix XenDesktop 7 built-in admin role
        [Parameter(Mandatory)] [ValidateSet('Full','DeliveryGroup','HelpDesk','Host','MachineCatalog','ReadOnly')]
        [System.String] $Role,
        
        ## Users/groups to add to the Citrix XenDesktop 7.x admin role
        [Parameter(Mandatory)]
        [System.String[]] $Administrator,
        
        ## Domain FQDN
        [Parameter(Mandatory)]
        [System.String] $DomainName,
        
        [Parameter()] [ValidateNotNull()]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.CredentialAttribute()]
        $Credential
    )
    
    Import-DscResource -ModuleName XenDesktop7;
    
    $netBIOSDomainName = $DomainName.Split('.')[0];
    
    ## Full Administrators with domain qualifier
    $netBIOSDomainAdministrators = @();
    
    ## Credential with domain qualifier
    $domainCredential = $Credential;
    
    if ((-not $Credential.UserName.Contains('\')) -and (-not $Credential.UserName.Contains('@'))) {
        ## Create DOMAIN\UserName credential
        $netBIOSUsername = '{0}\{1}' -f $netBIOSDomainName, $Credential.UserName;
        $domainCredential = New-Object System.Management.Automation.PSCredential($netBIOSUsername, $Credential.Password);
    }
    
    foreach ($administrator in $FullAdministrator) {
        
        $resourceId = $administrator.Replace('\','_').Replace('@','_');
        
        $netBIOSAdministrator = $administrator;
        if ((-not $administrator.UserName.Contains('\')) -and (-not $administrator.UserName.Contains('@'))) {
            ## Ensure we have DOMAIN\UserOrGroup
            $netBIOSAdministrator = '{0}\{1}' -f $netBIOSDomainName, $administrator;
        }
        
        if ($PSBoundParameters.ContainsKey('Credential')) {
            XD7Administrator $resourceId {
                Name = $netBIOSAdministrator;
                Credential = $Credential;
            }
        }
        else {
            XD7Administrator $resourceId {
                Name = $netBIOSAdministrator;
            }
        }
        
        $netBIOSDomainAdministrators += $netBIOSAdministrator;
    
    } #end foreach Full Administrator
    
    $resourceId = '{0}Administrator' -f $Role;
    switch ($Role) {
        'DeliveryGroup' { $roleName = 'Delivery Group Administrator'; }
        'Full' { $roleName = 'Full Administrator'; }
        'HelpDesk' { $roleName = 'Help Desk Administrator'; }
        'Host' { $roleName = 'Host Administrator'; }
        'MachineCatalog' { $roleName = 'Machine Catalog Administrator'; }
        'ReadOnly' { $roleName = 'Read Only Administrator'; }
    }
    
    if ($PSBoundParameters.ContainsKey('Credential')) {
        XD7Role $resourceId {
            Name = $roleName;
            Members = $netBIOSDomainAdministrators;
            Credential = $Credential;
        }
    }
    else {
        XD7Role $resourceId {
            Name = $roleName;
            Members = $netBIOSDomainAdministrators;
        }
    }
    
} #end configuration XD7LabAdministrator