DSCResources/cIntuneWindowsHelloForBusinessGlobalPolicy/cIntuneWindowsHelloForBusinessGlobalPolicy.schema.psm1

configuration cIntuneWindowsHelloForBusinessGlobalPolicy {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateSet('Yes')]
        [string]
        $IsSingleInstance,

        [Parameter()]
        [ValidateSet('notConfigured', 'enabled', 'disabled')]
        [string]
        $EnhancedBiometricsState,

        [Parameter()]
        [System.UInt32]
        $EnhancedSignInSecurity,

        [Parameter()]
        [System.UInt32]
        $PinExpirationInDays,

        [Parameter()]
        [ValidateSet('allowed', 'required', 'disallowed')]
        [string]
        $PinLowercaseCharactersUsage,

        [Parameter()]
        [System.UInt32]
        $PinMaximumLength,

        [Parameter()]
        [System.UInt32]
        $PinMinimumLength,

        [Parameter()]
        [System.UInt32]
        $PinPreviousBlockCount,

        [Parameter()]
        [ValidateSet('allowed', 'required', 'disallowed')]
        [string]
        $PinSpecialCharactersUsage,

        [Parameter()]
        [ValidateSet('allowed', 'required', 'disallowed')]
        [string]
        $PinUppercaseCharactersUsage,

        [Parameter()]
        [bool]
        $RemotePassportEnabled,

        [Parameter()]
        [bool]
        $SecurityDeviceRequired,

        [Parameter()]
        [ValidateSet('notConfigured', 'enabled', 'disabled')]
        [string]
        $SecurityKeyForSignIn,

        [Parameter()]
        [ValidateSet('notConfigured', 'enabled', 'disabled')]
        [string]
        $State,

        [Parameter()]
        [bool]
        $UnlockWithBiometricsEnabled,

        [Parameter()]
        [PSCredential]
        $Credential,

        [Parameter()]
        [string]
        $ApplicationId,

        [Parameter()]
        [string]
        $TenantId,

        [Parameter()]
        [PSCredential]
        $ApplicationSecret,

        [Parameter()]
        [string]
        $CertificateThumbprint,

        [Parameter()]
        [PSCredential]
        $CertificatePassword,

        [Parameter()]
        [string]
        $CertificatePath,

        [Parameter()]
        [bool]
        $ManagedIdentity,

        [Parameter()]
        [string[]]
        $AccessTokens
)

<#
IntuneWindowsHelloForBusinessGlobalPolicy [String] #ResourceName
{
    IsSingleInstance = [string]{ Yes }
    [AccessTokens = [string[]]]
    [ApplicationId = [string]]
    [ApplicationSecret = [PSCredential]]
    [CertificatePassword = [PSCredential]]
    [CertificatePath = [string]]
    [CertificateThumbprint = [string]]
    [Credential = [PSCredential]]
    [DependsOn = [string[]]]
    [EnhancedBiometricsState = [string]{ disabled | enabled | notConfigured }]
    [EnhancedSignInSecurity = [UInt32]]
    [ManagedIdentity = [bool]]
    [PinExpirationInDays = [UInt32]]
    [PinLowercaseCharactersUsage = [string]{ allowed | disallowed | required }]
    [PinMaximumLength = [UInt32]]
    [PinMinimumLength = [UInt32]]
    [PinPreviousBlockCount = [UInt32]]
    [PinSpecialCharactersUsage = [string]{ allowed | disallowed | required }]
    [PinUppercaseCharactersUsage = [string]{ allowed | disallowed | required }]
    [PsDscRunAsCredential = [PSCredential]]
    [RemotePassportEnabled = [bool]]
    [SecurityDeviceRequired = [bool]]
    [SecurityKeyForSignIn = [string]{ disabled | enabled | notConfigured }]
    [State = [string]{ disabled | enabled | notConfigured }]
    [TenantId = [string]]
    [UnlockWithBiometricsEnabled = [bool]]
}
 
#>



    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName Microsoft365DSC

    $dscResourceName = 'IntuneWindowsHelloForBusinessGlobalPolicy'

    $param = $PSBoundParameters
    $param.Remove("InstanceName")

    $dscParameterKeys = 'IsSingleInstance' -split ', '

    $keyValues = foreach ($key in $dscParameterKeys)
    {
        $param.$key
    }
    $executionName = $keyValues -join '_'
    $executionName = $executionName -replace "[\s()\\:*-+/{}```"']", '_'

    (Get-DscSplattedResource -ResourceName $dscResourceName -ExecutionName $executionName -Properties $param -NoInvoke).Invoke($param)

}