Private/Suse/Set-UnattendedYastDomain.ps1

function Set-UnattendedYastDomain
{
    param (
        [Parameter(Mandatory = $true)]
        [string]$DomainName,

        [Parameter(Mandatory = $true)]
        [string]$Username,

        [Parameter(Mandatory = $true)]
        [string]$Password,

        [Parameter()]
        [string]$OrganizationalUnit
    )

    $smbClientNode = $script:un.CreateElement('samba-client', $script:nsm.LookupNamespace('un'))
    $boolAttrib = $script:un.CreateAttribute('config','type', $script:nsm.LookupNamespace('config'))
    $boolAttrib.InnerText = 'boolean'
    $adNode = $script:un.CreateElement('active_directory', $script:nsm.LookupNamespace('un'))
    $kdc = $script:un.CreateElement('kdc', $script:nsm.LookupNamespace('un'))
    $disableDhcp = $script:un.CreateElement('disable_dhcp_hostname', $script:nsm.LookupNamespace('un'))
    $globalNode = $script:un.CreateElement('global', $script:nsm.LookupNamespace('un'))
    $securityNode = $script:un.CreateElement('security', $script:nsm.LookupNamespace('un'))
    $shellNode = $script:un.CreateElement('template_shell', $script:nsm.LookupNamespace('un'))
    $guestNode = $script:un.CreateElement('usershare_allow_guests', $script:nsm.LookupNamespace('un'))
    $domainNode = $script:un.CreateElement('workgroup', $script:nsm.LookupNamespace('un'))
    $joinNode = $script:un.CreateElement('join', $script:nsm.LookupNamespace('un'))
    $joinUserNode = $script:un.CreateElement('user', $script:nsm.LookupNamespace('un'))
    $joinPasswordNode = $script:un.CreateElement('password', $script:nsm.LookupNamespace('un'))
    $homedirNode = $script:un.CreateElement('mkhomedir', $script:nsm.LookupNamespace('un'))
    $winbindNode = $script:un.CreateElement('winbind', $script:nsm.LookupNamespace('un'))

    $null = $disableDhcp.Attributes.Append($boolAttrib)
    $null = $homedirNode.Attributes.Append($boolAttrib)
    $null = $winbindNode.Attributes.Append($boolAttrib)

    $kdc.InnerText = $DomainName

    $disableDhcp.InnerText = 'true'
    $securityNode.InnerText = 'ADS'
    $shellNode.InnerText = '/bin/bash'
    $guestNode.InnerText = 'no'
    $domainNode.InnerText = $DomainName
    $joinUserNode.InnerText = $Username
    $joinPasswordNode.InnerText = $Password
    $homedirNode.InnerText = 'true'
    $winbindNode.InnerText = 'false'

    $null = $adNode.AppendChild($kdc)
    $null = $globalNode.AppendChild($securityNode)
    $null = $globalNode.AppendChild($shellNode)
    $null = $globalNode.AppendChild($guestNode)
    $null = $globalNode.AppendChild($domainNode)
    $null = $joinNode.AppendChild($joinUserNode)
    $null = $joinNode.AppendChild($joinPasswordNode)
    $null = $smbClientNode.AppendChild($disableDhcp)
    $null = $smbClientNode.AppendChild($globalNode)
    $null = $smbClientNode.AppendChild($adNode)
    $null = $smbClientNode.AppendChild($joinNode)
    $null = $smbClientNode.AppendChild($homedirNode)
    $null = $smbClientNode.AppendChild($winbindNode)

    $null = $script:un.DocumentElement.AppendChild($smbClientNode)

    # SSSD configuration
    $authClientNode = $script:un.CreateElement('auth-client', $script:nsm.LookupNamespace('un'))
    $authClientSssd = $script:un.CreateElement('sssd', $script:nsm.LookupNamespace('un'))
    $authClientLdaps = $script:un.CreateElement('nssldap', $script:nsm.LookupNamespace('un'))
    $sssdConf = $script:un.CreateElement('sssd_conf', $script:nsm.LookupNamespace('un'))
    $sssdConfFile = $script:un.CreateElement('config_file_version', $script:nsm.LookupNamespace('un'))
    $sssdConfServices = $script:un.CreateElement('services', $script:nsm.LookupNamespace('un'))
    $sssdConfNode = $script:un.CreateElement('sssd', $script:nsm.LookupNamespace('un'))
    $sssdConfDomains = $script:un.CreateElement('domains', $script:nsm.LookupNamespace('un'))
    $authDomains = $script:un.CreateElement('auth_domains', $script:nsm.LookupNamespace('un'))
    $authDomain = $script:un.CreateElement('domain', $script:nsm.LookupNamespace('un'))
    $authDomainName = $script:un.CreateElement('domain_name', $script:nsm.LookupNamespace('un'))
    $authDomainIdp = $script:un.CreateElement('id_provider', $script:nsm.LookupNamespace('un'))
    $authDomainUri = $script:un.CreateElement('ldap_uri', $script:nsm.LookupNamespace('un'))

    $authClientSssd.InnerText = 'yes'
    $authClientLdaps.InnerText = 'no'
    $sssdConfFile.InnerText = 2
    $sssdConfServices.InnerText = 'nss, pam'
    $sssdConfDomains.InnerText = $DomainName
    $authDomainName.InnerText = $DomainName
    $authDomainIdp.InnerText = 'ldap'
    $authDomainUri.InnerText = "ldap://$DomainName"

    $authDomain.AppendChild($authDomainName)
    $authDomain.AppendChild($authDomainIdp)
    $authDomain.AppendChild($authDomainUri)
    $authDomains.AppendChild($authDomain)
    $sssdConf.AppendChild($authDomains)

    $sssdConfNode.AppendChild($sssdConfFile)
    $sssdConfNode.AppendChild($sssdConfServices)
    $sssdConfNode.AppendChild($sssdConfDomains)
    $sssdConf.AppendChild($sssdConfNode)

    $authClientNode.AppendChild($authClientSssd)
    $authClientNode.AppendChild($authClientLdaps)
    $authClientNode.AppendChild($sssdConf)
    $script:un.DocumentElement.AppendChild($authClientNode)
}