Public/Components/Components.ps1

function New-NmeADObjectRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeADObjectRestModel, for use in other Nme module commands

    .PARAMETER ObjectId

    The GUID of an Azure AD object (user, group, or service principal) to which this RBAC role is assigned

    .PARAMETER ObjectType

    string. Valid values are: User, Group

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$ObjectId,
        [Parameter(Mandatory=$true)][ValidateSet("User","Group")][string]$ObjectType
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ObjectId")){ $PropertyHash += @{ObjectId = $ObjectId} }
    if ($PSBoundParameters.containskey("ObjectType")){ $PropertyHash += @{ObjectType = $ObjectType} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeADObjectRestModel')
    Return $ReturnObject    
}
function New-NmeActiveSessionsConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeActiveSessionsConfiguration, for use in other Nme module commands

    .PARAMETER ScaleOut

    An object of type NmeHostChange. Can be created using New-NmeHostChange

    .PARAMETER ScaleIn

    An object of type NmeHostChange. Can be created using New-NmeHostChange

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostChange"){$true} else{throw "$_ is not a NmeHostChange object. Use New-NmeHostChange to create before calling this function"}})][psobject]$ScaleOut,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostChange"){$true} else{throw "$_ is not a NmeHostChange object. Use New-NmeHostChange to create before calling this function"}})][psobject]$ScaleIn
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ScaleOut")){ $PropertyHash += @{ScaleOut = $ScaleOut} }
    if ($PSBoundParameters.containskey("ScaleIn")){ $PropertyHash += @{ScaleIn = $ScaleIn} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeActiveSessionsConfiguration')
    Return $ReturnObject    
}
function New-NmeAdConfigRestProperties {
    <#

    .SYNOPSIS

    Creates an object of type NmeAdConfigRestProperties, for use in other Nme module commands

    .PARAMETER FriendlyName

    string.

    .PARAMETER AdIdentityType

    string. Valid values are: AD, AzureAD, AzureADDS

    .PARAMETER Domain

    string.

    .PARAMETER Username

    Username of assigned user

    .PARAMETER OrganizationUnit

    string.

    .PARAMETER EnrollWithIntune

    boolean. Specify -EnrollWithIntune $True or -EnrollWithIntune $False.

    #>

    [cmdletbinding()]
    Param(
        [string]$FriendlyName,
        [ValidateSet("AD","AzureAD","AzureADDS")][string]$AdIdentityType,
        [string]$Domain,
        [string]$Username,
        [string]$OrganizationUnit,
        [bool]$EnrollWithIntune
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("AdIdentityType")){ $PropertyHash += @{AdIdentityType = $AdIdentityType} }
    if ($PSBoundParameters.containskey("Domain")){ $PropertyHash += @{Domain = $Domain} }
    if ($PSBoundParameters.containskey("Username")){ $PropertyHash += @{Username = $Username} }
    if ($PSBoundParameters.containskey("OrganizationUnit")){ $PropertyHash += @{OrganizationUnit = $OrganizationUnit} }
    if ($PSBoundParameters.containskey("EnrollWithIntune")){ $PropertyHash += @{EnrollWithIntune = $EnrollWithIntune} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAdConfigRestProperties')
    Return $ReturnObject    
}
function New-NmeAdConfigRestPropertiesWithPassword {
    <#

    .SYNOPSIS

    Creates an object of type NmeAdConfigRestPropertiesWithPassword, for use in other Nme module commands

    .PARAMETER FriendlyName

    string.

    .PARAMETER AdIdentityType

    string. Valid values are: AD, AzureAD, AzureADDS

    .PARAMETER Domain

    string.

    .PARAMETER Username

    Username of assigned user

    .PARAMETER OrganizationUnit

    string.

    .PARAMETER EnrollWithIntune

    boolean. Specify -EnrollWithIntune $True or -EnrollWithIntune $False.

    .PARAMETER Password

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$FriendlyName,
        [ValidateSet("AD","AzureAD","AzureADDS")][string]$AdIdentityType,
        [string]$Domain,
        [string]$Username,
        [string]$OrganizationUnit,
        [bool]$EnrollWithIntune,
        [SecureString]$Password
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("AdIdentityType")){ $PropertyHash += @{AdIdentityType = $AdIdentityType} }
    if ($PSBoundParameters.containskey("Domain")){ $PropertyHash += @{Domain = $Domain} }
    if ($PSBoundParameters.containskey("Username")){ $PropertyHash += @{Username = $Username} }
    if ($PSBoundParameters.containskey("OrganizationUnit")){ $PropertyHash += @{OrganizationUnit = $OrganizationUnit} }
    if ($PSBoundParameters.containskey("EnrollWithIntune")){ $PropertyHash += @{EnrollWithIntune = $EnrollWithIntune} }
    if ($PSBoundParameters.containskey("Password")){ $PropertyHash += @{Password = $(ConvertFrom-SecureString -SecureString $Password -AsPlainText)} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAdConfigRestPropertiesWithPassword')
    Return $ReturnObject    
}
function New-NmeAdConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeAdConfiguration, for use in other Nme module commands

    .PARAMETER FriendlyName

    string.

    .PARAMETER AdIdentityType

    string. Valid values are: AD, AzureAD, AzureADDS

    .PARAMETER Domain

    string.

    .PARAMETER Username

    Username of assigned user

    .PARAMETER OrganizationUnit

    string.

    .PARAMETER EnrollWithIntune

    boolean. Specify -EnrollWithIntune $True or -EnrollWithIntune $False.

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER IsDefault

    boolean. Specify -IsDefault $True or -IsDefault $False.

    #>

    [cmdletbinding()]
    Param(
        [string]$FriendlyName,
        [ValidateSet("AD","AzureAD","AzureADDS")][string]$AdIdentityType,
        [string]$Domain,
        [string]$Username,
        [string]$OrganizationUnit,
        [bool]$EnrollWithIntune,
        [int]$Id,
        [bool]$IsDefault
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("AdIdentityType")){ $PropertyHash += @{AdIdentityType = $AdIdentityType} }
    if ($PSBoundParameters.containskey("Domain")){ $PropertyHash += @{Domain = $Domain} }
    if ($PSBoundParameters.containskey("Username")){ $PropertyHash += @{Username = $Username} }
    if ($PSBoundParameters.containskey("OrganizationUnit")){ $PropertyHash += @{OrganizationUnit = $OrganizationUnit} }
    if ($PSBoundParameters.containskey("EnrollWithIntune")){ $PropertyHash += @{EnrollWithIntune = $EnrollWithIntune} }
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("IsDefault")){ $PropertyHash += @{IsDefault = $IsDefault} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAdConfiguration')
    Return $ReturnObject    
}
function New-NmeAppAttachImageRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeAppAttachImageRestModel, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER StorageLocationId

    string.

    .PARAMETER CreationDate

    string.

    .PARAMETER Name

    The name of the resource

    .PARAMETER Description

    string.

    .PARAMETER CurrentVersion

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$Id,
        [string]$StorageLocationId,
        [string]$CreationDate,
        [string]$Name,
        [string]$Description,
        [string]$CurrentVersion
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("StorageLocationId")){ $PropertyHash += @{StorageLocationId = $StorageLocationId} }
    if ($PSBoundParameters.containskey("CreationDate")){ $PropertyHash += @{CreationDate = $CreationDate} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("CurrentVersion")){ $PropertyHash += @{CurrentVersion = $CurrentVersion} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAppAttachImageRestModel')
    Return $ReturnObject    
}
function New-NmeAppAttachImageRestPatchRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeAppAttachImageRestPatchRequest, for use in other Nme module commands

    .PARAMETER ImageName

    string.

    .PARAMETER Description

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$ImageName,
        [string]$Description
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ImageName")){ $PropertyHash += @{ImageName = $ImageName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAppAttachImageRestPatchRequest')
    Return $ReturnObject    
}
function New-NmeAppAttachImageRestPostRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeAppAttachImageRestPostRequest, for use in other Nme module commands

    .PARAMETER LocationId

    string.

    .PARAMETER ImageName

    string.

    .PARAMETER Description

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$LocationId,
        [Parameter(Mandatory=$true)][string]$ImageName,
        [string]$Description
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("LocationId")){ $PropertyHash += @{LocationId = $LocationId} }
    if ($PSBoundParameters.containskey("ImageName")){ $PropertyHash += @{ImageName = $ImageName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAppAttachImageRestPostRequest')
    Return $ReturnObject    
}
function New-NmeAppAttachImageVersionRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeAppAttachImageVersionRestModel, for use in other Nme module commands

    .PARAMETER Name

    The name of the resource

    .PARAMETER Size

    integer.

    .PARAMETER ImagePath

    string.

    .PARAMETER CreationDate

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$Name,
        [int]$Size,
        [string]$ImagePath,
        [string]$CreationDate
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Size")){ $PropertyHash += @{Size = $Size} }
    if ($PSBoundParameters.containskey("ImagePath")){ $PropertyHash += @{ImagePath = $ImagePath} }
    if ($PSBoundParameters.containskey("CreationDate")){ $PropertyHash += @{CreationDate = $CreationDate} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAppAttachImageVersionRestModel')
    Return $ReturnObject    
}
function New-NmeAppAttachImageVersionRestPostRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeAppAttachImageVersionRestPostRequest, for use in other Nme module commands

    .PARAMETER Version

    string.

    .PARAMETER PackageLink

    string.

    .PARAMETER Extension

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$Version,
        [Parameter(Mandatory=$true)][string]$PackageLink,
        [string]$Extension
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Version")){ $PropertyHash += @{Version = $Version} }
    if ($PSBoundParameters.containskey("PackageLink")){ $PropertyHash += @{PackageLink = $PackageLink} }
    if ($PSBoundParameters.containskey("Extension")){ $PropertyHash += @{Extension = $Extension} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAppAttachImageVersionRestPostRequest')
    Return $ReturnObject    
}
function New-NmeArmHostPoolAssignmentRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmHostPoolAssignmentRequest, for use in other Nme module commands

    .PARAMETER Users

    array.

    .PARAMETER Groups

    array.

    .PARAMETER AppGroups

    array.

    #>

    [cmdletbinding()]
    Param(
        [string[]]$Users,
        [string[]]$Groups,
        [string[]]$AppGroups
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Users")){ $PropertyHash += @{Users = $Users} }
    if ($PSBoundParameters.containskey("Groups")){ $PropertyHash += @{Groups = $Groups} }
    if ($PSBoundParameters.containskey("AppGroups")){ $PropertyHash += @{AppGroups = $AppGroups} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmHostPoolAssignmentRequest')
    Return $ReturnObject    
}
function New-NmeArmHostPoolPropertiesRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmHostPoolPropertiesRestModel, for use in other Nme module commands

    .PARAMETER FriendlyName

    string.

    .PARAMETER Description

    string.

    .PARAMETER LoadBalancerType

    string. Valid values are: BreadthFirst, DepthFirst, Persistent

    .PARAMETER MaxSessionLimit

    integer.

    .PARAMETER ValidationEnv

    boolean. Specify -ValidationEnv $True or -ValidationEnv $False.

    .PARAMETER PowerOnPooledHosts

    boolean. Specify -PowerOnPooledHosts $True or -PowerOnPooledHosts $False. Allow end users power on host in a pooled host pool

    .PARAMETER StartVMOnConnect

    boolean. Specify -StartVMOnConnect $True or -StartVMOnConnect $False. Auto-start host on connect

    .PARAMETER AgentUpdate

    An object of type NmeAvdAgentUpdateRestModel. Can be created using New-NmeAvdAgentUpdateRestModel

    #>

    [cmdletbinding()]
    Param(
        [string]$FriendlyName,
        [string]$Description,
        [ValidateSet("BreadthFirst","DepthFirst","Persistent")][string]$LoadBalancerType,
        [int]$MaxSessionLimit,
        [bool]$ValidationEnv,
        [bool]$PowerOnPooledHosts,
        [bool]$StartVMOnConnect,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAvdAgentUpdateRestModel"){$true} else{throw "$_ is not a NmeAvdAgentUpdateRestModel object. Use New-NmeAvdAgentUpdateRestModel to create before calling this function"}})][psobject]$AgentUpdate
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("LoadBalancerType")){ $PropertyHash += @{LoadBalancerType = $LoadBalancerType} }
    if ($PSBoundParameters.containskey("MaxSessionLimit")){ $PropertyHash += @{MaxSessionLimit = $MaxSessionLimit} }
    if ($PSBoundParameters.containskey("ValidationEnv")){ $PropertyHash += @{ValidationEnv = $ValidationEnv} }
    if ($PSBoundParameters.containskey("PowerOnPooledHosts")){ $PropertyHash += @{PowerOnPooledHosts = $PowerOnPooledHosts} }
    if ($PSBoundParameters.containskey("StartVMOnConnect")){ $PropertyHash += @{StartVMOnConnect = $StartVMOnConnect} }
    if ($PSBoundParameters.containskey("AgentUpdate")){ $PropertyHash += @{AgentUpdate = $AgentUpdate} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmHostPoolPropertiesRestModel')
    Return $ReturnObject    
}
function New-NmeArmHostpool {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmHostpool, for use in other Nme module commands

    .PARAMETER DynamicPoolConfig

    An object of type NmeDynamicPoolConfig. Can be created using New-NmeDynamicPoolConfig

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER SubscriptionName

    string.

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeDynamicPoolConfig"){$true} else{throw "$_ is not a NmeDynamicPoolConfig object. Use New-NmeDynamicPoolConfig to create before calling this function"}})][psobject]$DynamicPoolConfig,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeArmHostpoolId"){$true} else{throw "$_ is not a NmeArmHostpoolId object. Use New-NmeArmHostpoolId to create before calling this function"}})][psobject]$Id,
        [string]$SubscriptionName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("DynamicPoolConfig")){ $PropertyHash += @{DynamicPoolConfig = $DynamicPoolConfig} }
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("SubscriptionName")){ $PropertyHash += @{SubscriptionName = $SubscriptionName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmHostpool')
    Return $ReturnObject    
}
function New-NmeArmHostpoolId {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmHostpoolId, for use in other Nme module commands

    .PARAMETER Subscription

    string.

    .PARAMETER ResourceGroup

    The Azure resource group where the resource resides

    .PARAMETER HostpoolName

    The name of the Host Pool

    #>

    [cmdletbinding()]
    Param(
        [string]$Subscription,
        [string]$ResourceGroup,
        [string]$HostpoolName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Subscription")){ $PropertyHash += @{Subscription = $Subscription} }
    if ($PSBoundParameters.containskey("ResourceGroup")){ $PropertyHash += @{ResourceGroup = $ResourceGroup} }
    if ($PSBoundParameters.containskey("HostpoolName")){ $PropertyHash += @{HostpoolName = $HostpoolName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmHostpoolId')
    Return $ReturnObject    
}
function New-NmeArmSession {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmSession, for use in other Nme module commands

    .PARAMETER SessionId

    The session id

    .PARAMETER SessionState

    string.

    .PARAMETER Username

    Username of assigned user

    .PARAMETER HostName

    Name of AVD host

    .PARAMETER Hostpool

    An object of type NmeArmHostpoolId. Can be created using New-NmeArmHostpoolId

    #>

    [cmdletbinding()]
    Param(
        [string]$SessionId,
        [string]$SessionState,
        [string]$Username,
        [string]$HostName,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeArmHostpoolId"){$true} else{throw "$_ is not a NmeArmHostpoolId object. Use New-NmeArmHostpoolId to create before calling this function"}})][psobject]$Hostpool
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SessionId")){ $PropertyHash += @{SessionId = $SessionId} }
    if ($PSBoundParameters.containskey("SessionState")){ $PropertyHash += @{SessionState = $SessionState} }
    if ($PSBoundParameters.containskey("Username")){ $PropertyHash += @{Username = $Username} }
    if ($PSBoundParameters.containskey("HostName")){ $PropertyHash += @{HostName = $HostName} }
    if ($PSBoundParameters.containskey("Hostpool")){ $PropertyHash += @{Hostpool = $Hostpool} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmSession')
    Return $ReturnObject    
}
function New-NmeArmSessionHost {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmSessionHost, for use in other Nme module commands

    .PARAMETER HostName

    Name of AVD host

    .PARAMETER AssignedUser

    string.

    .PARAMETER VmId

    string.

    .PARAMETER PowerState

    string.

    .PARAMETER Status

    string. Valid values are: Available, Unavailable, Shutdown, Disconnected, Upgrading, UpgradeFailed, NoHeartbeat, NotJoinedToDomain, DomainTrustRelationshipLost, SxSStackListenerNotReady, FSLogixNotHealthy, NeedsAssistance

    .PARAMETER Hostpool

    An object of type NmeArmHostpoolId. Can be created using New-NmeArmHostpoolId

    #>

    [cmdletbinding()]
    Param(
        [string]$HostName,
        [string]$AssignedUser,
        [string]$VmId,
        [string]$PowerState,
        [ValidateSet("Available","Unavailable","Shutdown","Disconnected","Upgrading","UpgradeFailed","NoHeartbeat","NotJoinedToDomain","DomainTrustRelationshipLost","SxSStackListenerNotReady","FSLogixNotHealthy","NeedsAssistance")][string]$Status,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeArmHostpoolId"){$true} else{throw "$_ is not a NmeArmHostpoolId object. Use New-NmeArmHostpoolId to create before calling this function"}})][psobject]$Hostpool
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("HostName")){ $PropertyHash += @{HostName = $HostName} }
    if ($PSBoundParameters.containskey("AssignedUser")){ $PropertyHash += @{AssignedUser = $AssignedUser} }
    if ($PSBoundParameters.containskey("VmId")){ $PropertyHash += @{VmId = $VmId} }
    if ($PSBoundParameters.containskey("PowerState")){ $PropertyHash += @{PowerState = $PowerState} }
    if ($PSBoundParameters.containskey("Status")){ $PropertyHash += @{Status = $Status} }
    if ($PSBoundParameters.containskey("Hostpool")){ $PropertyHash += @{Hostpool = $Hostpool} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmSessionHost')
    Return $ReturnObject    
}
function New-NmeArmWorkspace {
    <#

    .SYNOPSIS

    Creates an object of type NmeArmWorkspace, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER Location

    string.

    .PARAMETER FriendlyName

    string.

    .PARAMETER Description

    string.

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeWvdObjectId"){$true} else{throw "$_ is not a NmeWvdObjectId object. Use New-NmeWvdObjectId to create before calling this function"}})][psobject]$Id,
        [string]$Location,
        [string]$FriendlyName,
        [string]$Description
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("Location")){ $PropertyHash += @{Location = $Location} }
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeArmWorkspace')
    Return $ReturnObject    
}
function New-NmeAutoHealAction {
    <#

    .SYNOPSIS

    Creates an object of type NmeAutoHealAction, for use in other Nme module commands

    .PARAMETER Type

    string. Valid values are: RestartVm, ScriptedAction, RemoveVm

    .PARAMETER ScriptedActionId

    integer.

    #>

    [cmdletbinding()]
    Param(
        [ValidateSet("RestartVm","ScriptedAction","RemoveVm")][string]$Type,
        [int]$ScriptedActionId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("ScriptedActionId")){ $PropertyHash += @{ScriptedActionId = $ScriptedActionId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAutoHealAction')
    Return $ReturnObject    
}
function New-NmeAutoHealConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeAutoHealConfiguration, for use in other Nme module commands

    .PARAMETER Enable

    boolean. Specify -Enable $True or -Enable $False.

    .PARAMETER Config

    An object of type NmeAutoHealConfigurationItem. Can be created using New-NmeAutoHealConfigurationItem

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enable,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAutoHealConfigurationItem"){$true} else{throw "$_ is not a NmeAutoHealConfigurationItem object. Use New-NmeAutoHealConfigurationItem to create before calling this function"}})][psobject]$Config
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enable")){ $PropertyHash += @{Enable = $Enable} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAutoHealConfiguration')
    Return $ReturnObject    
}
function New-NmeAutoHealConfigurationItem {
    <#

    .SYNOPSIS

    Creates an object of type NmeAutoHealConfigurationItem, for use in other Nme module commands

    .PARAMETER WvdStatuses

    string. Valid values are: Available, Unavailable, Shutdown, Disconnected, Upgrading, UpgradeFailed, NoHeartbeat, NotJoinedToDomain, DomainTrustRelationshipLost, SxSStackListenerNotReady, FSLogixNotHealthy, NeedsAssistance

    .PARAMETER SessionCriteria

    string. Valid values are: WithoutSessions, WithoutActive, WithActive

    .PARAMETER StaleHeartbeatMinutes

    integer.

    .PARAMETER RestartAttempts

    DEPRECATED

    .PARAMETER WaitMinutesBeforeFirstAction

    integer.

    .PARAMETER WaitMinutes

    integer.

    .PARAMETER FinalAction

    DEPRECATED

    .PARAMETER Actions

    An array of objects of type NmeAutoHealAction. Can be created using New-NmeAutoHealAction

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("Available","Unavailable","Shutdown","Disconnected","Upgrading","UpgradeFailed","NoHeartbeat","NotJoinedToDomain","DomainTrustRelationshipLost","SxSStackListenerNotReady","FSLogixNotHealthy","NeedsAssistance")][String]$WvdStatuses,
        [Parameter(Mandatory=$true)][ValidateSet("WithoutSessions","WithoutActive","WithActive")][string]$SessionCriteria,
        [int]$StaleHeartbeatMinutes,
        [int]$RestartAttempts,
        [int]$WaitMinutesBeforeFirstAction,
        [Parameter(Mandatory=$true)][int]$WaitMinutes,
        [string]$FinalAction,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeAutoHealAction"})]$Actions
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("WvdStatuses")){ $PropertyHash += @{WvdStatuses = $WvdStatuses} }
    if ($PSBoundParameters.containskey("SessionCriteria")){ $PropertyHash += @{SessionCriteria = $SessionCriteria} }
    if ($PSBoundParameters.containskey("StaleHeartbeatMinutes")){ $PropertyHash += @{StaleHeartbeatMinutes = $StaleHeartbeatMinutes} }
    if ($PSBoundParameters.containskey("RestartAttempts")){ $PropertyHash += @{RestartAttempts = $RestartAttempts} }
    if ($PSBoundParameters.containskey("WaitMinutesBeforeFirstAction")){ $PropertyHash += @{WaitMinutesBeforeFirstAction = $WaitMinutesBeforeFirstAction} }
    if ($PSBoundParameters.containskey("WaitMinutes")){ $PropertyHash += @{WaitMinutes = $WaitMinutes} }
    if ($PSBoundParameters.containskey("FinalAction")){ $PropertyHash += @{FinalAction = $FinalAction} }
    if ($PSBoundParameters.containskey("Actions")){ $PropertyHash += @{Actions = $Actions} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAutoHealConfigurationItem')
    Return $ReturnObject    
}
function New-NmeAvailableUserSessionsConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeAvailableUserSessionsConfiguration, for use in other Nme module commands

    .PARAMETER MaxSessionsPerHost

    DEPRECATED

    .PARAMETER MinAvailableUserSessions

    integer.

    .PARAMETER MaxAvailableUserSessions

    integer.

    .PARAMETER AvailableSessionRestriction

    string. Valid values are: Always, DuringWorkHours

    .PARAMETER OutsideWorkHoursSessions

    integer.

    #>

    [cmdletbinding()]
    Param(
        [int]$MaxSessionsPerHost,
        [Parameter(Mandatory=$true)][int]$MinAvailableUserSessions,
        [Parameter(Mandatory=$true)][int]$MaxAvailableUserSessions,
        [Parameter(Mandatory=$true)][ValidateSet("Always","DuringWorkHours")][string]$AvailableSessionRestriction,
        [int]$OutsideWorkHoursSessions
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("MaxSessionsPerHost")){ $PropertyHash += @{MaxSessionsPerHost = $MaxSessionsPerHost} }
    if ($PSBoundParameters.containskey("MinAvailableUserSessions")){ $PropertyHash += @{MinAvailableUserSessions = $MinAvailableUserSessions} }
    if ($PSBoundParameters.containskey("MaxAvailableUserSessions")){ $PropertyHash += @{MaxAvailableUserSessions = $MaxAvailableUserSessions} }
    if ($PSBoundParameters.containskey("AvailableSessionRestriction")){ $PropertyHash += @{AvailableSessionRestriction = $AvailableSessionRestriction} }
    if ($PSBoundParameters.containskey("OutsideWorkHoursSessions")){ $PropertyHash += @{OutsideWorkHoursSessions = $OutsideWorkHoursSessions} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAvailableUserSessionsConfiguration')
    Return $ReturnObject    
}
function New-NmeAvdAgentUpdateRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeAvdAgentUpdateRestModel, for use in other Nme module commands

    .PARAMETER MaintenanceWindowTimeZone

    string.

    .PARAMETER PrimaryWindow

    An object of type NmeMaintenanceWindowRestModel. Can be created using New-NmeMaintenanceWindowRestModel

    .PARAMETER SecondaryWindow

    An object of type NmeMaintenanceWindowRestModel. Can be created using New-NmeMaintenanceWindowRestModel

    .PARAMETER UseSessionHostLocalTime

    boolean. Specify -UseSessionHostLocalTime $True or -UseSessionHostLocalTime $False.

    .PARAMETER Type

    string. Valid values are: Default, Scheduled

    .PARAMETER PowerOnHostsInMaintenanceWindow

    boolean. Specify -PowerOnHostsInMaintenanceWindow $True or -PowerOnHostsInMaintenanceWindow $False.

    #>

    [cmdletbinding()]
    Param(
        [string]$MaintenanceWindowTimeZone,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeMaintenanceWindowRestModel"){$true} else{throw "$_ is not a NmeMaintenanceWindowRestModel object. Use New-NmeMaintenanceWindowRestModel to create before calling this function"}})][psobject]$PrimaryWindow,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeMaintenanceWindowRestModel"){$true} else{throw "$_ is not a NmeMaintenanceWindowRestModel object. Use New-NmeMaintenanceWindowRestModel to create before calling this function"}})][psobject]$SecondaryWindow,
        [bool]$UseSessionHostLocalTime,
        [ValidateSet("Default","Scheduled")][string]$Type,
        [bool]$PowerOnHostsInMaintenanceWindow
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("MaintenanceWindowTimeZone")){ $PropertyHash += @{MaintenanceWindowTimeZone = $MaintenanceWindowTimeZone} }
    if ($PSBoundParameters.containskey("PrimaryWindow")){ $PropertyHash += @{PrimaryWindow = $PrimaryWindow} }
    if ($PSBoundParameters.containskey("SecondaryWindow")){ $PropertyHash += @{SecondaryWindow = $SecondaryWindow} }
    if ($PSBoundParameters.containskey("UseSessionHostLocalTime")){ $PropertyHash += @{UseSessionHostLocalTime = $UseSessionHostLocalTime} }
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("PowerOnHostsInMaintenanceWindow")){ $PropertyHash += @{PowerOnHostsInMaintenanceWindow = $PowerOnHostsInMaintenanceWindow} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAvdAgentUpdateRestModel')
    Return $ReturnObject    
}
function New-NmeAzureFilesAutoscaleConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeAzureFilesAutoscaleConfig, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER Unit

    string. Valid values are: Percent, SizeGb, SizeTb

    .PARAMETER Basic

    An object of type NmeAzureFilesBasicAutoscaleConfig. Can be created using New-NmeAzureFilesBasicAutoscaleConfig

    .PARAMETER Scaling

    An object of type NmeAzureFilesScalingRestConfig. Can be created using New-NmeAzureFilesScalingRestConfig

    .PARAMETER PreStage

    An object of type NmeAzureFilesPreStageConfig. Can be created using New-NmeAzureFilesPreStageConfig

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [Parameter(Mandatory=$true)][ValidateSet("Percent","SizeGb","SizeTb")][string]$Unit,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAzureFilesBasicAutoscaleConfig"){$true} else{throw "$_ is not a NmeAzureFilesBasicAutoscaleConfig object. Use New-NmeAzureFilesBasicAutoscaleConfig to create before calling this function"}})][psobject]$Basic,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAzureFilesScalingRestConfig"){$true} else{throw "$_ is not a NmeAzureFilesScalingRestConfig object. Use New-NmeAzureFilesScalingRestConfig to create before calling this function"}})][psobject]$Scaling,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAzureFilesPreStageConfig"){$true} else{throw "$_ is not a NmeAzureFilesPreStageConfig object. Use New-NmeAzureFilesPreStageConfig to create before calling this function"}})][psobject]$PreStage
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("Unit")){ $PropertyHash += @{Unit = $Unit} }
    if ($PSBoundParameters.containskey("Basic")){ $PropertyHash += @{Basic = $Basic} }
    if ($PSBoundParameters.containskey("Scaling")){ $PropertyHash += @{Scaling = $Scaling} }
    if ($PSBoundParameters.containskey("PreStage")){ $PropertyHash += @{PreStage = $PreStage} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAzureFilesAutoscaleConfig')
    Return $ReturnObject    
}
function New-NmeAzureFilesBasicAutoscaleConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeAzureFilesBasicAutoscaleConfig, for use in other Nme module commands

    .PARAMETER MinQuotaBuffer

    integer.

    .PARAMETER MaxQuotaBuffer

    integer.

    .PARAMETER MaxQuotaLimitGb

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$MinQuotaBuffer,
        [Parameter(Mandatory=$true)][int]$MaxQuotaBuffer,
        [Parameter(Mandatory=$true)][int]$MaxQuotaLimitGb
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("MinQuotaBuffer")){ $PropertyHash += @{MinQuotaBuffer = $MinQuotaBuffer} }
    if ($PSBoundParameters.containskey("MaxQuotaBuffer")){ $PropertyHash += @{MaxQuotaBuffer = $MaxQuotaBuffer} }
    if ($PSBoundParameters.containskey("MaxQuotaLimitGb")){ $PropertyHash += @{MaxQuotaLimitGb = $MaxQuotaLimitGb} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAzureFilesBasicAutoscaleConfig')
    Return $ReturnObject    
}
function New-NmeAzureFilesPreStageConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeAzureFilesPreStageConfig, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER WorkDays

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER TimezoneId

    string.

    .PARAMETER QuotaBuffer

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [ValidateSet(0,1,2,3,4,5,6)][Int]$WorkDays,
        [string]$TimezoneId,
        [int]$QuotaBuffer
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("WorkDays")){ $PropertyHash += @{WorkDays = $WorkDays} }
    if ($PSBoundParameters.containskey("TimezoneId")){ $PropertyHash += @{TimezoneId = $TimezoneId} }
    if ($PSBoundParameters.containskey("QuotaBuffer")){ $PropertyHash += @{QuotaBuffer = $QuotaBuffer} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAzureFilesPreStageConfig')
    Return $ReturnObject    
}
function New-NmeAzureFilesScalingRestConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeAzureFilesScalingRestConfig, for use in other Nme module commands

    .PARAMETER Trigger

    string. Valid values are: MaxSuccessServerLatency, AvgSuccessServerLatency

    .PARAMETER ScaleOutBy

    integer.

    .PARAMETER ScaleOutHighLatency

    integer.

    .PARAMETER ScaleOutInterval

    integer.

    .PARAMETER ScaleInBy

    integer.

    .PARAMETER ScaleInLowLatency

    integer.

    .PARAMETER ScaleInInterval

    integer.

    .PARAMETER TransactionThreshold

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("MaxSuccessServerLatency","AvgSuccessServerLatency")][string]$Trigger,
        [Parameter(Mandatory=$true)][int]$ScaleOutBy,
        [Parameter(Mandatory=$true)][int]$ScaleOutHighLatency,
        [Parameter(Mandatory=$true)][int]$ScaleOutInterval,
        [Parameter(Mandatory=$true)][int]$ScaleInBy,
        [Parameter(Mandatory=$true)][int]$ScaleInLowLatency,
        [Parameter(Mandatory=$true)][int]$ScaleInInterval,
        [Parameter(Mandatory=$true)][int]$TransactionThreshold
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Trigger")){ $PropertyHash += @{Trigger = $Trigger} }
    if ($PSBoundParameters.containskey("ScaleOutBy")){ $PropertyHash += @{ScaleOutBy = $ScaleOutBy} }
    if ($PSBoundParameters.containskey("ScaleOutHighLatency")){ $PropertyHash += @{ScaleOutHighLatency = $ScaleOutHighLatency} }
    if ($PSBoundParameters.containskey("ScaleOutInterval")){ $PropertyHash += @{ScaleOutInterval = $ScaleOutInterval} }
    if ($PSBoundParameters.containskey("ScaleInBy")){ $PropertyHash += @{ScaleInBy = $ScaleInBy} }
    if ($PSBoundParameters.containskey("ScaleInLowLatency")){ $PropertyHash += @{ScaleInLowLatency = $ScaleInLowLatency} }
    if ($PSBoundParameters.containskey("ScaleInInterval")){ $PropertyHash += @{ScaleInInterval = $ScaleInInterval} }
    if ($PSBoundParameters.containskey("TransactionThreshold")){ $PropertyHash += @{TransactionThreshold = $TransactionThreshold} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeAzureFilesScalingRestConfig')
    Return $ReturnObject    
}
function New-NmeBulkJobParamsWithLogOffAggresiveness {
    <#

    .SYNOPSIS

    Creates an object of type NmeBulkJobParamsWithLogOffAggresiveness, for use in other Nme module commands

    .PARAMETER TaskParallelism

    integer.

    .PARAMETER CountFailedTaskToStopWork

    integer.

    .PARAMETER MinutesBeforeRemove

    integer.

    .PARAMETER Message

    string.

    .PARAMETER DeactivateBeforeOperation

    boolean. Specify -DeactivateBeforeOperation $True or -DeactivateBeforeOperation $False.

    .PARAMETER LogOffAggressiveness

    string. Valid values are: Force, Wait

    .PARAMETER GlobalTimeoutInMinutes

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$TaskParallelism,
        [Parameter(Mandatory=$true)][int]$CountFailedTaskToStopWork,
        [int]$MinutesBeforeRemove,
        [string]$Message,
        [bool]$DeactivateBeforeOperation,
        [ValidateSet("Force","Wait")][string]$LogOffAggressiveness,
        [int]$GlobalTimeoutInMinutes
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TaskParallelism")){ $PropertyHash += @{TaskParallelism = $TaskParallelism} }
    if ($PSBoundParameters.containskey("CountFailedTaskToStopWork")){ $PropertyHash += @{CountFailedTaskToStopWork = $CountFailedTaskToStopWork} }
    if ($PSBoundParameters.containskey("MinutesBeforeRemove")){ $PropertyHash += @{MinutesBeforeRemove = $MinutesBeforeRemove} }
    if ($PSBoundParameters.containskey("Message")){ $PropertyHash += @{Message = $Message} }
    if ($PSBoundParameters.containskey("DeactivateBeforeOperation")){ $PropertyHash += @{DeactivateBeforeOperation = $DeactivateBeforeOperation} }
    if ($PSBoundParameters.containskey("LogOffAggressiveness")){ $PropertyHash += @{LogOffAggressiveness = $LogOffAggressiveness} }
    if ($PSBoundParameters.containskey("GlobalTimeoutInMinutes")){ $PropertyHash += @{GlobalTimeoutInMinutes = $GlobalTimeoutInMinutes} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeBulkJobParamsWithLogOffAggresiveness')
    Return $ReturnObject    
}
function New-NmeBulkJobParamsWithRestart {
    <#

    .SYNOPSIS

    Creates an object of type NmeBulkJobParamsWithRestart, for use in other Nme module commands

    .PARAMETER TaskParallelism

    integer.

    .PARAMETER CountFailedTaskToStopWork

    integer.

    .PARAMETER MinutesBeforeRemove

    integer.

    .PARAMETER Message

    string.

    .PARAMETER RestartVms

    boolean. Specify -RestartVms $True or -RestartVms $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$TaskParallelism,
        [Parameter(Mandatory=$true)][int]$CountFailedTaskToStopWork,
        [int]$MinutesBeforeRemove,
        [string]$Message,
        [bool]$RestartVms
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TaskParallelism")){ $PropertyHash += @{TaskParallelism = $TaskParallelism} }
    if ($PSBoundParameters.containskey("CountFailedTaskToStopWork")){ $PropertyHash += @{CountFailedTaskToStopWork = $CountFailedTaskToStopWork} }
    if ($PSBoundParameters.containskey("MinutesBeforeRemove")){ $PropertyHash += @{MinutesBeforeRemove = $MinutesBeforeRemove} }
    if ($PSBoundParameters.containskey("Message")){ $PropertyHash += @{Message = $Message} }
    if ($PSBoundParameters.containskey("RestartVms")){ $PropertyHash += @{RestartVms = $RestartVms} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeBulkJobParamsWithRestart')
    Return $ReturnObject    
}
function New-NmeBulkJobParamsWithRestartAndHosts {
    <#

    .SYNOPSIS

    Creates an object of type NmeBulkJobParamsWithRestartAndHosts, for use in other Nme module commands

    .PARAMETER TaskParallelism

    integer.

    .PARAMETER CountFailedTaskToStopWork

    integer.

    .PARAMETER MinutesBeforeRemove

    integer.

    .PARAMETER Message

    string.

    .PARAMETER RestartVms

    boolean. Specify -RestartVms $True or -RestartVms $False.

    .PARAMETER SessionHostsToProcessNames

    array.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$TaskParallelism,
        [Parameter(Mandatory=$true)][int]$CountFailedTaskToStopWork,
        [int]$MinutesBeforeRemove,
        [string]$Message,
        [bool]$RestartVms,
        [string[]]$SessionHostsToProcessNames
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TaskParallelism")){ $PropertyHash += @{TaskParallelism = $TaskParallelism} }
    if ($PSBoundParameters.containskey("CountFailedTaskToStopWork")){ $PropertyHash += @{CountFailedTaskToStopWork = $CountFailedTaskToStopWork} }
    if ($PSBoundParameters.containskey("MinutesBeforeRemove")){ $PropertyHash += @{MinutesBeforeRemove = $MinutesBeforeRemove} }
    if ($PSBoundParameters.containskey("Message")){ $PropertyHash += @{Message = $Message} }
    if ($PSBoundParameters.containskey("RestartVms")){ $PropertyHash += @{RestartVms = $RestartVms} }
    if ($PSBoundParameters.containskey("SessionHostsToProcessNames")){ $PropertyHash += @{SessionHostsToProcessNames = $SessionHostsToProcessNames} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeBulkJobParamsWithRestartAndHosts')
    Return $ReturnObject    
}
function New-NmeCreateArmHostPoolRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateArmHostPoolRequest, for use in other Nme module commands

    .PARAMETER WorkspaceId

    Azure resource ID of AVD workspace. E.g.: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/your-resource-group-name/providers/Microsoft.DesktopVirtualization/workspaces/your-workspace-name

    .PARAMETER PooledParams

    An object of type NmePooledParams. Can be created using New-NmePooledParams

    .PARAMETER PersonalParams

    An object of type NmePersonalParams. Can be created using New-NmePersonalParams

    .PARAMETER Description

    string.

    .PARAMETER Tags

    object.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeWvdObjectId"){$true} else{throw "$_ is not a NmeWvdObjectId object. Use New-NmeWvdObjectId to create before calling this function"}})][psobject]$WorkspaceId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmePooledParams"){$true} else{throw "$_ is not a NmePooledParams object. Use New-NmePooledParams to create before calling this function"}})][psobject]$PooledParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmePersonalParams"){$true} else{throw "$_ is not a NmePersonalParams object. Use New-NmePersonalParams to create before calling this function"}})][psobject]$PersonalParams,
        [string]$Description,
        [hashtable]$Tags
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("WorkspaceId")){ $PropertyHash += @{WorkspaceId = $WorkspaceId} }
    if ($PSBoundParameters.containskey("PooledParams")){ $PropertyHash += @{PooledParams = $PooledParams} }
    if ($PSBoundParameters.containskey("PersonalParams")){ $PropertyHash += @{PersonalParams = $PersonalParams} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateArmHostPoolRequest')
    Return $ReturnObject    
}
function New-NmeCreateImageFromLibraryPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateImageFromLibraryPayload, for use in other Nme module commands

    .PARAMETER ImageId

    GUID of App Attach Image

    .PARAMETER SourceImageId

    string.

    .PARAMETER VmSize

    string.

    .PARAMETER StorageType

    string.

    .PARAMETER DiskSize

    integer.

    .PARAMETER NetworkId

    string.

    .PARAMETER Subnet

    string.

    .PARAMETER AdConfigId

    integer.

    .PARAMETER LocalAdminCredentials

    An object of type NmeCredentials. Can be created using New-NmeCredentials

    .PARAMETER Description

    string.

    .PARAMETER NoImageObjectRequired

    boolean. Specify -NoImageObjectRequired $True or -NoImageObjectRequired $False.

    .PARAMETER EnableTimezoneRedirection

    boolean. Specify -EnableTimezoneRedirection $True or -EnableTimezoneRedirection $False.

    .PARAMETER VmTimezone

    string.

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    .PARAMETER SkipRemoveProfiles

    boolean. Specify -SkipRemoveProfiles $True or -SkipRemoveProfiles $False.

    .PARAMETER Tags

    object.

    .PARAMETER UseTrustedLaunch

    boolean. Specify -UseTrustedLaunch $True or -UseTrustedLaunch $False.

    .PARAMETER GalleryImage

    An object of type NmeGalleryImageRestConfiguration. Can be created using New-NmeGalleryImageRestConfiguration

    .PARAMETER InstallCertificates

    boolean. Specify -InstallCertificates $True or -InstallCertificates $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeWvdObjectId"){$true} else{throw "$_ is not a NmeWvdObjectId object. Use New-NmeWvdObjectId to create before calling this function"}})][psobject]$ImageId,
        [Parameter(Mandatory=$true)][string]$SourceImageId,
        [Parameter(Mandatory=$true)][string]$VmSize,
        [Parameter(Mandatory=$true)][string]$StorageType,
        [Parameter(Mandatory=$true)][int]$DiskSize,
        [Parameter(Mandatory=$true)][string]$NetworkId,
        [Parameter(Mandatory=$true)][string]$Subnet,
        [int]$AdConfigId,
        [System.Management.Automation.PSCredential]$LocalAdminCredentials,
        [string]$Description,
        [bool]$NoImageObjectRequired,
        [bool]$EnableTimezoneRedirection,
        [string]$VmTimezone,
        [int[]]$ScriptedActionsIds,
        [bool]$SkipRemoveProfiles,
        [hashtable]$Tags,
        [bool]$UseTrustedLaunch,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeGalleryImageRestConfiguration"){$true} else{throw "$_ is not a NmeGalleryImageRestConfiguration object. Use New-NmeGalleryImageRestConfiguration to create before calling this function"}})][psobject]$GalleryImage,
        [bool]$InstallCertificates
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ImageId")){ $PropertyHash += @{ImageId = $ImageId} }
    if ($PSBoundParameters.containskey("SourceImageId")){ $PropertyHash += @{SourceImageId = $SourceImageId} }
    if ($PSBoundParameters.containskey("VmSize")){ $PropertyHash += @{VmSize = $VmSize} }
    if ($PSBoundParameters.containskey("StorageType")){ $PropertyHash += @{StorageType = $StorageType} }
    if ($PSBoundParameters.containskey("DiskSize")){ $PropertyHash += @{DiskSize = $DiskSize} }
    if ($PSBoundParameters.containskey("NetworkId")){ $PropertyHash += @{NetworkId = $NetworkId} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    if ($PSBoundParameters.containskey("AdConfigId")){ $PropertyHash += @{AdConfigId = $AdConfigId} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("NoImageObjectRequired")){ $PropertyHash += @{NoImageObjectRequired = $NoImageObjectRequired} }
    if ($PSBoundParameters.containskey("EnableTimezoneRedirection")){ $PropertyHash += @{EnableTimezoneRedirection = $EnableTimezoneRedirection} }
    if ($PSBoundParameters.containskey("VmTimezone")){ $PropertyHash += @{VmTimezone = $VmTimezone} }
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    if ($PSBoundParameters.containskey("SkipRemoveProfiles")){ $PropertyHash += @{SkipRemoveProfiles = $SkipRemoveProfiles} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    if ($PSBoundParameters.containskey("UseTrustedLaunch")){ $PropertyHash += @{UseTrustedLaunch = $UseTrustedLaunch} }
    if ($PSBoundParameters.containskey("GalleryImage")){ $PropertyHash += @{GalleryImage = $GalleryImage} }
    if ($PSBoundParameters.containskey("InstallCertificates")){ $PropertyHash += @{InstallCertificates = $InstallCertificates} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateImageFromLibraryPayload')
    Return $ReturnObject    
}
function New-NmeCreateImageFromLibraryRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateImageFromLibraryRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeCreateImageFromLibraryPayload. Can be created using New-NmeCreateImageFromLibraryPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeCreateImageFromLibraryPayload"){$true} else{throw "$_ is not a NmeCreateImageFromLibraryPayload object. Use New-NmeCreateImageFromLibraryPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateImageFromLibraryRequest')
    Return $ReturnObject    
}
function New-NmeCreateOrUpdateSecureVariableRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateOrUpdateSecureVariableRestPayload, for use in other Nme module commands

    .PARAMETER Name

    The name of the resource

    .PARAMETER ScriptedActions

    array.

    .PARAMETER Value

    string.

    .PARAMETER AssignmentRequired

    boolean. Specify -AssignmentRequired $True or -AssignmentRequired $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$Name,
        [int[]]$ScriptedActions,
        [Parameter(Mandatory=$true)][string]$Value,
        [Parameter(Mandatory=$true)][bool]$AssignmentRequired
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("ScriptedActions")){ $PropertyHash += @{ScriptedActions = $ScriptedActions} }
    if ($PSBoundParameters.containskey("Value")){ $PropertyHash += @{Value = $Value} }
    if ($PSBoundParameters.containskey("AssignmentRequired")){ $PropertyHash += @{AssignmentRequired = $AssignmentRequired} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateOrUpdateSecureVariableRestPayload')
    Return $ReturnObject    
}
function New-NmeCreateScriptedActionRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateScriptedActionRequest, for use in other Nme module commands

    .PARAMETER Name

    The name of the resource

    .PARAMETER Script

    string.

    .PARAMETER ExecutionMode

    string. Valid values are: Combined, Individual, IndividualWithRestart

    .PARAMETER ExecutionEnvironment

    string. Valid values are: CustomScript, AzureAutomation

    .PARAMETER ExecutionTimeout

    integer.

    .PARAMETER Tags

    array.

    .PARAMETER Description

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$Name,
        [Parameter(Mandatory=$true)][string]$Script,
        [Parameter(Mandatory=$true)][ValidateSet("Combined","Individual","IndividualWithRestart")][string]$ExecutionMode,
        [Parameter(Mandatory=$true)][ValidateSet("CustomScript","AzureAutomation")][string]$ExecutionEnvironment,
        [int]$ExecutionTimeout,
        [string[]]$Tags,
        [string]$Description
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Script")){ $PropertyHash += @{Script = $Script} }
    if ($PSBoundParameters.containskey("ExecutionMode")){ $PropertyHash += @{ExecutionMode = $ExecutionMode} }
    if ($PSBoundParameters.containskey("ExecutionEnvironment")){ $PropertyHash += @{ExecutionEnvironment = $ExecutionEnvironment} }
    if ($PSBoundParameters.containskey("ExecutionTimeout")){ $PropertyHash += @{ExecutionTimeout = $ExecutionTimeout} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateScriptedActionRequest')
    Return $ReturnObject    
}
function New-NmeCreateSessionHostPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateSessionHostPayload, for use in other Nme module commands

    .PARAMETER Host

    An object of type NmeSessionHostParams. Can be created using New-NmeSessionHostParams

    .PARAMETER UserToAssign

    string.

    .PARAMETER HostsCount

    integer.

    .PARAMETER Tags

    object.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeSessionHostParams"){$true} else{throw "$_ is not a NmeSessionHostParams object. Use New-NmeSessionHostParams to create before calling this function"}})][psobject]$Host,
        [string]$UserToAssign,
        [int]$HostsCount,
        [hashtable]$Tags
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Host")){ $PropertyHash += @{Host = $Host} }
    if ($PSBoundParameters.containskey("UserToAssign")){ $PropertyHash += @{UserToAssign = $UserToAssign} }
    if ($PSBoundParameters.containskey("HostsCount")){ $PropertyHash += @{HostsCount = $HostsCount} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateSessionHostPayload')
    Return $ReturnObject    
}
function New-NmeCreateSessionHostRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateSessionHostRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeCreateSessionHostPayload. Can be created using New-NmeCreateSessionHostPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeCreateSessionHostPayload"){$true} else{throw "$_ is not a NmeCreateSessionHostPayload object. Use New-NmeCreateSessionHostPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateSessionHostRequest')
    Return $ReturnObject    
}
function New-NmeCreateWorkspaceRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeCreateWorkspaceRequest, for use in other Nme module commands

    .PARAMETER Id

    An object of type NmeWvdObjectId. Create using New-NmeWvdObjectId. Will contain subscriptionid, resourcegroup, and tenant info

    .PARAMETER Location

    string.

    .PARAMETER FriendlyName

    string.

    .PARAMETER Description

    string.

    .PARAMETER Tags

    object.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeWvdObjectId"){$true} else{throw "$_ is not a NmeWvdObjectId object. Use New-NmeWvdObjectId to create before calling this function"}})][psobject]$Id,
        [Parameter(Mandatory=$true)][string]$Location,
        [string]$FriendlyName,
        [string]$Description,
        [hashtable]$Tags
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("Location")){ $PropertyHash += @{Location = $Location} }
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCreateWorkspaceRequest')
    Return $ReturnObject    
}
function New-NmeCredentials {
    <#

    .SYNOPSIS

    Creates an object of type NmeCredentials, for use in other Nme module commands

    .PARAMETER UserName

    Username of assigned user

    .PARAMETER Password

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$UserName,
        [Parameter(Mandatory=$true)][SecureString]$Password
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("UserName")){ $PropertyHash += @{UserName = $UserName} }
    if ($PSBoundParameters.containskey("Password")){ $PropertyHash += @{Password = $(ConvertFrom-SecureString -SecureString $Password -AsPlainText)} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeCredentials')
    Return $ReturnObject    
}
function New-NmeDeleteScriptedActionRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeDeleteScriptedActionRequest, for use in other Nme module commands

    .PARAMETER Force

    boolean. Specify -Force $True or -Force $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Force
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Force")){ $PropertyHash += @{Force = $Force} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDeleteScriptedActionRequest')
    Return $ReturnObject    
}
function New-NmeDeleteSecureVariableRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeDeleteSecureVariableRestPayload, for use in other Nme module commands

    .PARAMETER Name

    The name of the resource

    #>

    [cmdletbinding()]
    Param(
        [string]$Name
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDeleteSecureVariableRestPayload')
    Return $ReturnObject    
}
function New-NmeDesktopImageScheduleRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeDesktopImageScheduleRestModel, for use in other Nme module commands

    .PARAMETER StartDate

    string.

    .PARAMETER StartHour

    integer.

    .PARAMETER StartMinutes

    integer.

    .PARAMETER TimeZoneId

    string.

    .PARAMETER ScheduleRecurrenceType

    string. Valid values are: Once, Daily, Weekly, Monthly, Hourly, PatchTuesday

    .PARAMETER DayOfWeekNumber

    string. Valid values are: First, Second, Third, Fourth, Last

    .PARAMETER DayOfWeek

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER OffsetInDays

    integer.

    .PARAMETER NextRunDateUtc

    string.

    .PARAMETER JobType

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$StartDate,
        [Parameter(Mandatory=$true)][int]$StartHour,
        [Parameter(Mandatory=$true)][int]$StartMinutes,
        [Parameter(Mandatory=$true)][string]$TimeZoneId,
        [Parameter(Mandatory=$true)][ValidateSet("Once","Daily","Weekly","Monthly","Hourly","PatchTuesday")][string]$ScheduleRecurrenceType,
        [ValidateSet("First","Second","Third","Fourth","Last")][string]$DayOfWeekNumber,
        [ValidateSet("0","1","2","3","4","5","6")][int]$DayOfWeek,
        [int]$OffsetInDays,
        [string]$NextRunDateUtc,
        [string]$JobType
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StartDate")){ $PropertyHash += @{StartDate = $StartDate} }
    if ($PSBoundParameters.containskey("StartHour")){ $PropertyHash += @{StartHour = $StartHour} }
    if ($PSBoundParameters.containskey("StartMinutes")){ $PropertyHash += @{StartMinutes = $StartMinutes} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    if ($PSBoundParameters.containskey("ScheduleRecurrenceType")){ $PropertyHash += @{ScheduleRecurrenceType = $ScheduleRecurrenceType} }
    if ($PSBoundParameters.containskey("DayOfWeekNumber")){ $PropertyHash += @{DayOfWeekNumber = $DayOfWeekNumber} }
    if ($PSBoundParameters.containskey("DayOfWeek")){ $PropertyHash += @{DayOfWeek = $DayOfWeek} }
    if ($PSBoundParameters.containskey("OffsetInDays")){ $PropertyHash += @{OffsetInDays = $OffsetInDays} }
    if ($PSBoundParameters.containskey("NextRunDateUtc")){ $PropertyHash += @{NextRunDateUtc = $NextRunDateUtc} }
    if ($PSBoundParameters.containskey("JobType")){ $PropertyHash += @{JobType = $JobType} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDesktopImageScheduleRestModel')
    Return $ReturnObject    
}
function New-NmeDesktopImageSetAsImageScheduleRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeDesktopImageSetAsImageScheduleRest, for use in other Nme module commands

    .PARAMETER JobParams

    An object of type NmeSetAsImageRestConfiguration. Can be created using New-NmeSetAsImageRestConfiguration

    .PARAMETER Schedule

    An object of type NmeDesktopImageScheduleRestModel. Can be created using New-NmeDesktopImageScheduleRestModel

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeSetAsImageRestConfiguration"){$true} else{throw "$_ is not a NmeSetAsImageRestConfiguration object. Use New-NmeSetAsImageRestConfiguration to create before calling this function"}})][psobject]$JobParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeDesktopImageScheduleRestModel"){$true} else{throw "$_ is not a NmeDesktopImageScheduleRestModel object. Use New-NmeDesktopImageScheduleRestModel to create before calling this function"}})][psobject]$Schedule
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobParams")){ $PropertyHash += @{JobParams = $JobParams} }
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDesktopImageSetAsImageScheduleRest')
    Return $ReturnObject    
}
function New-NmeDynamicPoolConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeDynamicPoolConfig, for use in other Nme module commands

    .PARAMETER IsAutoScaleEnabled

    boolean. Specify -IsAutoScaleEnabled $True or -IsAutoScaleEnabled $False.

    #>

    [cmdletbinding()]
    Param(
        [bool]$IsAutoScaleEnabled
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsAutoScaleEnabled")){ $PropertyHash += @{IsAutoScaleEnabled = $IsAutoScaleEnabled} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDynamicPoolConfig')
    Return $ReturnObject    
}
function New-NmeDynamicPoolConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeDynamicPoolConfiguration, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER VmTemplate

    An object of type NmeVmTemplateParams. Can be created using New-NmeVmTemplateParams

    .PARAMETER StoppedDiskType

    string.

    .PARAMETER ReuseVmNames

    boolean. Specify -ReuseVmNames $True or -ReuseVmNames $False.

    .PARAMETER EnableFixFailedTask

    boolean. Specify -EnableFixFailedTask $True or -EnableFixFailedTask $False.

    .PARAMETER IsSingleUserDesktop

    boolean. Specify -IsSingleUserDesktop $True or -IsSingleUserDesktop $False.

    .PARAMETER ActiveHostType

    string. Valid values are: Running, AvailableForConnection

    .PARAMETER MinCountCreatedVmsType

    string. Valid values are: HostPoolCapacity, MinActiveHostsProperty

    .PARAMETER ScalingMode

    string. Valid values are: Default, WorkingHours, UserDriven

    .PARAMETER HostPoolCapacity

    integer.

    .PARAMETER MinActiveHostsCount

    integer.

    .PARAMETER BurstCapacity

    integer.

    .PARAMETER AutoScaleCriteria

    string. Valid values are: CPUUsage, RAMUsage, AvgActiveSessions, AvailableUserSessionSingle, AvailableUserSessions, UserDriven, PersonalAutoGrow, PersonalAutoShrink

    .PARAMETER ScaleInAggressiveness

    string. Valid values are: High, Medium, Low

    .PARAMETER WorkingHoursScaleOutBehavior

    string. Valid values are: OneTime, Continuously, Never

    .PARAMETER WorkingHoursScaleInBehavior

    string. Valid values are: OneTime, Continuously, Never

    .PARAMETER HostUsageScaleCriteria

    An object of type NmeHostUsageConfiguration. Can be created using New-NmeHostUsageConfiguration

    .PARAMETER ActiveSessionsScaleCriteria

    An object of type NmeActiveSessionsConfiguration. Can be created using New-NmeActiveSessionsConfiguration

    .PARAMETER AvailableUserSessionsScaleCriteria

    An object of type NmeAvailableUserSessionsConfiguration. Can be created using New-NmeAvailableUserSessionsConfiguration

    .PARAMETER ScaleInRestriction

    An object of type NmeScaleIntimeRestrictionConfiguration. Can be created using New-NmeScaleIntimeRestrictionConfiguration

    .PARAMETER PreStageHosts

    An object of type NmePreStateHostsConfiguration. Can be created using New-NmePreStateHostsConfiguration

    .PARAMETER RemoveMessaging

    An object of type NmeWarningMessageSettings. Can be created using New-NmeWarningMessageSettings

    .PARAMETER AutoHeal

    An object of type NmeAutoHealConfiguration. Can be created using New-NmeAutoHealConfiguration

    .PARAMETER SecondaryRegion

    An object of type NmeSecondaryRegionRestModel. Can be created using New-NmeSecondaryRegionRestModel

    .PARAMETER ReImageUsedHosts

    boolean. Specify -ReImageUsedHosts $True or -ReImageUsedHosts $False.

    .PARAMETER UserDriven

    An object of type NmeUserDrivenRestConfiguration. Can be created using New-NmeUserDrivenRestConfiguration

    .PARAMETER AutoScaleTriggers

    An array of objects of type NmeTriggerInfo. Can be created using New-NmeTriggerInfo

    .PARAMETER Extensions

    An object of type NmeExtensionsRestConfiguration. Can be created using New-NmeExtensionsRestConfiguration

    .PARAMETER AutoScaleInterval

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeVmTemplateParams"){$true} else{throw "$_ is not a NmeVmTemplateParams object. Use New-NmeVmTemplateParams to create before calling this function"}})][psobject]$VmTemplate,
        [string]$StoppedDiskType,
        [Parameter(Mandatory=$true)][bool]$ReuseVmNames,
        [Parameter(Mandatory=$true)][bool]$EnableFixFailedTask,
        [Parameter(Mandatory=$true)][bool]$IsSingleUserDesktop,
        [Parameter(Mandatory=$true)][ValidateSet("Running","AvailableForConnection")][string]$ActiveHostType,
        [Parameter(Mandatory=$true)][ValidateSet("HostPoolCapacity","MinActiveHostsProperty")][string]$MinCountCreatedVmsType,
        [Parameter(Mandatory=$true)][ValidateSet("Default","WorkingHours","UserDriven")][string]$ScalingMode,
        [Parameter(Mandatory=$true)][int]$HostPoolCapacity,
        [Parameter(Mandatory=$true)][int]$MinActiveHostsCount,
        [Parameter(Mandatory=$true)][int]$BurstCapacity,
        [ValidateSet("CPUUsage","RAMUsage","AvgActiveSessions","AvailableUserSessionSingle","AvailableUserSessions","UserDriven","PersonalAutoGrow","PersonalAutoShrink")][string]$AutoScaleCriteria,
        [Parameter(Mandatory=$true)][ValidateSet("High","Medium","Low")][string]$ScaleInAggressiveness,
        [ValidateSet("OneTime","Continuously","Never")][string]$WorkingHoursScaleOutBehavior,
        [ValidateSet("OneTime","Continuously","Never")][string]$WorkingHoursScaleInBehavior,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostUsageConfiguration"){$true} else{throw "$_ is not a NmeHostUsageConfiguration object. Use New-NmeHostUsageConfiguration to create before calling this function"}})][psobject]$HostUsageScaleCriteria,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeActiveSessionsConfiguration"){$true} else{throw "$_ is not a NmeActiveSessionsConfiguration object. Use New-NmeActiveSessionsConfiguration to create before calling this function"}})][psobject]$ActiveSessionsScaleCriteria,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAvailableUserSessionsConfiguration"){$true} else{throw "$_ is not a NmeAvailableUserSessionsConfiguration object. Use New-NmeAvailableUserSessionsConfiguration to create before calling this function"}})][psobject]$AvailableUserSessionsScaleCriteria,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScaleIntimeRestrictionConfiguration"){$true} else{throw "$_ is not a NmeScaleIntimeRestrictionConfiguration object. Use New-NmeScaleIntimeRestrictionConfiguration to create before calling this function"}})][psobject]$ScaleInRestriction,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmePreStateHostsConfiguration"){$true} else{throw "$_ is not a NmePreStateHostsConfiguration object. Use New-NmePreStateHostsConfiguration to create before calling this function"}})][psobject]$PreStageHosts,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeWarningMessageSettings"){$true} else{throw "$_ is not a NmeWarningMessageSettings object. Use New-NmeWarningMessageSettings to create before calling this function"}})][psobject]$RemoveMessaging,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAutoHealConfiguration"){$true} else{throw "$_ is not a NmeAutoHealConfiguration object. Use New-NmeAutoHealConfiguration to create before calling this function"}})][psobject]$AutoHeal,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeSecondaryRegionRestModel"){$true} else{throw "$_ is not a NmeSecondaryRegionRestModel object. Use New-NmeSecondaryRegionRestModel to create before calling this function"}})][psobject]$SecondaryRegion,
        [bool]$ReImageUsedHosts,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeUserDrivenRestConfiguration"){$true} else{throw "$_ is not a NmeUserDrivenRestConfiguration object. Use New-NmeUserDrivenRestConfiguration to create before calling this function"}})][psobject]$UserDriven,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeTriggerInfo"})]$AutoScaleTriggers,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeExtensionsRestConfiguration"){$true} else{throw "$_ is not a NmeExtensionsRestConfiguration object. Use New-NmeExtensionsRestConfiguration to create before calling this function"}})][psobject]$Extensions,
        [int]$AutoScaleInterval
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("VmTemplate")){ $PropertyHash += @{VmTemplate = $VmTemplate} }
    if ($PSBoundParameters.containskey("StoppedDiskType")){ $PropertyHash += @{StoppedDiskType = $StoppedDiskType} }
    if ($PSBoundParameters.containskey("ReuseVmNames")){ $PropertyHash += @{ReuseVmNames = $ReuseVmNames} }
    if ($PSBoundParameters.containskey("EnableFixFailedTask")){ $PropertyHash += @{EnableFixFailedTask = $EnableFixFailedTask} }
    if ($PSBoundParameters.containskey("IsSingleUserDesktop")){ $PropertyHash += @{IsSingleUserDesktop = $IsSingleUserDesktop} }
    if ($PSBoundParameters.containskey("ActiveHostType")){ $PropertyHash += @{ActiveHostType = $ActiveHostType} }
    if ($PSBoundParameters.containskey("MinCountCreatedVmsType")){ $PropertyHash += @{MinCountCreatedVmsType = $MinCountCreatedVmsType} }
    if ($PSBoundParameters.containskey("ScalingMode")){ $PropertyHash += @{ScalingMode = $ScalingMode} }
    if ($PSBoundParameters.containskey("HostPoolCapacity")){ $PropertyHash += @{HostPoolCapacity = $HostPoolCapacity} }
    if ($PSBoundParameters.containskey("MinActiveHostsCount")){ $PropertyHash += @{MinActiveHostsCount = $MinActiveHostsCount} }
    if ($PSBoundParameters.containskey("BurstCapacity")){ $PropertyHash += @{BurstCapacity = $BurstCapacity} }
    if ($PSBoundParameters.containskey("AutoScaleCriteria")){ $PropertyHash += @{AutoScaleCriteria = $AutoScaleCriteria} }
    if ($PSBoundParameters.containskey("ScaleInAggressiveness")){ $PropertyHash += @{ScaleInAggressiveness = $ScaleInAggressiveness} }
    if ($PSBoundParameters.containskey("WorkingHoursScaleOutBehavior")){ $PropertyHash += @{WorkingHoursScaleOutBehavior = $WorkingHoursScaleOutBehavior} }
    if ($PSBoundParameters.containskey("WorkingHoursScaleInBehavior")){ $PropertyHash += @{WorkingHoursScaleInBehavior = $WorkingHoursScaleInBehavior} }
    if ($PSBoundParameters.containskey("HostUsageScaleCriteria")){ $PropertyHash += @{HostUsageScaleCriteria = $HostUsageScaleCriteria} }
    if ($PSBoundParameters.containskey("ActiveSessionsScaleCriteria")){ $PropertyHash += @{ActiveSessionsScaleCriteria = $ActiveSessionsScaleCriteria} }
    if ($PSBoundParameters.containskey("AvailableUserSessionsScaleCriteria")){ $PropertyHash += @{AvailableUserSessionsScaleCriteria = $AvailableUserSessionsScaleCriteria} }
    if ($PSBoundParameters.containskey("ScaleInRestriction")){ $PropertyHash += @{ScaleInRestriction = $ScaleInRestriction} }
    if ($PSBoundParameters.containskey("PreStageHosts")){ $PropertyHash += @{PreStageHosts = $PreStageHosts} }
    if ($PSBoundParameters.containskey("RemoveMessaging")){ $PropertyHash += @{RemoveMessaging = $RemoveMessaging} }
    if ($PSBoundParameters.containskey("AutoHeal")){ $PropertyHash += @{AutoHeal = $AutoHeal} }
    if ($PSBoundParameters.containskey("SecondaryRegion")){ $PropertyHash += @{SecondaryRegion = $SecondaryRegion} }
    if ($PSBoundParameters.containskey("ReImageUsedHosts")){ $PropertyHash += @{ReImageUsedHosts = $ReImageUsedHosts} }
    if ($PSBoundParameters.containskey("UserDriven")){ $PropertyHash += @{UserDriven = $UserDriven} }
    if ($PSBoundParameters.containskey("AutoScaleTriggers")){ $PropertyHash += @{AutoScaleTriggers = $AutoScaleTriggers} }
    if ($PSBoundParameters.containskey("Extensions")){ $PropertyHash += @{Extensions = $Extensions} }
    if ($PSBoundParameters.containskey("AutoScaleInterval")){ $PropertyHash += @{AutoScaleInterval = $AutoScaleInterval} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeDynamicPoolConfiguration')
    Return $ReturnObject    
}
function New-NmeExistingScheduleConfigurationPayloadRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeExistingScheduleConfigurationPayloadRest, for use in other Nme module commands

    .PARAMETER StartDate

    string.

    .PARAMETER StartHour

    integer.

    .PARAMETER StartMinutes

    integer.

    .PARAMETER TimeZoneId

    string.

    .PARAMETER ScheduleRecurrenceType

    string. Valid values are: Once, Daily, Weekly, Monthly, Hourly, PatchTuesday

    .PARAMETER DayOfWeekNumber

    string. Valid values are: First, Second, Third, Fourth, Last

    .PARAMETER DayOfWeek

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER OffsetInDays

    integer.

    .PARAMETER NextRunDateUtc

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$StartDate,
        [Parameter(Mandatory=$true)][int]$StartHour,
        [Parameter(Mandatory=$true)][int]$StartMinutes,
        [Parameter(Mandatory=$true)][string]$TimeZoneId,
        [Parameter(Mandatory=$true)][ValidateSet("Once","Daily","Weekly","Monthly","Hourly","PatchTuesday")][string]$ScheduleRecurrenceType,
        [ValidateSet("First","Second","Third","Fourth","Last")][string]$DayOfWeekNumber,
        [ValidateSet("0","1","2","3","4","5","6")][int]$DayOfWeek,
        [int]$OffsetInDays,
        [string]$NextRunDateUtc
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StartDate")){ $PropertyHash += @{StartDate = $StartDate} }
    if ($PSBoundParameters.containskey("StartHour")){ $PropertyHash += @{StartHour = $StartHour} }
    if ($PSBoundParameters.containskey("StartMinutes")){ $PropertyHash += @{StartMinutes = $StartMinutes} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    if ($PSBoundParameters.containskey("ScheduleRecurrenceType")){ $PropertyHash += @{ScheduleRecurrenceType = $ScheduleRecurrenceType} }
    if ($PSBoundParameters.containskey("DayOfWeekNumber")){ $PropertyHash += @{DayOfWeekNumber = $DayOfWeekNumber} }
    if ($PSBoundParameters.containskey("DayOfWeek")){ $PropertyHash += @{DayOfWeek = $DayOfWeek} }
    if ($PSBoundParameters.containskey("OffsetInDays")){ $PropertyHash += @{OffsetInDays = $OffsetInDays} }
    if ($PSBoundParameters.containskey("NextRunDateUtc")){ $PropertyHash += @{NextRunDateUtc = $NextRunDateUtc} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeExistingScheduleConfigurationPayloadRest')
    Return $ReturnObject    
}
function New-NmeExtensionsRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeExtensionsRestConfiguration, for use in other Nme module commands

    .PARAMETER MaxSessionsPerHost

    integer.

    #>

    [cmdletbinding()]
    Param(
        [int]$MaxSessionsPerHost
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("MaxSessionsPerHost")){ $PropertyHash += @{MaxSessionsPerHost = $MaxSessionsPerHost} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeExtensionsRestConfiguration')
    Return $ReturnObject    
}
function New-NmeFsLogixRestProperties {
    <#

    .SYNOPSIS

    Creates an object of type NmeFsLogixRestProperties, for use in other Nme module commands

    .PARAMETER ProfilesPath

    string.

    .PARAMETER RegistryOptions

    string.

    .PARAMETER CloudCacheEnabled

    boolean. Specify -CloudCacheEnabled $True or -CloudCacheEnabled $False.

    .PARAMETER OfficeContainerPath

    string.

    .PARAMETER OfficeContainerRegistryOptions

    string.

    .PARAMETER SetupRegistryForAADJoinedStorage

    boolean. Specify -SetupRegistryForAADJoinedStorage $True or -SetupRegistryForAADJoinedStorage $False.

    .PARAMETER ForceUpdate

    boolean. Specify -ForceUpdate $True or -ForceUpdate $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$ProfilesPath,
        [Parameter(Mandatory=$true)][string]$RegistryOptions,
        [bool]$CloudCacheEnabled,
        [string]$OfficeContainerPath,
        [string]$OfficeContainerRegistryOptions,
        [bool]$SetupRegistryForAADJoinedStorage,
        [bool]$ForceUpdate
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ProfilesPath")){ $PropertyHash += @{ProfilesPath = $ProfilesPath} }
    if ($PSBoundParameters.containskey("RegistryOptions")){ $PropertyHash += @{RegistryOptions = $RegistryOptions} }
    if ($PSBoundParameters.containskey("CloudCacheEnabled")){ $PropertyHash += @{CloudCacheEnabled = $CloudCacheEnabled} }
    if ($PSBoundParameters.containskey("OfficeContainerPath")){ $PropertyHash += @{OfficeContainerPath = $OfficeContainerPath} }
    if ($PSBoundParameters.containskey("OfficeContainerRegistryOptions")){ $PropertyHash += @{OfficeContainerRegistryOptions = $OfficeContainerRegistryOptions} }
    if ($PSBoundParameters.containskey("SetupRegistryForAADJoinedStorage")){ $PropertyHash += @{SetupRegistryForAADJoinedStorage = $SetupRegistryForAADJoinedStorage} }
    if ($PSBoundParameters.containskey("ForceUpdate")){ $PropertyHash += @{ForceUpdate = $ForceUpdate} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeFsLogixRestProperties')
    Return $ReturnObject    
}
function New-NmeGalleryImageRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeGalleryImageRestConfiguration, for use in other Nme module commands

    .PARAMETER GalleryId

    string.

    .PARAMETER TargetRegions

    array.

    .PARAMETER SetInactive

    boolean. Specify -SetInactive $True or -SetInactive $False.

    .PARAMETER ReplicaCount

    integer.

    #>

    [cmdletbinding()]
    Param(
        [string]$GalleryId,
        [string[]]$TargetRegions,
        [bool]$SetInactive,
        [int]$ReplicaCount
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("GalleryId")){ $PropertyHash += @{GalleryId = $GalleryId} }
    if ($PSBoundParameters.containskey("TargetRegions")){ $PropertyHash += @{TargetRegions = $TargetRegions} }
    if ($PSBoundParameters.containskey("SetInactive")){ $PropertyHash += @{SetInactive = $SetInactive} }
    if ($PSBoundParameters.containskey("ReplicaCount")){ $PropertyHash += @{ReplicaCount = $ReplicaCount} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeGalleryImageRestConfiguration')
    Return $ReturnObject    
}
function New-NmeHostChange {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostChange, for use in other Nme module commands

    .PARAMETER HostChangeCount

    integer.

    .PARAMETER Value

    number.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$HostChangeCount,
        [Parameter(Mandatory=$true)][float]$Value
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("HostChangeCount")){ $PropertyHash += @{HostChangeCount = $HostChangeCount} }
    if ($PSBoundParameters.containskey("Value")){ $PropertyHash += @{Value = $Value} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostChange')
    Return $ReturnObject    
}
function New-NmeHostPoolActiveDirectoryRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolActiveDirectoryRestModel, for use in other Nme module commands

    .PARAMETER Type

    string. Valid values are: Default, Predefined, Custom

    .PARAMETER PredefinedConfigId

    integer.

    .PARAMETER Effective

    An object of type NmeAdConfigRestProperties. Can be created using New-NmeAdConfigRestProperties

    #>

    [cmdletbinding()]
    Param(
        [ValidateSet("Default","Predefined","Custom")][string]$Type,
        [int]$PredefinedConfigId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAdConfigRestProperties"){$true} else{throw "$_ is not a NmeAdConfigRestProperties object. Use New-NmeAdConfigRestProperties to create before calling this function"}})][psobject]$Effective
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("PredefinedConfigId")){ $PropertyHash += @{PredefinedConfigId = $PredefinedConfigId} }
    if ($PSBoundParameters.containskey("Effective")){ $PropertyHash += @{Effective = $Effective} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolActiveDirectoryRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolAssignmentRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolAssignmentRestModel, for use in other Nme module commands

    .PARAMETER ObjectId

    The GUID of an Azure AD object (user, group, or service principal) to which this RBAC role is assigned

    .PARAMETER ObjectType

    string. Valid values are: User, Group

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$ObjectId,
        [Parameter(Mandatory=$true)][ValidateSet("User","Group")][string]$ObjectType
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ObjectId")){ $PropertyHash += @{ObjectId = $ObjectId} }
    if ($PSBoundParameters.containskey("ObjectType")){ $PropertyHash += @{ObjectType = $ObjectType} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolAssignmentRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolBackupModelRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolBackupModelRest, for use in other Nme module commands

    .PARAMETER BackupMode

    string. Valid values are: Ignore, TurnOff, TurnOn

    .PARAMETER BackupPolicyId

    string.

    #>

    [cmdletbinding()]
    Param(
        [ValidateSet("Ignore","TurnOff","TurnOn")][string]$BackupMode,
        [string]$BackupPolicyId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("BackupMode")){ $PropertyHash += @{BackupMode = $BackupMode} }
    if ($PSBoundParameters.containskey("BackupPolicyId")){ $PropertyHash += @{BackupPolicyId = $BackupPolicyId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolBackupModelRest')
    Return $ReturnObject    
}
function New-NmeHostPoolFsLogixRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolFsLogixRestModel, for use in other Nme module commands

    .PARAMETER Enable

    boolean. Specify -Enable $True or -Enable $False.

    .PARAMETER UseDefault

    DEPRECATED

    .PARAMETER Type

    string. Valid values are: Default, Predefined, Custom

    .PARAMETER PredefinedConfigId

    integer.

    .PARAMETER EffectiveConfig

    An object of type NmeFsLogixRestProperties. Can be created using New-NmeFsLogixRestProperties

    #>

    [cmdletbinding()]
    Param(
        [bool]$Enable,
        [bool]$UseDefault,
        [ValidateSet("Default","Predefined","Custom")][string]$Type,
        [int]$PredefinedConfigId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeFsLogixRestProperties"){$true} else{throw "$_ is not a NmeFsLogixRestProperties object. Use New-NmeFsLogixRestProperties to create before calling this function"}})][psobject]$EffectiveConfig
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enable")){ $PropertyHash += @{Enable = $Enable} }
    if ($PSBoundParameters.containskey("UseDefault")){ $PropertyHash += @{UseDefault = $UseDefault} }
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("PredefinedConfigId")){ $PropertyHash += @{PredefinedConfigId = $PredefinedConfigId} }
    if ($PSBoundParameters.containskey("EffectiveConfig")){ $PropertyHash += @{EffectiveConfig = $EffectiveConfig} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolFsLogixRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolPropertiesRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolPropertiesRestModel, for use in other Nme module commands

    .PARAMETER FriendlyName

    string.

    .PARAMETER Description

    string.

    .PARAMETER LoadBalancerType

    string. Valid values are: BreadthFirst, DepthFirst, Persistent

    .PARAMETER MaxSessionLimit

    integer.

    .PARAMETER ValidationEnv

    boolean. Specify -ValidationEnv $True or -ValidationEnv $False.

    .PARAMETER PowerOnPooledHosts

    boolean. Specify -PowerOnPooledHosts $True or -PowerOnPooledHosts $False. Allow end users power on host in a pooled host pool

    #>

    [cmdletbinding()]
    Param(
        [string]$FriendlyName,
        [string]$Description,
        [ValidateSet("BreadthFirst","DepthFirst","Persistent")][string]$LoadBalancerType,
        [int]$MaxSessionLimit,
        [bool]$ValidationEnv,
        [bool]$PowerOnPooledHosts
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("FriendlyName")){ $PropertyHash += @{FriendlyName = $FriendlyName} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("LoadBalancerType")){ $PropertyHash += @{LoadBalancerType = $LoadBalancerType} }
    if ($PSBoundParameters.containskey("MaxSessionLimit")){ $PropertyHash += @{MaxSessionLimit = $MaxSessionLimit} }
    if ($PSBoundParameters.containskey("ValidationEnv")){ $PropertyHash += @{ValidationEnv = $ValidationEnv} }
    if ($PSBoundParameters.containskey("PowerOnPooledHosts")){ $PropertyHash += @{PowerOnPooledHosts = $PowerOnPooledHosts} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolPropertiesRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolRdpModelRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolRdpModelRest, for use in other Nme module commands

    .PARAMETER RdpProperties

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$RdpProperties
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("RdpProperties")){ $PropertyHash += @{RdpProperties = $RdpProperties} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolRdpModelRest')
    Return $ReturnObject    
}
function New-NmeHostPoolScriptedActionsConfigRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolScriptedActionsConfigRestModel, for use in other Nme module commands

    .PARAMETER Enabled

    boolean. Specify -Enabled $True or -Enabled $False.

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    .PARAMETER ActiveDirectoryId

    ID of Active Directory profile to be sent with this scripted action. Can be retrieved by running Get-NmeAdConfig

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enabled,
        [Parameter(Mandatory=$true)][int[]]$ScriptedActionsIds,
        [int]$ActiveDirectoryId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enabled")){ $PropertyHash += @{Enabled = $Enabled} }
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    if ($PSBoundParameters.containskey("ActiveDirectoryId")){ $PropertyHash += @{ActiveDirectoryId = $ActiveDirectoryId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolScriptedActionsConfigRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolScriptedActionsRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolScriptedActionsRestModel, for use in other Nme module commands

    .PARAMETER OnCreate

    An object of type NmeHostPoolScriptedActionsConfigRestModel. Can be created using New-NmeHostPoolScriptedActionsConfigRestModel

    .PARAMETER OnStart

    An object of type NmeHostPoolScriptedActionsConfigRestModel. Can be created using New-NmeHostPoolScriptedActionsConfigRestModel

    .PARAMETER OnStop

    An object of type NmeHostPoolScriptedActionsConfigRestModel. Can be created using New-NmeHostPoolScriptedActionsConfigRestModel

    .PARAMETER OnRemove

    An object of type NmeHostPoolScriptedActionsConfigRestModel. Can be created using New-NmeHostPoolScriptedActionsConfigRestModel

    .PARAMETER OnHostCreate

    An object of type NmeHostPoolScriptedActionsConfigRestModel. Can be created using New-NmeHostPoolScriptedActionsConfigRestModel

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsConfigRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsConfigRestModel object. Use New-NmeHostPoolScriptedActionsConfigRestModel to create before calling this function"}})][psobject]$OnCreate,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsConfigRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsConfigRestModel object. Use New-NmeHostPoolScriptedActionsConfigRestModel to create before calling this function"}})][psobject]$OnStart,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsConfigRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsConfigRestModel object. Use New-NmeHostPoolScriptedActionsConfigRestModel to create before calling this function"}})][psobject]$OnStop,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsConfigRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsConfigRestModel object. Use New-NmeHostPoolScriptedActionsConfigRestModel to create before calling this function"}})][psobject]$OnRemove,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsConfigRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsConfigRestModel object. Use New-NmeHostPoolScriptedActionsConfigRestModel to create before calling this function"}})][psobject]$OnHostCreate
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("OnCreate")){ $PropertyHash += @{OnCreate = $OnCreate} }
    if ($PSBoundParameters.containskey("OnStart")){ $PropertyHash += @{OnStart = $OnStart} }
    if ($PSBoundParameters.containskey("OnStop")){ $PropertyHash += @{OnStop = $OnStop} }
    if ($PSBoundParameters.containskey("OnRemove")){ $PropertyHash += @{OnRemove = $OnRemove} }
    if ($PSBoundParameters.containskey("OnHostCreate")){ $PropertyHash += @{OnHostCreate = $OnHostCreate} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolScriptedActionsRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolSessionTimeoutRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolSessionTimeoutRestModel, for use in other Nme module commands

    .PARAMETER IsSessionTimeoutsEnabled

    boolean. Specify -IsSessionTimeoutsEnabled $True or -IsSessionTimeoutsEnabled $False.

    .PARAMETER FresetBroken

    integer. Log off, instead of disconnecting, ACTIVE and IDLE sessions.
null: not configured;
-1: disabled (property will be removed from registry);
1: enabled

    .PARAMETER MaxIdleTime

    integer. Disconnect IDLE sessions after.
null: not configured;
-1: disabled (property will be removed from registry);
0: never

    .PARAMETER MaxConnectionTime

    integer. Disconnect ACTIVE sessions after.
null: not configured;
-1: disabled (property will be removed from registry);
0: never

    .PARAMETER MaxDisconnectionTime

    integer. Log off DISCONNECTED sessions after.
null: not configured;
-1: disabled (property will be removed from registry);
0: never

    .PARAMETER RemoteAppLogoffTimeLimit

    integer. Log off empty RemoteApp sessions after.
null: not configured;
-1: disabled (property will be removed from registry);
0: immediately

    #>

    [cmdletbinding()]
    Param(
        [bool]$IsSessionTimeoutsEnabled,
        [int]$FresetBroken,
        [int]$MaxIdleTime,
        [int]$MaxConnectionTime,
        [int]$MaxDisconnectionTime,
        [int]$RemoteAppLogoffTimeLimit
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsSessionTimeoutsEnabled")){ $PropertyHash += @{IsSessionTimeoutsEnabled = $IsSessionTimeoutsEnabled} }
    if ($PSBoundParameters.containskey("FresetBroken")){ $PropertyHash += @{FresetBroken = $FresetBroken} }
    if ($PSBoundParameters.containskey("MaxIdleTime")){ $PropertyHash += @{MaxIdleTime = $MaxIdleTime} }
    if ($PSBoundParameters.containskey("MaxConnectionTime")){ $PropertyHash += @{MaxConnectionTime = $MaxConnectionTime} }
    if ($PSBoundParameters.containskey("MaxDisconnectionTime")){ $PropertyHash += @{MaxDisconnectionTime = $MaxDisconnectionTime} }
    if ($PSBoundParameters.containskey("RemoteAppLogoffTimeLimit")){ $PropertyHash += @{RemoteAppLogoffTimeLimit = $RemoteAppLogoffTimeLimit} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolSessionTimeoutRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolTagsRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolTagsRest, for use in other Nme module commands

    .PARAMETER Tags

    object.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][hashtable]$Tags
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolTagsRest')
    Return $ReturnObject    
}
function New-NmeHostPoolTrackingModelRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolTrackingModelRest, for use in other Nme module commands

    .PARAMETER TrackCpuUsage

    boolean. Specify -TrackCpuUsage $True or -TrackCpuUsage $False.

    .PARAMETER TrackRamUsage

    boolean. Specify -TrackRamUsage $True or -TrackRamUsage $False.

    .PARAMETER TrackAverageActiveSessions

    boolean. Specify -TrackAverageActiveSessions $True or -TrackAverageActiveSessions $False.

    #>

    [cmdletbinding()]
    Param(
        [bool]$TrackCpuUsage,
        [bool]$TrackRamUsage,
        [bool]$TrackAverageActiveSessions
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TrackCpuUsage")){ $PropertyHash += @{TrackCpuUsage = $TrackCpuUsage} }
    if ($PSBoundParameters.containskey("TrackRamUsage")){ $PropertyHash += @{TrackRamUsage = $TrackRamUsage} }
    if ($PSBoundParameters.containskey("TrackAverageActiveSessions")){ $PropertyHash += @{TrackAverageActiveSessions = $TrackAverageActiveSessions} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolTrackingModelRest')
    Return $ReturnObject    
}
function New-NmeHostPoolUserSelfServiceDesktopImageRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolUserSelfServiceDesktopImageRest, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER Name

    The name of the resource

    #>

    [cmdletbinding()]
    Param(
        [string]$Id,
        [string]$Name
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolUserSelfServiceDesktopImageRest')
    Return $ReturnObject    
}
function New-NmeHostPoolUserSelfServiceModelRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolUserSelfServiceModelRest, for use in other Nme module commands

    .PARAMETER AllowStartDesktops

    boolean. Specify -AllowStartDesktops $True or -AllowStartDesktops $False.

    .PARAMETER AllowRestartDesktops

    boolean. Specify -AllowRestartDesktops $True or -AllowRestartDesktops $False.

    .PARAMETER AllowStopDesktops

    boolean. Specify -AllowStopDesktops $True or -AllowStopDesktops $False.

    .PARAMETER AllowReimageDesktops

    boolean. Specify -AllowReimageDesktops $True or -AllowReimageDesktops $False.

    .PARAMETER AllowedImages

    An array of objects of type NmeHostPoolUserSelfServiceDesktopImageRest. Can be created using New-NmeHostPoolUserSelfServiceDesktopImageRest

    .PARAMETER AllowRestoreDesktops

    boolean. Specify -AllowRestoreDesktops $True or -AllowRestoreDesktops $False.

    .PARAMETER RecoveryMode

    string. Valid values are: InstantRestoresOnly, AllRecoveryPoints

    .PARAMETER AllowResizeDesktops

    boolean. Specify -AllowResizeDesktops $True or -AllowResizeDesktops $False.

    .PARAMETER AllowedVmSizes

    array.

    .PARAMETER AllowedDiskSizes

    array.

    #>

    [cmdletbinding()]
    Param(
        [bool]$AllowStartDesktops,
        [bool]$AllowRestartDesktops,
        [bool]$AllowStopDesktops,
        [bool]$AllowReimageDesktops,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeHostPoolUserSelfServiceDesktopImageRest"})]$AllowedImages,
        [bool]$AllowRestoreDesktops,
        [ValidateSet("InstantRestoresOnly","AllRecoveryPoints")][string]$RecoveryMode,
        [bool]$AllowResizeDesktops,
        [string[]]$AllowedVmSizes,
        [string[]]$AllowedDiskSizes
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("AllowStartDesktops")){ $PropertyHash += @{AllowStartDesktops = $AllowStartDesktops} }
    if ($PSBoundParameters.containskey("AllowRestartDesktops")){ $PropertyHash += @{AllowRestartDesktops = $AllowRestartDesktops} }
    if ($PSBoundParameters.containskey("AllowStopDesktops")){ $PropertyHash += @{AllowStopDesktops = $AllowStopDesktops} }
    if ($PSBoundParameters.containskey("AllowReimageDesktops")){ $PropertyHash += @{AllowReimageDesktops = $AllowReimageDesktops} }
    if ($PSBoundParameters.containskey("AllowedImages")){ $PropertyHash += @{AllowedImages = $AllowedImages} }
    if ($PSBoundParameters.containskey("AllowRestoreDesktops")){ $PropertyHash += @{AllowRestoreDesktops = $AllowRestoreDesktops} }
    if ($PSBoundParameters.containskey("RecoveryMode")){ $PropertyHash += @{RecoveryMode = $RecoveryMode} }
    if ($PSBoundParameters.containskey("AllowResizeDesktops")){ $PropertyHash += @{AllowResizeDesktops = $AllowResizeDesktops} }
    if ($PSBoundParameters.containskey("AllowedVmSizes")){ $PropertyHash += @{AllowedVmSizes = $AllowedVmSizes} }
    if ($PSBoundParameters.containskey("AllowedDiskSizes")){ $PropertyHash += @{AllowedDiskSizes = $AllowedDiskSizes} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolUserSelfServiceModelRest')
    Return $ReturnObject    
}
function New-NmeHostPoolVmDeploymentRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolVmDeploymentRestModel, for use in other Nme module commands

    .PARAMETER ApplyVirtualDesktopOptimizations

    DEPRECATED

    .PARAMETER IsAcceleratedNetworkingEnabled

    boolean. Specify -IsAcceleratedNetworkingEnabled $True or -IsAcceleratedNetworkingEnabled $False. Use accelerated networking when possible

    .PARAMETER ForceVMRestart

    boolean. Specify -ForceVMRestart $True or -ForceVMRestart $False. Restart VM at the end of creation

    .PARAMETER EnableTimezoneRedirection

    boolean. Specify -EnableTimezoneRedirection $True or -EnableTimezoneRedirection $False. Enable time zone redirection

    .PARAMETER VmTimezone

    string. Set windows timezone on VM

    .PARAMETER InstallGPUDrivers

    boolean. Specify -InstallGPUDrivers $True or -InstallGPUDrivers $False. Install GPU drivers if VM have discrete GPU card

    .PARAMETER UseAvailabilityZones

    boolean. Specify -UseAvailabilityZones $True or -UseAvailabilityZones $False. Distribute VMs across availability zones in the azure region

    .PARAMETER ShadowUserAssignments

    An array of objects of type NmeHostPoolAssignmentRestModel. Can be created using New-NmeHostPoolAssignmentRestModel

    .PARAMETER IsShadowUsersEnabled

    boolean. Specify -IsShadowUsersEnabled $True or -IsShadowUsersEnabled $False. Allow session shadowing for non-admin users

    .PARAMETER EnableVmDeallocation

    boolean. Specify -EnableVmDeallocation $True or -EnableVmDeallocation $False. Enable automatic deallocation of stopped VMs

    .PARAMETER InstallCertificates

    boolean. Specify -InstallCertificates $True or -InstallCertificates $False. Install MSIX AppAttach certificates if any

    .PARAMETER ScriptedActions

    An object of type NmeHostPoolScriptedActionsRestModel. Can be created using New-NmeHostPoolScriptedActionsRestModel

    .PARAMETER AlwaysPromptForPassword

    boolean. Specify -AlwaysPromptForPassword $True or -AlwaysPromptForPassword $False. Enforce a password prompt for users logging on to Remote Desktop Services

    .PARAMETER SecurityType

    string. Valid values are: None, TrustedLaunch

    .PARAMETER SecureBootEnabled

    boolean. Specify -SecureBootEnabled $True or -SecureBootEnabled $False. Allow secure boot if Trusted launch is enabled

    .PARAMETER VTpmEnabled

    boolean. Specify -VTpmEnabled $True or -VTpmEnabled $False. Allow VTpm if Trusted launch is enabled

    .PARAMETER UseDedicatedHosts

    boolean. Specify -UseDedicatedHosts $True or -UseDedicatedHosts $False. Place VMs on Dedicated Hosts

    .PARAMETER DedicatedHostGroupId

    string. Host Group resource id

    .PARAMETER DedicatedHostId

    string. Host resource id

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$ApplyVirtualDesktopOptimizations,
        [Parameter(Mandatory=$true)][bool]$IsAcceleratedNetworkingEnabled,
        [Parameter(Mandatory=$true)][bool]$ForceVMRestart,
        [Parameter(Mandatory=$true)][bool]$EnableTimezoneRedirection,
        [string]$VmTimezone,
        [Parameter(Mandatory=$true)][bool]$InstallGPUDrivers,
        [Parameter(Mandatory=$true)][bool]$UseAvailabilityZones,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeHostPoolAssignmentRestModel"})]$ShadowUserAssignments,
        [Parameter(Mandatory=$true)][bool]$IsShadowUsersEnabled,
        [Parameter(Mandatory=$true)][bool]$EnableVmDeallocation,
        [Parameter(Mandatory=$true)][bool]$InstallCertificates,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsRestModel object. Use New-NmeHostPoolScriptedActionsRestModel to create before calling this function"}})][psobject]$ScriptedActions,
        [Parameter(Mandatory=$true)][bool]$AlwaysPromptForPassword,
        [Parameter(Mandatory=$true)][ValidateSet("None","TrustedLaunch")][string]$SecurityType,
        [Parameter(Mandatory=$true)][bool]$SecureBootEnabled,
        [Parameter(Mandatory=$true)][bool]$VTpmEnabled,
        [Parameter(Mandatory=$true)][bool]$UseDedicatedHosts,
        [Parameter(Mandatory=$true)][string]$DedicatedHostGroupId,
        [Parameter(Mandatory=$true)][string]$DedicatedHostId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ApplyVirtualDesktopOptimizations")){ $PropertyHash += @{ApplyVirtualDesktopOptimizations = $ApplyVirtualDesktopOptimizations} }
    if ($PSBoundParameters.containskey("IsAcceleratedNetworkingEnabled")){ $PropertyHash += @{IsAcceleratedNetworkingEnabled = $IsAcceleratedNetworkingEnabled} }
    if ($PSBoundParameters.containskey("ForceVMRestart")){ $PropertyHash += @{ForceVMRestart = $ForceVMRestart} }
    if ($PSBoundParameters.containskey("EnableTimezoneRedirection")){ $PropertyHash += @{EnableTimezoneRedirection = $EnableTimezoneRedirection} }
    if ($PSBoundParameters.containskey("VmTimezone")){ $PropertyHash += @{VmTimezone = $VmTimezone} }
    if ($PSBoundParameters.containskey("InstallGPUDrivers")){ $PropertyHash += @{InstallGPUDrivers = $InstallGPUDrivers} }
    if ($PSBoundParameters.containskey("UseAvailabilityZones")){ $PropertyHash += @{UseAvailabilityZones = $UseAvailabilityZones} }
    if ($PSBoundParameters.containskey("ShadowUserAssignments")){ $PropertyHash += @{ShadowUserAssignments = $ShadowUserAssignments} }
    if ($PSBoundParameters.containskey("IsShadowUsersEnabled")){ $PropertyHash += @{IsShadowUsersEnabled = $IsShadowUsersEnabled} }
    if ($PSBoundParameters.containskey("EnableVmDeallocation")){ $PropertyHash += @{EnableVmDeallocation = $EnableVmDeallocation} }
    if ($PSBoundParameters.containskey("InstallCertificates")){ $PropertyHash += @{InstallCertificates = $InstallCertificates} }
    if ($PSBoundParameters.containskey("ScriptedActions")){ $PropertyHash += @{ScriptedActions = $ScriptedActions} }
    if ($PSBoundParameters.containskey("AlwaysPromptForPassword")){ $PropertyHash += @{AlwaysPromptForPassword = $AlwaysPromptForPassword} }
    if ($PSBoundParameters.containskey("SecurityType")){ $PropertyHash += @{SecurityType = $SecurityType} }
    if ($PSBoundParameters.containskey("SecureBootEnabled")){ $PropertyHash += @{SecureBootEnabled = $SecureBootEnabled} }
    if ($PSBoundParameters.containskey("VTpmEnabled")){ $PropertyHash += @{VTpmEnabled = $VTpmEnabled} }
    if ($PSBoundParameters.containskey("UseDedicatedHosts")){ $PropertyHash += @{UseDedicatedHosts = $UseDedicatedHosts} }
    if ($PSBoundParameters.containskey("DedicatedHostGroupId")){ $PropertyHash += @{DedicatedHostGroupId = $DedicatedHostGroupId} }
    if ($PSBoundParameters.containskey("DedicatedHostId")){ $PropertyHash += @{DedicatedHostId = $DedicatedHostId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolVmDeploymentRestModel')
    Return $ReturnObject    
}
function New-NmeHostPoolVmDeploymentRestPutRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostPoolVmDeploymentRestPutRequest, for use in other Nme module commands

    .PARAMETER ApplyVirtualDesktopOptimizations

    DEPRECATED

    .PARAMETER IsAcceleratedNetworkingEnabled

    boolean. Specify -IsAcceleratedNetworkingEnabled $True or -IsAcceleratedNetworkingEnabled $False. Use accelerated networking when possible

    .PARAMETER ForceVMRestart

    boolean. Specify -ForceVMRestart $True or -ForceVMRestart $False. Restart VM at the end of creation

    .PARAMETER EnableTimezoneRedirection

    boolean. Specify -EnableTimezoneRedirection $True or -EnableTimezoneRedirection $False. Enable time zone redirection

    .PARAMETER VmTimezone

    string. Set windows timezone on VM

    .PARAMETER InstallGPUDrivers

    boolean. Specify -InstallGPUDrivers $True or -InstallGPUDrivers $False. Install GPU drivers if VM have discrete GPU card

    .PARAMETER UseAvailabilityZones

    boolean. Specify -UseAvailabilityZones $True or -UseAvailabilityZones $False. Distribute VMs across availability zones in the azure region

    .PARAMETER ShadowUserAssignments

    An array of objects of type NmeHostPoolAssignmentRestModel. Can be created using New-NmeHostPoolAssignmentRestModel

    .PARAMETER IsShadowUsersEnabled

    boolean. Specify -IsShadowUsersEnabled $True or -IsShadowUsersEnabled $False. Allow session shadowing for non-admin users

    .PARAMETER EnableVmDeallocation

    boolean. Specify -EnableVmDeallocation $True or -EnableVmDeallocation $False. Enable automatic deallocation of stopped VMs

    .PARAMETER InstallCertificates

    boolean. Specify -InstallCertificates $True or -InstallCertificates $False. Install MSIX AppAttach certificates if any

    .PARAMETER ScriptedActions

    An object of type NmeHostPoolScriptedActionsRestModel. Can be created using New-NmeHostPoolScriptedActionsRestModel

    .PARAMETER AlwaysPromptForPassword

    boolean. Specify -AlwaysPromptForPassword $True or -AlwaysPromptForPassword $False. Enforce a password prompt for users logging on to Remote Desktop Services

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$ApplyVirtualDesktopOptimizations,
        [Parameter(Mandatory=$true)][bool]$IsAcceleratedNetworkingEnabled,
        [Parameter(Mandatory=$true)][bool]$ForceVMRestart,
        [Parameter(Mandatory=$true)][bool]$EnableTimezoneRedirection,
        [string]$VmTimezone,
        [Parameter(Mandatory=$true)][bool]$InstallGPUDrivers,
        [Parameter(Mandatory=$true)][bool]$UseAvailabilityZones,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeHostPoolAssignmentRestModel"})]$ShadowUserAssignments,
        [Parameter(Mandatory=$true)][bool]$IsShadowUsersEnabled,
        [Parameter(Mandatory=$true)][bool]$EnableVmDeallocation,
        [Parameter(Mandatory=$true)][bool]$InstallCertificates,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostPoolScriptedActionsRestModel"){$true} else{throw "$_ is not a NmeHostPoolScriptedActionsRestModel object. Use New-NmeHostPoolScriptedActionsRestModel to create before calling this function"}})][psobject]$ScriptedActions,
        [bool]$AlwaysPromptForPassword
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ApplyVirtualDesktopOptimizations")){ $PropertyHash += @{ApplyVirtualDesktopOptimizations = $ApplyVirtualDesktopOptimizations} }
    if ($PSBoundParameters.containskey("IsAcceleratedNetworkingEnabled")){ $PropertyHash += @{IsAcceleratedNetworkingEnabled = $IsAcceleratedNetworkingEnabled} }
    if ($PSBoundParameters.containskey("ForceVMRestart")){ $PropertyHash += @{ForceVMRestart = $ForceVMRestart} }
    if ($PSBoundParameters.containskey("EnableTimezoneRedirection")){ $PropertyHash += @{EnableTimezoneRedirection = $EnableTimezoneRedirection} }
    if ($PSBoundParameters.containskey("VmTimezone")){ $PropertyHash += @{VmTimezone = $VmTimezone} }
    if ($PSBoundParameters.containskey("InstallGPUDrivers")){ $PropertyHash += @{InstallGPUDrivers = $InstallGPUDrivers} }
    if ($PSBoundParameters.containskey("UseAvailabilityZones")){ $PropertyHash += @{UseAvailabilityZones = $UseAvailabilityZones} }
    if ($PSBoundParameters.containskey("ShadowUserAssignments")){ $PropertyHash += @{ShadowUserAssignments = $ShadowUserAssignments} }
    if ($PSBoundParameters.containskey("IsShadowUsersEnabled")){ $PropertyHash += @{IsShadowUsersEnabled = $IsShadowUsersEnabled} }
    if ($PSBoundParameters.containskey("EnableVmDeallocation")){ $PropertyHash += @{EnableVmDeallocation = $EnableVmDeallocation} }
    if ($PSBoundParameters.containskey("InstallCertificates")){ $PropertyHash += @{InstallCertificates = $InstallCertificates} }
    if ($PSBoundParameters.containskey("ScriptedActions")){ $PropertyHash += @{ScriptedActions = $ScriptedActions} }
    if ($PSBoundParameters.containskey("AlwaysPromptForPassword")){ $PropertyHash += @{AlwaysPromptForPassword = $AlwaysPromptForPassword} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostPoolVmDeploymentRestPutRequest')
    Return $ReturnObject    
}
function New-NmeHostUsage {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostUsage, for use in other Nme module commands

    .PARAMETER HostChangeCount

    integer.

    .PARAMETER Value

    number.

    .PARAMETER AverageTimeRangeInMinutes

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$HostChangeCount,
        [Parameter(Mandatory=$true)][float]$Value,
        [Parameter(Mandatory=$true)][int]$AverageTimeRangeInMinutes
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("HostChangeCount")){ $PropertyHash += @{HostChangeCount = $HostChangeCount} }
    if ($PSBoundParameters.containskey("Value")){ $PropertyHash += @{Value = $Value} }
    if ($PSBoundParameters.containskey("AverageTimeRangeInMinutes")){ $PropertyHash += @{AverageTimeRangeInMinutes = $AverageTimeRangeInMinutes} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostUsage')
    Return $ReturnObject    
}
function New-NmeHostUsageConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostUsageConfiguration, for use in other Nme module commands

    .PARAMETER ScaleOut

    An object of type NmeHostUsage. Can be created using New-NmeHostUsage

    .PARAMETER ScaleIn

    An object of type NmeHostUsage. Can be created using New-NmeHostUsage

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostUsage"){$true} else{throw "$_ is not a NmeHostUsage object. Use New-NmeHostUsage to create before calling this function"}})][psobject]$ScaleOut,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostUsage"){$true} else{throw "$_ is not a NmeHostUsage object. Use New-NmeHostUsage to create before calling this function"}})][psobject]$ScaleIn
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ScaleOut")){ $PropertyHash += @{ScaleOut = $ScaleOut} }
    if ($PSBoundParameters.containskey("ScaleIn")){ $PropertyHash += @{ScaleIn = $ScaleIn} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostUsageConfiguration')
    Return $ReturnObject    
}
function New-NmeHostpoolScheduleRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeHostpoolScheduleRestModel, for use in other Nme module commands

    .PARAMETER StartDate

    string.

    .PARAMETER StartHour

    integer.

    .PARAMETER StartMinutes

    integer.

    .PARAMETER TimeZoneId

    string.

    .PARAMETER ScheduleRecurrenceType

    string. Valid values are: Once, Daily, Weekly, Monthly, Hourly, PatchTuesday

    .PARAMETER DayOfWeekNumber

    string. Valid values are: First, Second, Third, Fourth, Last

    .PARAMETER DayOfWeek

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER OffsetInDays

    integer.

    .PARAMETER NextRunDateUtc

    string.

    .PARAMETER JobType

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$StartDate,
        [Parameter(Mandatory=$true)][int]$StartHour,
        [Parameter(Mandatory=$true)][int]$StartMinutes,
        [Parameter(Mandatory=$true)][string]$TimeZoneId,
        [Parameter(Mandatory=$true)][ValidateSet("Once","Daily","Weekly","Monthly","Hourly","PatchTuesday")][string]$ScheduleRecurrenceType,
        [ValidateSet("First","Second","Third","Fourth","Last")][string]$DayOfWeekNumber,
        [ValidateSet("0","1","2","3","4","5","6")][int]$DayOfWeek,
        [int]$OffsetInDays,
        [string]$NextRunDateUtc,
        [string]$JobType
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StartDate")){ $PropertyHash += @{StartDate = $StartDate} }
    if ($PSBoundParameters.containskey("StartHour")){ $PropertyHash += @{StartHour = $StartHour} }
    if ($PSBoundParameters.containskey("StartMinutes")){ $PropertyHash += @{StartMinutes = $StartMinutes} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    if ($PSBoundParameters.containskey("ScheduleRecurrenceType")){ $PropertyHash += @{ScheduleRecurrenceType = $ScheduleRecurrenceType} }
    if ($PSBoundParameters.containskey("DayOfWeekNumber")){ $PropertyHash += @{DayOfWeekNumber = $DayOfWeekNumber} }
    if ($PSBoundParameters.containskey("DayOfWeek")){ $PropertyHash += @{DayOfWeek = $DayOfWeek} }
    if ($PSBoundParameters.containskey("OffsetInDays")){ $PropertyHash += @{OffsetInDays = $OffsetInDays} }
    if ($PSBoundParameters.containskey("NextRunDateUtc")){ $PropertyHash += @{NextRunDateUtc = $NextRunDateUtc} }
    if ($PSBoundParameters.containskey("JobType")){ $PropertyHash += @{JobType = $JobType} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeHostpoolScheduleRestModel')
    Return $ReturnObject    
}
function New-NmeJob {
    <#

    .SYNOPSIS

    Creates an object of type NmeJob, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER CreationDateUtc

    string.

    .PARAMETER JobType

    string.

    .PARAMETER JobCategory

    string.

    .PARAMETER JobStatus

    string. Valid values are: Pending, Running, Completed, Failed, Cancelled

    .PARAMETER JobRunMode

    string. Valid values are: Default, Restart, Cleanup

    #>

    [cmdletbinding()]
    Param(
        [int]$Id,
        [string]$CreationDateUtc,
        [string]$JobType,
        [string]$JobCategory,
        [ValidateSet("Pending","Running","Completed","Failed","Cancelled")][string]$JobStatus,
        [ValidateSet("Default","Restart","Cleanup")][string]$JobRunMode
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("CreationDateUtc")){ $PropertyHash += @{CreationDateUtc = $CreationDateUtc} }
    if ($PSBoundParameters.containskey("JobType")){ $PropertyHash += @{JobType = $JobType} }
    if ($PSBoundParameters.containskey("JobCategory")){ $PropertyHash += @{JobCategory = $JobCategory} }
    if ($PSBoundParameters.containskey("JobStatus")){ $PropertyHash += @{JobStatus = $JobStatus} }
    if ($PSBoundParameters.containskey("JobRunMode")){ $PropertyHash += @{JobRunMode = $JobRunMode} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeJob')
    Return $ReturnObject    
}
function New-NmeJobFailurePolicy {
    <#

    .SYNOPSIS

    Creates an object of type NmeJobFailurePolicy, for use in other Nme module commands

    .PARAMETER Restart

    boolean. Specify -Restart $True or -Restart $False.

    .PARAMETER Cleanup

    boolean. Specify -Cleanup $True or -Cleanup $False.

    #>

    [cmdletbinding()]
    Param(
        [bool]$Restart,
        [bool]$Cleanup
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Restart")){ $PropertyHash += @{Restart = $Restart} }
    if ($PSBoundParameters.containskey("Cleanup")){ $PropertyHash += @{Cleanup = $Cleanup} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeJobFailurePolicy')
    Return $ReturnObject    
}
function New-NmeJobShortInfo {
    <#

    .SYNOPSIS

    Creates an object of type NmeJobShortInfo, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER Status

    string. Valid values are: Pending, Running, Completed, Failed, Cancelled

    #>

    [cmdletbinding()]
    Param(
        [int]$Id,
        [ValidateSet("Pending","Running","Completed","Failed","Cancelled")][string]$Status
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("Status")){ $PropertyHash += @{Status = $Status} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeJobShortInfo')
    Return $ReturnObject    
}
function New-NmeJobTask {
    <#

    .SYNOPSIS

    Creates an object of type NmeJobTask, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER CreationDateUtc

    string.

    .PARAMETER Name

    The name of the resource

    .PARAMETER Description

    string.

    .PARAMETER Status

    string. Valid values are: Cancelled, Running, Success, Failed

    .PARAMETER ResultPlain

    string.

    #>

    [cmdletbinding()]
    Param(
        [int]$Id,
        [string]$CreationDateUtc,
        [string]$Name,
        [string]$Description,
        [ValidateSet("Cancelled","Running","Success","Failed")][string]$Status,
        [string]$ResultPlain
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("CreationDateUtc")){ $PropertyHash += @{CreationDateUtc = $CreationDateUtc} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("Status")){ $PropertyHash += @{Status = $Status} }
    if ($PSBoundParameters.containskey("ResultPlain")){ $PropertyHash += @{ResultPlain = $ResultPlain} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeJobTask')
    Return $ReturnObject    
}
function New-NmeLinkNetworkRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkNetworkRestPayload, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER ResourceGroupName

    Resource group name

    .PARAMETER NetworkName

    string.

    .PARAMETER SubnetName

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$SubscriptionId,
        [Parameter(Mandatory=$true)][string]$ResourceGroupName,
        [Parameter(Mandatory=$true)][string]$NetworkName,
        [Parameter(Mandatory=$true)][string]$SubnetName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("ResourceGroupName")){ $PropertyHash += @{ResourceGroupName = $ResourceGroupName} }
    if ($PSBoundParameters.containskey("NetworkName")){ $PropertyHash += @{NetworkName = $NetworkName} }
    if ($PSBoundParameters.containskey("SubnetName")){ $PropertyHash += @{SubnetName = $SubnetName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkNetworkRestPayload')
    Return $ReturnObject    
}
function New-NmeLinkResourceGroupRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkResourceGroupRequest, for use in other Nme module commands

    .PARAMETER IsDefault

    boolean. Specify -IsDefault $True or -IsDefault $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsDefault
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsDefault")){ $PropertyHash += @{IsDefault = $IsDefault} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkResourceGroupRequest')
    Return $ReturnObject    
}
function New-NmeLinkSubscriptionRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkSubscriptionRestPayload, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER TenantId

    string.

    .PARAMETER ServicePrincipal

    An object of type NmeServicePrincipalRestParams. Can be created using New-NmeServicePrincipalRestParams

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$SubscriptionId,
        [Parameter(Mandatory=$true)][string]$TenantId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeServicePrincipalRestParams"){$true} else{throw "$_ is not a NmeServicePrincipalRestParams object. Use New-NmeServicePrincipalRestParams to create before calling this function"}})][psobject]$ServicePrincipal
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("TenantId")){ $PropertyHash += @{TenantId = $TenantId} }
    if ($PSBoundParameters.containskey("ServicePrincipal")){ $PropertyHash += @{ServicePrincipal = $ServicePrincipal} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkSubscriptionRestPayload')
    Return $ReturnObject    
}
function New-NmeLinkedNetworkRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkedNetworkRestModel, for use in other Nme module commands

    .PARAMETER DbId

    string.

    .PARAMETER IsDefault

    boolean. Specify -IsDefault $True or -IsDefault $False.

    .PARAMETER Name

    The name of the resource

    .PARAMETER Subnet

    string.

    .PARAMETER Region

    string.

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER ResourceGroupName

    Resource group name

    #>

    [cmdletbinding()]
    Param(
        [string]$DbId,
        [bool]$IsDefault,
        [string]$Name,
        [string]$Subnet,
        [string]$Region,
        [string]$SubscriptionId,
        [string]$ResourceGroupName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("DbId")){ $PropertyHash += @{DbId = $DbId} }
    if ($PSBoundParameters.containskey("IsDefault")){ $PropertyHash += @{IsDefault = $IsDefault} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    if ($PSBoundParameters.containskey("Region")){ $PropertyHash += @{Region = $Region} }
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("ResourceGroupName")){ $PropertyHash += @{ResourceGroupName = $ResourceGroupName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkedNetworkRestModel')
    Return $ReturnObject    
}
function New-NmeLinkedResourceGroupRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkedResourceGroupRestModel, for use in other Nme module commands

    .PARAMETER DbId

    string.

    .PARAMETER Name

    The name of the resource

    .PARAMETER IsDefault

    boolean. Specify -IsDefault $True or -IsDefault $False.

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    #>

    [cmdletbinding()]
    Param(
        [string]$DbId,
        [string]$Name,
        [bool]$IsDefault,
        [string]$SubscriptionId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("DbId")){ $PropertyHash += @{DbId = $DbId} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("IsDefault")){ $PropertyHash += @{IsDefault = $IsDefault} }
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkedResourceGroupRestModel')
    Return $ReturnObject    
}
function New-NmeLinkedStorageLocationRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkedStorageLocationRestModel, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER LocationName

    string.

    .PARAMETER ShareName

    File share name

    .PARAMETER StorageAccountName

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$Id,
        [string]$LocationName,
        [string]$ShareName,
        [string]$StorageAccountName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("LocationName")){ $PropertyHash += @{LocationName = $LocationName} }
    if ($PSBoundParameters.containskey("ShareName")){ $PropertyHash += @{ShareName = $ShareName} }
    if ($PSBoundParameters.containskey("StorageAccountName")){ $PropertyHash += @{StorageAccountName = $StorageAccountName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkedStorageLocationRestModel')
    Return $ReturnObject    
}
function New-NmeLinkedSubscriptionRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeLinkedSubscriptionRestModel, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER TenantId

    string.

    .PARAMETER AzureType

    string. Valid values are: AzureCloud, AzureUSGovernment, AzureChina

    .PARAMETER AppId

    string.

    .PARAMETER AppsIds

    array.

    #>

    [cmdletbinding()]
    Param(
        [string]$SubscriptionId,
        [string]$TenantId,
        [ValidateSet("AzureCloud","AzureUSGovernment","AzureChina")][string]$AzureType,
        [string]$AppId,
        [string[]]$AppsIds
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("TenantId")){ $PropertyHash += @{TenantId = $TenantId} }
    if ($PSBoundParameters.containskey("AzureType")){ $PropertyHash += @{AzureType = $AzureType} }
    if ($PSBoundParameters.containskey("AppId")){ $PropertyHash += @{AppId = $AppId} }
    if ($PSBoundParameters.containskey("AppsIds")){ $PropertyHash += @{AppsIds = $AppsIds} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeLinkedSubscriptionRestModel')
    Return $ReturnObject    
}
function New-NmeMaintenanceWindowRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeMaintenanceWindowRestModel, for use in other Nme module commands

    .PARAMETER DayOfWeek

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER Hour

    integer.

    #>

    [cmdletbinding()]
    Param(
        [ValidateSet("0","1","2","3","4","5","6")][int]$DayOfWeek,
        [int]$Hour
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("DayOfWeek")){ $PropertyHash += @{DayOfWeek = $DayOfWeek} }
    if ($PSBoundParameters.containskey("Hour")){ $PropertyHash += @{Hour = $Hour} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeMaintenanceWindowRestModel')
    Return $ReturnObject    
}
function New-NmeNetAppFilesAutoscaleConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeNetAppFilesAutoscaleConfig, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER Unit

    string. Valid values are: Percent, SizeGb, SizeTb

    .PARAMETER Basic

    An object of type NmeNetAppFilesBasicAutoscaleConfig. Can be created using New-NmeNetAppFilesBasicAutoscaleConfig

    .PARAMETER Scaling

    An object of type NmeNetAppFilesScalingConfig. Can be created using New-NmeNetAppFilesScalingConfig

    .PARAMETER PreStage

    An object of type NmeNetAppFilesPreStageConfig. Can be created using New-NmeNetAppFilesPreStageConfig

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [Parameter(Mandatory=$true)][ValidateSet("Percent","SizeGb","SizeTb")][string]$Unit,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNetAppFilesBasicAutoscaleConfig"){$true} else{throw "$_ is not a NmeNetAppFilesBasicAutoscaleConfig object. Use New-NmeNetAppFilesBasicAutoscaleConfig to create before calling this function"}})][psobject]$Basic,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNetAppFilesScalingConfig"){$true} else{throw "$_ is not a NmeNetAppFilesScalingConfig object. Use New-NmeNetAppFilesScalingConfig to create before calling this function"}})][psobject]$Scaling,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNetAppFilesPreStageConfig"){$true} else{throw "$_ is not a NmeNetAppFilesPreStageConfig object. Use New-NmeNetAppFilesPreStageConfig to create before calling this function"}})][psobject]$PreStage
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("Unit")){ $PropertyHash += @{Unit = $Unit} }
    if ($PSBoundParameters.containskey("Basic")){ $PropertyHash += @{Basic = $Basic} }
    if ($PSBoundParameters.containskey("Scaling")){ $PropertyHash += @{Scaling = $Scaling} }
    if ($PSBoundParameters.containskey("PreStage")){ $PropertyHash += @{PreStage = $PreStage} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNetAppFilesAutoscaleConfig')
    Return $ReturnObject    
}
function New-NmeNetAppFilesBasicAutoscaleConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeNetAppFilesBasicAutoscaleConfig, for use in other Nme module commands

    .PARAMETER ScalingMode

    string. Valid values are: VolumeOnly, VolumeAndPool

    .PARAMETER MinSizeBuffer

    number.

    .PARAMETER MaxSizeLimit

    integer.

    .PARAMETER MaxSizeBuffer

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("VolumeOnly","VolumeAndPool")][string]$ScalingMode,
        [Parameter(Mandatory=$true)][float]$MinSizeBuffer,
        [Parameter(Mandatory=$true)][int]$MaxSizeLimit,
        [int]$MaxSizeBuffer
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ScalingMode")){ $PropertyHash += @{ScalingMode = $ScalingMode} }
    if ($PSBoundParameters.containskey("MinSizeBuffer")){ $PropertyHash += @{MinSizeBuffer = $MinSizeBuffer} }
    if ($PSBoundParameters.containskey("MaxSizeLimit")){ $PropertyHash += @{MaxSizeLimit = $MaxSizeLimit} }
    if ($PSBoundParameters.containskey("MaxSizeBuffer")){ $PropertyHash += @{MaxSizeBuffer = $MaxSizeBuffer} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNetAppFilesBasicAutoscaleConfig')
    Return $ReturnObject    
}
function New-NmeNetAppFilesPreStageConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeNetAppFilesPreStageConfig, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER WorkTimeSets

    An array of objects of type NmeNetAppFilesWorkTimeSetModel. Can be created using New-NmeNetAppFilesWorkTimeSetModel

    .PARAMETER TimezoneId

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeNetAppFilesWorkTimeSetModel"})]$WorkTimeSets,
        [string]$TimezoneId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("WorkTimeSets")){ $PropertyHash += @{WorkTimeSets = $WorkTimeSets} }
    if ($PSBoundParameters.containskey("TimezoneId")){ $PropertyHash += @{TimezoneId = $TimezoneId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNetAppFilesPreStageConfig')
    Return $ReturnObject    
}
function New-NmeNetAppFilesScalingConfig {
    <#

    .SYNOPSIS

    Creates an object of type NmeNetAppFilesScalingConfig, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    .PARAMETER Trigger

    string. Valid values are: AvgReadLatency, AvgWriteLatency, AvgReadOrWriteLatency

    .PARAMETER ScaleOutBy

    integer.

    .PARAMETER ScaleOutHighLatency

    integer.

    .PARAMETER ScaleOutInterval

    integer.

    .PARAMETER ScaleInBy

    integer.

    .PARAMETER ScaleInLowLatency

    integer.

    .PARAMETER ScaleInInterval

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled,
        [ValidateSet("AvgReadLatency","AvgWriteLatency","AvgReadOrWriteLatency")][string]$Trigger,
        [int]$ScaleOutBy,
        [int]$ScaleOutHighLatency,
        [int]$ScaleOutInterval,
        [int]$ScaleInBy,
        [int]$ScaleInLowLatency,
        [int]$ScaleInInterval
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    if ($PSBoundParameters.containskey("Trigger")){ $PropertyHash += @{Trigger = $Trigger} }
    if ($PSBoundParameters.containskey("ScaleOutBy")){ $PropertyHash += @{ScaleOutBy = $ScaleOutBy} }
    if ($PSBoundParameters.containskey("ScaleOutHighLatency")){ $PropertyHash += @{ScaleOutHighLatency = $ScaleOutHighLatency} }
    if ($PSBoundParameters.containskey("ScaleOutInterval")){ $PropertyHash += @{ScaleOutInterval = $ScaleOutInterval} }
    if ($PSBoundParameters.containskey("ScaleInBy")){ $PropertyHash += @{ScaleInBy = $ScaleInBy} }
    if ($PSBoundParameters.containskey("ScaleInLowLatency")){ $PropertyHash += @{ScaleInLowLatency = $ScaleInLowLatency} }
    if ($PSBoundParameters.containskey("ScaleInInterval")){ $PropertyHash += @{ScaleInInterval = $ScaleInInterval} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNetAppFilesScalingConfig')
    Return $ReturnObject    
}
function New-NmeNetAppFilesWorkTimeSetModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeNetAppFilesWorkTimeSetModel, for use in other Nme module commands

    .PARAMETER WorkDays

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER StartTimeHour

    integer.

    .PARAMETER EndTimeHour

    integer.

    .PARAMETER MinSize

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet(0,1,2,3,4,5,6)][Int]$WorkDays,
        [Parameter(Mandatory=$true)][int]$StartTimeHour,
        [Parameter(Mandatory=$true)][int]$EndTimeHour,
        [Parameter(Mandatory=$true)][int]$MinSize
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("WorkDays")){ $PropertyHash += @{WorkDays = $WorkDays} }
    if ($PSBoundParameters.containskey("StartTimeHour")){ $PropertyHash += @{StartTimeHour = $StartTimeHour} }
    if ($PSBoundParameters.containskey("EndTimeHour")){ $PropertyHash += @{EndTimeHour = $EndTimeHour} }
    if ($PSBoundParameters.containskey("MinSize")){ $PropertyHash += @{MinSize = $MinSize} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNetAppFilesWorkTimeSetModel')
    Return $ReturnObject    
}
function New-NmeNonArmHostPoolAssignmentRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmHostPoolAssignmentRequest, for use in other Nme module commands

    .PARAMETER Users

    array.

    .PARAMETER AppGroup

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string[]]$Users,
        [string]$AppGroup
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Users")){ $PropertyHash += @{Users = $Users} }
    if ($PSBoundParameters.containskey("AppGroup")){ $PropertyHash += @{AppGroup = $AppGroup} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmHostPoolAssignmentRequest')
    Return $ReturnObject    
}
function New-NmeNonArmHostPoolUnassignmentRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmHostPoolUnassignmentRequest, for use in other Nme module commands

    .PARAMETER Users

    array.

    .PARAMETER AppGroup

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string[]]$Users,
        [string]$AppGroup
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Users")){ $PropertyHash += @{Users = $Users} }
    if ($PSBoundParameters.containskey("AppGroup")){ $PropertyHash += @{AppGroup = $AppGroup} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmHostPoolUnassignmentRequest')
    Return $ReturnObject    
}
function New-NmeNonArmHostpool {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmHostpool, for use in other Nme module commands

    .PARAMETER DynamicPoolConfig

    An object of type NmeDynamicPoolConfig. Can be created using New-NmeDynamicPoolConfig

    .PARAMETER Id

    ID of scripted Action

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeDynamicPoolConfig"){$true} else{throw "$_ is not a NmeDynamicPoolConfig object. Use New-NmeDynamicPoolConfig to create before calling this function"}})][psobject]$DynamicPoolConfig,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNonArmHostpoolId"){$true} else{throw "$_ is not a NmeNonArmHostpoolId object. Use New-NmeNonArmHostpoolId to create before calling this function"}})][psobject]$Id
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("DynamicPoolConfig")){ $PropertyHash += @{DynamicPoolConfig = $DynamicPoolConfig} }
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmHostpool')
    Return $ReturnObject    
}
function New-NmeNonArmHostpoolId {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmHostpoolId, for use in other Nme module commands

    .PARAMETER TenantName

    string.

    .PARAMETER HostpoolName

    The name of the Host Pool

    #>

    [cmdletbinding()]
    Param(
        [string]$TenantName,
        [string]$HostpoolName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TenantName")){ $PropertyHash += @{TenantName = $TenantName} }
    if ($PSBoundParameters.containskey("HostpoolName")){ $PropertyHash += @{HostpoolName = $HostpoolName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmHostpoolId')
    Return $ReturnObject    
}
function New-NmeNonArmSession {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmSession, for use in other Nme module commands

    .PARAMETER SessionId

    The session id

    .PARAMETER SessionState

    string.

    .PARAMETER Username

    Username of assigned user

    .PARAMETER HostName

    Name of AVD host

    .PARAMETER Hostpool

    An object of type NmeNonArmHostpoolId. Can be created using New-NmeNonArmHostpoolId

    #>

    [cmdletbinding()]
    Param(
        [string]$SessionId,
        [string]$SessionState,
        [string]$Username,
        [string]$HostName,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNonArmHostpoolId"){$true} else{throw "$_ is not a NmeNonArmHostpoolId object. Use New-NmeNonArmHostpoolId to create before calling this function"}})][psobject]$Hostpool
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SessionId")){ $PropertyHash += @{SessionId = $SessionId} }
    if ($PSBoundParameters.containskey("SessionState")){ $PropertyHash += @{SessionState = $SessionState} }
    if ($PSBoundParameters.containskey("Username")){ $PropertyHash += @{Username = $Username} }
    if ($PSBoundParameters.containskey("HostName")){ $PropertyHash += @{HostName = $HostName} }
    if ($PSBoundParameters.containskey("Hostpool")){ $PropertyHash += @{Hostpool = $Hostpool} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmSession')
    Return $ReturnObject    
}
function New-NmeNonArmSessionHost {
    <#

    .SYNOPSIS

    Creates an object of type NmeNonArmSessionHost, for use in other Nme module commands

    .PARAMETER HostName

    Name of AVD host

    .PARAMETER AssignedUser

    string.

    .PARAMETER VmId

    string.

    .PARAMETER PowerState

    string.

    .PARAMETER Status

    string. Valid values are: Available, Unavailable, Shutdown, Disconnected, Upgrading, UpgradeFailed, NoHeartbeat, NotJoinedToDomain, DomainTrustRelationshipLost, SxSStackListenerNotReady, FSLogixNotHealthy, NeedsAssistance

    .PARAMETER Hostpool

    An object of type NmeNonArmHostpoolId. Can be created using New-NmeNonArmHostpoolId

    #>

    [cmdletbinding()]
    Param(
        [string]$HostName,
        [string]$AssignedUser,
        [string]$VmId,
        [string]$PowerState,
        [ValidateSet("Available","Unavailable","Shutdown","Disconnected","Upgrading","UpgradeFailed","NoHeartbeat","NotJoinedToDomain","DomainTrustRelationshipLost","SxSStackListenerNotReady","FSLogixNotHealthy","NeedsAssistance")][string]$Status,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeNonArmHostpoolId"){$true} else{throw "$_ is not a NmeNonArmHostpoolId object. Use New-NmeNonArmHostpoolId to create before calling this function"}})][psobject]$Hostpool
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("HostName")){ $PropertyHash += @{HostName = $HostName} }
    if ($PSBoundParameters.containskey("AssignedUser")){ $PropertyHash += @{AssignedUser = $AssignedUser} }
    if ($PSBoundParameters.containskey("VmId")){ $PropertyHash += @{VmId = $VmId} }
    if ($PSBoundParameters.containskey("PowerState")){ $PropertyHash += @{PowerState = $PowerState} }
    if ($PSBoundParameters.containskey("Status")){ $PropertyHash += @{Status = $Status} }
    if ($PSBoundParameters.containskey("Hostpool")){ $PropertyHash += @{Hostpool = $Hostpool} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeNonArmSessionHost')
    Return $ReturnObject    
}
function New-NmeParamBindingRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeParamBindingRest, for use in other Nme module commands

    .PARAMETER Value

    string.

    .PARAMETER IsSecure

    boolean. Specify -IsSecure $True or -IsSecure $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$Value,
        [Parameter(Mandatory=$true)][bool]$IsSecure
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Value")){ $PropertyHash += @{Value = $Value} }
    if ($PSBoundParameters.containskey("IsSecure")){ $PropertyHash += @{IsSecure = $IsSecure} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeParamBindingRest')
    Return $ReturnObject    
}
function New-NmePersonalAutoGrowRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmePersonalAutoGrowRestConfiguration, for use in other Nme module commands

    .PARAMETER Unit

    integer. Valid values are: 0, 1

    .PARAMETER UnassignedThreshold

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("0","1")][int]$Unit,
        [Parameter(Mandatory=$true)][int]$UnassignedThreshold
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Unit")){ $PropertyHash += @{Unit = $Unit} }
    if ($PSBoundParameters.containskey("UnassignedThreshold")){ $PropertyHash += @{UnassignedThreshold = $UnassignedThreshold} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePersonalAutoGrowRestConfiguration')
    Return $ReturnObject    
}
function New-NmePersonalAutoShrinkRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmePersonalAutoShrinkRestConfiguration, for use in other Nme module commands

    .PARAMETER Action

    string. Valid values are: DeleteVm

    .PARAMETER HostIdleDaysThreshold

    integer.

    .PARAMETER DeletionDelay

    integer.

    .PARAMETER ExludedObjects

    An array of objects of type NmeADObjectRestModel. Can be created using New-NmeADObjectRestModel

    .PARAMETER IsNotificationsEnabled

    boolean. Specify -IsNotificationsEnabled $True or -IsNotificationsEnabled $False.

    .PARAMETER ExcludeUnassigned

    boolean. Specify -ExcludeUnassigned $True or -ExcludeUnassigned $False.

    .PARAMETER NotificationMailbox

    string.

    .PARAMETER AdminNotificationEmails

    array.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("DeleteVm")][string]$Action,
        [Parameter(Mandatory=$true)][int]$HostIdleDaysThreshold,
        [Parameter(Mandatory=$true)][int]$DeletionDelay,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeADObjectRestModel"})]$ExludedObjects,
        [bool]$IsNotificationsEnabled,
        [bool]$ExcludeUnassigned,
        [string]$NotificationMailbox,
        [string[]]$AdminNotificationEmails
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Action")){ $PropertyHash += @{Action = $Action} }
    if ($PSBoundParameters.containskey("HostIdleDaysThreshold")){ $PropertyHash += @{HostIdleDaysThreshold = $HostIdleDaysThreshold} }
    if ($PSBoundParameters.containskey("DeletionDelay")){ $PropertyHash += @{DeletionDelay = $DeletionDelay} }
    if ($PSBoundParameters.containskey("ExludedObjects")){ $PropertyHash += @{ExludedObjects = $ExludedObjects} }
    if ($PSBoundParameters.containskey("IsNotificationsEnabled")){ $PropertyHash += @{IsNotificationsEnabled = $IsNotificationsEnabled} }
    if ($PSBoundParameters.containskey("ExcludeUnassigned")){ $PropertyHash += @{ExcludeUnassigned = $ExcludeUnassigned} }
    if ($PSBoundParameters.containskey("NotificationMailbox")){ $PropertyHash += @{NotificationMailbox = $NotificationMailbox} }
    if ($PSBoundParameters.containskey("AdminNotificationEmails")){ $PropertyHash += @{AdminNotificationEmails = $AdminNotificationEmails} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePersonalAutoShrinkRestConfiguration')
    Return $ReturnObject    
}
function New-NmePersonalParams {
    <#

    .SYNOPSIS

    Creates an object of type NmePersonalParams, for use in other Nme module commands

    .PARAMETER AssignmentType

    string. Valid values are: Automatic, Direct

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("Automatic","Direct")][string]$AssignmentType
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("AssignmentType")){ $PropertyHash += @{AssignmentType = $AssignmentType} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePersonalParams')
    Return $ReturnObject    
}
function New-NmePooledParams {
    <#

    .SYNOPSIS

    Creates an object of type NmePooledParams, for use in other Nme module commands

    .PARAMETER IsDesktop

    boolean. Specify -IsDesktop $True or -IsDesktop $False.

    .PARAMETER IsSingleUser

    boolean. Specify -IsSingleUser $True or -IsSingleUser $False.

    .PARAMETER IsDekstop

    DEPRECATED

    #>

    [cmdletbinding()]
    Param(
        [bool]$IsDesktop,
        [Parameter(Mandatory=$true)][bool]$IsSingleUser,
        [bool]$IsDekstop
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsDesktop")){ $PropertyHash += @{IsDesktop = $IsDesktop} }
    if ($PSBoundParameters.containskey("IsSingleUser")){ $PropertyHash += @{IsSingleUser = $IsSingleUser} }
    if ($PSBoundParameters.containskey("IsDekstop")){ $PropertyHash += @{IsDekstop = $IsDekstop} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePooledParams')
    Return $ReturnObject    
}
function New-NmePowerStateCommandPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmePowerStateCommandPayload, for use in other Nme module commands

    .PARAMETER Command

    string. Valid values are: Restart, Stop, Start

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("Restart","Stop","Start")][string]$Command
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Command")){ $PropertyHash += @{Command = $Command} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePowerStateCommandPayload')
    Return $ReturnObject    
}
function New-NmePowerStateCommandRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmePowerStateCommandRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmePowerStateCommandPayload. Can be created using New-NmePowerStateCommandPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmePowerStateCommandPayload"){$true} else{throw "$_ is not a NmePowerStateCommandPayload object. Use New-NmePowerStateCommandPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePowerStateCommandRequest')
    Return $ReturnObject    
}
function New-NmePreStageHostsConfigurationItem {
    <#

    .SYNOPSIS

    Creates an object of type NmePreStageHostsConfigurationItem, for use in other Nme module commands

    .PARAMETER Days

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER StartWork

    An object of type NmeTimeIntervalWithTimeZone. Can be created using New-NmeTimeIntervalWithTimeZone

    .PARAMETER HostsToBeReady

    integer.

    .PARAMETER PreStageDiskType

    boolean. Specify -PreStageDiskType $True or -PreStageDiskType $False.

    .PARAMETER PreStageUnassigned

    boolean. Specify -PreStageUnassigned $True or -PreStageUnassigned $False.

    .PARAMETER PreStageUnassignedHosts

    boolean. Specify -PreStageUnassignedHosts $True or -PreStageUnassignedHosts $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet(0,1,2,3,4,5,6)][Int]$Days,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeTimeIntervalWithTimeZone"){$true} else{throw "$_ is not a NmeTimeIntervalWithTimeZone object. Use New-NmeTimeIntervalWithTimeZone to create before calling this function"}})][psobject]$StartWork,
        [Parameter(Mandatory=$true)][int]$HostsToBeReady,
        [bool]$PreStageDiskType,
        [bool]$PreStageUnassigned,
        [bool]$PreStageUnassignedHosts
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Days")){ $PropertyHash += @{Days = $Days} }
    if ($PSBoundParameters.containskey("StartWork")){ $PropertyHash += @{StartWork = $StartWork} }
    if ($PSBoundParameters.containskey("HostsToBeReady")){ $PropertyHash += @{HostsToBeReady = $HostsToBeReady} }
    if ($PSBoundParameters.containskey("PreStageDiskType")){ $PropertyHash += @{PreStageDiskType = $PreStageDiskType} }
    if ($PSBoundParameters.containskey("PreStageUnassigned")){ $PropertyHash += @{PreStageUnassigned = $PreStageUnassigned} }
    if ($PSBoundParameters.containskey("PreStageUnassignedHosts")){ $PropertyHash += @{PreStageUnassignedHosts = $PreStageUnassignedHosts} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePreStageHostsConfigurationItem')
    Return $ReturnObject    
}
function New-NmePreStateHostsConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmePreStateHostsConfiguration, for use in other Nme module commands

    .PARAMETER Enable

    boolean. Specify -Enable $True or -Enable $False.

    .PARAMETER Config

    An object of type NmePreStageHostsConfigurationItem. Can be created using New-NmePreStageHostsConfigurationItem

    .PARAMETER IsMultipleConfigsMode

    boolean. Specify -IsMultipleConfigsMode $True or -IsMultipleConfigsMode $False.

    .PARAMETER Configs

    An array of objects of type NmePreStageHostsConfigurationItem. Can be created using New-NmePreStageHostsConfigurationItem

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enable,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmePreStageHostsConfigurationItem"){$true} else{throw "$_ is not a NmePreStageHostsConfigurationItem object. Use New-NmePreStageHostsConfigurationItem to create before calling this function"}})][psobject]$Config,
        [bool]$IsMultipleConfigsMode,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmePreStageHostsConfigurationItem"})]$Configs
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enable")){ $PropertyHash += @{Enable = $Enable} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    if ($PSBoundParameters.containskey("IsMultipleConfigsMode")){ $PropertyHash += @{IsMultipleConfigsMode = $IsMultipleConfigsMode} }
    if ($PSBoundParameters.containskey("Configs")){ $PropertyHash += @{Configs = $Configs} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmePreStateHostsConfiguration')
    Return $ReturnObject    
}
function New-NmeRbacAssignmentRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeRbacAssignmentRestModel, for use in other Nme module commands

    .PARAMETER ObjectId

    The GUID of an Azure AD object (user, group, or service principal) to which this RBAC role is assigned

    .PARAMETER ObjectType

    string. Valid values are: User, Group, ServicePrincipal

    .PARAMETER Role

    string.

    .PARAMETER AvdWorkspaces

    An NmeWorkspaceScopeUpdateRestModel object, as created by New-NmeWorkspaceScopeUpdateRestModel

    #>

    [cmdletbinding()]
    Param(
        [string]$ObjectId,
        [ValidateSet("User","Group","ServicePrincipal")][string]$ObjectType,
        [string]$Role,
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeWorkspaceScopeRestModel"})]$AvdWorkspaces
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ObjectId")){ $PropertyHash += @{ObjectId = $ObjectId} }
    if ($PSBoundParameters.containskey("ObjectType")){ $PropertyHash += @{ObjectType = $ObjectType} }
    if ($PSBoundParameters.containskey("Role")){ $PropertyHash += @{Role = $Role} }
    if ($PSBoundParameters.containskey("AvdWorkspaces")){ $PropertyHash += @{AvdWorkspaces = $AvdWorkspaces} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRbacAssignmentRestModel')
    Return $ReturnObject    
}
function New-NmeRbacAssignmentUpdateRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeRbacAssignmentUpdateRestModel, for use in other Nme module commands

    .PARAMETER AvdWorkspaces

    An NmeWorkspaceScopeUpdateRestModel object, as created by New-NmeWorkspaceScopeUpdateRestModel

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeWorkspaceScopeUpdateRestModel"})]$AvdWorkspaces
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("AvdWorkspaces")){ $PropertyHash += @{AvdWorkspaces = $AvdWorkspaces} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRbacAssignmentUpdateRestModel')
    Return $ReturnObject    
}
function New-NmeRefreshVmRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeRefreshVmRestConfiguration, for use in other Nme module commands

    .PARAMETER ImageId

    GUID of App Attach Image

    .PARAMETER AdConfigId

    integer.

    #>

    [cmdletbinding()]
    Param(
        [string]$ImageId,
        [int]$AdConfigId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ImageId")){ $PropertyHash += @{ImageId = $ImageId} }
    if ($PSBoundParameters.containskey("AdConfigId")){ $PropertyHash += @{AdConfigId = $AdConfigId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRefreshVmRestConfiguration')
    Return $ReturnObject    
}
function New-NmeReimageConcurrency {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageConcurrency, for use in other Nme module commands

    .PARAMETER Tasks

    integer.

    .PARAMETER MaxFailedTasks

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$Tasks,
        [Parameter(Mandatory=$true)][int]$MaxFailedTasks
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Tasks")){ $PropertyHash += @{Tasks = $Tasks} }
    if ($PSBoundParameters.containskey("MaxFailedTasks")){ $PropertyHash += @{MaxFailedTasks = $MaxFailedTasks} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageConcurrency')
    Return $ReturnObject    
}
function New-NmeReimageHostPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageHostPayload, for use in other Nme module commands

    .PARAMETER ReimageParams

    An object of type NmeReimageParams. Can be created using New-NmeReimageParams

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageParams"){$true} else{throw "$_ is not a NmeReimageParams object. Use New-NmeReimageParams to create before calling this function"}})][psobject]$ReimageParams
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ReimageParams")){ $PropertyHash += @{ReimageParams = $ReimageParams} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageHostPayload')
    Return $ReturnObject    
}
function New-NmeReimageHostRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageHostRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeReimageHostPayload. Can be created using New-NmeReimageHostPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageHostPayload"){$true} else{throw "$_ is not a NmeReimageHostPayload object. Use New-NmeReimageHostPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageHostRequest')
    Return $ReturnObject    
}
function New-NmeReimageMessaging {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageMessaging, for use in other Nme module commands

    .PARAMETER Message

    string.

    .PARAMETER DelayMinutes

    integer.

    .PARAMETER LogOffAggressiveness

    string. Valid values are: Force, Wait

    .PARAMETER DeactivateBeforeOperation

    boolean. Specify -DeactivateBeforeOperation $True or -DeactivateBeforeOperation $False.

    .PARAMETER TimeoutInDays

    integer.

    #>

    [cmdletbinding()]
    Param(
        [string]$Message,
        [int]$DelayMinutes,
        [ValidateSet("Force","Wait")][string]$LogOffAggressiveness,
        [bool]$DeactivateBeforeOperation,
        [int]$TimeoutInDays
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Message")){ $PropertyHash += @{Message = $Message} }
    if ($PSBoundParameters.containskey("DelayMinutes")){ $PropertyHash += @{DelayMinutes = $DelayMinutes} }
    if ($PSBoundParameters.containskey("LogOffAggressiveness")){ $PropertyHash += @{LogOffAggressiveness = $LogOffAggressiveness} }
    if ($PSBoundParameters.containskey("DeactivateBeforeOperation")){ $PropertyHash += @{DeactivateBeforeOperation = $DeactivateBeforeOperation} }
    if ($PSBoundParameters.containskey("TimeoutInDays")){ $PropertyHash += @{TimeoutInDays = $TimeoutInDays} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageMessaging')
    Return $ReturnObject    
}
function New-NmeReimageParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageParams, for use in other Nme module commands

    .PARAMETER Image

    string.

    .PARAMETER VmSize

    string.

    .PARAMETER StorageType

    string.

    .PARAMETER DiskSize

    integer.

    .PARAMETER HasEphemeralOSDisk

    boolean. Specify -HasEphemeralOSDisk $True or -HasEphemeralOSDisk $False.

    .PARAMETER SetToDrainModeWhileProcessing

    boolean. Specify -SetToDrainModeWhileProcessing $True or -SetToDrainModeWhileProcessing $False.

    .PARAMETER EphemeralOSDiskPlacement

    string. Valid values are: CacheDisk, ResourceDisk

    #>

    [cmdletbinding()]
    Param(
        [string]$Image,
        [string]$VmSize,
        [string]$StorageType,
        [int]$DiskSize,
        [bool]$HasEphemeralOSDisk,
        [bool]$SetToDrainModeWhileProcessing,
        [ValidateSet("CacheDisk","ResourceDisk")][string]$EphemeralOSDiskPlacement
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Image")){ $PropertyHash += @{Image = $Image} }
    if ($PSBoundParameters.containskey("VmSize")){ $PropertyHash += @{VmSize = $VmSize} }
    if ($PSBoundParameters.containskey("StorageType")){ $PropertyHash += @{StorageType = $StorageType} }
    if ($PSBoundParameters.containskey("DiskSize")){ $PropertyHash += @{DiskSize = $DiskSize} }
    if ($PSBoundParameters.containskey("HasEphemeralOSDisk")){ $PropertyHash += @{HasEphemeralOSDisk = $HasEphemeralOSDisk} }
    if ($PSBoundParameters.containskey("SetToDrainModeWhileProcessing")){ $PropertyHash += @{SetToDrainModeWhileProcessing = $SetToDrainModeWhileProcessing} }
    if ($PSBoundParameters.containskey("EphemeralOSDiskPlacement")){ $PropertyHash += @{EphemeralOSDiskPlacement = $EphemeralOSDiskPlacement} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageParams')
    Return $ReturnObject    
}
function New-NmeReimagePoolPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimagePoolPayload, for use in other Nme module commands

    .PARAMETER ReimageParams

    An object of type NmeReimageParams. Can be created using New-NmeReimageParams

    .PARAMETER Concurrency

    An object of type NmeReimageConcurrency. Can be created using New-NmeReimageConcurrency

    .PARAMETER Messaging

    An object of type NmeReimageMessaging. Can be created using New-NmeReimageMessaging

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageParams"){$true} else{throw "$_ is not a NmeReimageParams object. Use New-NmeReimageParams to create before calling this function"}})][psobject]$ReimageParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageConcurrency"){$true} else{throw "$_ is not a NmeReimageConcurrency object. Use New-NmeReimageConcurrency to create before calling this function"}})][psobject]$Concurrency,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageMessaging"){$true} else{throw "$_ is not a NmeReimageMessaging object. Use New-NmeReimageMessaging to create before calling this function"}})][psobject]$Messaging
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ReimageParams")){ $PropertyHash += @{ReimageParams = $ReimageParams} }
    if ($PSBoundParameters.containskey("Concurrency")){ $PropertyHash += @{Concurrency = $Concurrency} }
    if ($PSBoundParameters.containskey("Messaging")){ $PropertyHash += @{Messaging = $Messaging} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimagePoolPayload')
    Return $ReturnObject    
}
function New-NmeReimagePoolRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimagePoolRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeReimagePoolPayload. Can be created using New-NmeReimagePoolPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimagePoolPayload"){$true} else{throw "$_ is not a NmeReimagePoolPayload object. Use New-NmeReimagePoolPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimagePoolRequest')
    Return $ReturnObject    
}
function New-NmeReimageScheduledBulkJobParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeReimageScheduledBulkJobParams, for use in other Nme module commands

    .PARAMETER JobParams

    An object of type NmeReimageParams. Can be created using New-NmeReimageParams

    .PARAMETER Schedule

    An object of type NmeHostpoolScheduleRestModel. Can be created using New-NmeHostpoolScheduleRestModel

    .PARAMETER BulkJobParams

    An object of type NmeBulkJobParamsWithLogOffAggresiveness. Can be created using New-NmeBulkJobParamsWithLogOffAggresiveness

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimageParams"){$true} else{throw "$_ is not a NmeReimageParams object. Use New-NmeReimageParams to create before calling this function"}})][psobject]$JobParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostpoolScheduleRestModel"){$true} else{throw "$_ is not a NmeHostpoolScheduleRestModel object. Use New-NmeHostpoolScheduleRestModel to create before calling this function"}})][psobject]$Schedule,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeBulkJobParamsWithLogOffAggresiveness"){$true} else{throw "$_ is not a NmeBulkJobParamsWithLogOffAggresiveness object. Use New-NmeBulkJobParamsWithLogOffAggresiveness to create before calling this function"}})][psobject]$BulkJobParams
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobParams")){ $PropertyHash += @{JobParams = $JobParams} }
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    if ($PSBoundParameters.containskey("BulkJobParams")){ $PropertyHash += @{BulkJobParams = $BulkJobParams} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeReimageScheduledBulkJobParams')
    Return $ReturnObject    
}
function New-NmeRemoveSessionHostPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeRemoveSessionHostPayload, for use in other Nme module commands

    .PARAMETER SkipAdRemoval

    boolean. Specify -SkipAdRemoval $True or -SkipAdRemoval $False.

    .PARAMETER ForceRemoveWVDRecord

    boolean. Specify -ForceRemoveWVDRecord $True or -ForceRemoveWVDRecord $False.

    .PARAMETER RemoveUsedVmName

    boolean. Specify -RemoveUsedVmName $True or -RemoveUsedVmName $False.

    #>

    [cmdletbinding()]
    Param(
        [bool]$SkipAdRemoval,
        [bool]$ForceRemoveWVDRecord,
        [bool]$RemoveUsedVmName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SkipAdRemoval")){ $PropertyHash += @{SkipAdRemoval = $SkipAdRemoval} }
    if ($PSBoundParameters.containskey("ForceRemoveWVDRecord")){ $PropertyHash += @{ForceRemoveWVDRecord = $ForceRemoveWVDRecord} }
    if ($PSBoundParameters.containskey("RemoveUsedVmName")){ $PropertyHash += @{RemoveUsedVmName = $RemoveUsedVmName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRemoveSessionHostPayload')
    Return $ReturnObject    
}
function New-NmeRemoveSessionHostRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeRemoveSessionHostRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeRemoveSessionHostPayload. Can be created using New-NmeRemoveSessionHostPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRemoveSessionHostPayload"){$true} else{throw "$_ is not a NmeRemoveSessionHostPayload object. Use New-NmeRemoveSessionHostPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRemoveSessionHostRequest')
    Return $ReturnObject    
}
function New-NmeResponseWithJob {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithJob, for use in other Nme module commands

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithJob')
    Return $ReturnObject    
}
function New-NmeResponseWithJobAndAppAttachImageRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithJobAndAppAttachImageRestModel, for use in other Nme module commands

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    .PARAMETER Payload

    An object of type NmeAppAttachImageRestModel. Can be created using New-NmeAppAttachImageRestModel

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAppAttachImageRestModel"){$true} else{throw "$_ is not a NmeAppAttachImageRestModel object. Use New-NmeAppAttachImageRestModel to create before calling this function"}})][psobject]$Payload
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    if ($PSBoundParameters.containskey("Payload")){ $PropertyHash += @{Payload = $Payload} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithJobAndAppAttachImageRestModel')
    Return $ReturnObject    
}
function New-NmeResponseWithJobAndArmWorkspace {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithJobAndArmWorkspace, for use in other Nme module commands

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    .PARAMETER Payload

    An object of type NmeArmWorkspace. Can be created using New-NmeArmWorkspace

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeArmWorkspace"){$true} else{throw "$_ is not a NmeArmWorkspace object. Use New-NmeArmWorkspace to create before calling this function"}})][psobject]$Payload
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    if ($PSBoundParameters.containskey("Payload")){ $PropertyHash += @{Payload = $Payload} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithJobAndArmWorkspace')
    Return $ReturnObject    
}
function New-NmeResponseWithJobAndRbacAssignmentRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithJobAndRbacAssignmentRestModel, for use in other Nme module commands

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    .PARAMETER Payload

    An object of type NmeRbacAssignmentRestModel. Can be created using New-NmeRbacAssignmentRestModel

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRbacAssignmentRestModel"){$true} else{throw "$_ is not a NmeRbacAssignmentRestModel object. Use New-NmeRbacAssignmentRestModel to create before calling this function"}})][psobject]$Payload
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    if ($PSBoundParameters.containskey("Payload")){ $PropertyHash += @{Payload = $Payload} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithJobAndRbacAssignmentRestModel')
    Return $ReturnObject    
}
function New-NmeResponseWithJobAndScriptedAction {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithJobAndScriptedAction, for use in other Nme module commands

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    .PARAMETER Payload

    An object of type NmeScriptedAction. Can be created using New-NmeScriptedAction

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScriptedAction"){$true} else{throw "$_ is not a NmeScriptedAction object. Use New-NmeScriptedAction to create before calling this function"}})][psobject]$Payload
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    if ($PSBoundParameters.containskey("Payload")){ $PropertyHash += @{Payload = $Payload} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithJobAndScriptedAction')
    Return $ReturnObject    
}
function New-NmeResponseWithMultipleJobs_BackwardCompatibility {
    <#

    .SYNOPSIS

    Creates an object of type NmeResponseWithMultipleJobs_BackwardCompatibility, for use in other Nme module commands

    .PARAMETER Jobs

    An array of objects of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    .PARAMETER Job

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    #>

    [cmdletbinding()]
    Param(
        [psobject[]][ValidateScript({$_.PSObject.TypeNames -contains "NmeJobShortInfo"})]$Jobs,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$Job
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Jobs")){ $PropertyHash += @{Jobs = $Jobs} }
    if ($PSBoundParameters.containskey("Job")){ $PropertyHash += @{Job = $Job} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeResponseWithMultipleJobs_BackwardCompatibility')
    Return $ReturnObject    
}
function New-NmeRunAzureScripedActionPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunAzureScripedActionPayload, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER AdConfigId

    integer.

    .PARAMETER MinutesToWait

    integer.

    .PARAMETER ParamsBindings

    object.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$SubscriptionId,
        [int]$AdConfigId,
        [int]$MinutesToWait,
        $ParamsBindings
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("AdConfigId")){ $PropertyHash += @{AdConfigId = $AdConfigId} }
    if ($PSBoundParameters.containskey("MinutesToWait")){ $PropertyHash += @{MinutesToWait = $MinutesToWait} }
    if ($PSBoundParameters.containskey("ParamsBindings")){ $PropertyHash += @{ParamsBindings = $ParamsBindings} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunAzureScripedActionPayload')
    Return $ReturnObject    
}
function New-NmeRunCustomScriptOnVmRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunCustomScriptOnVmRestModel, for use in other Nme module commands

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    .PARAMETER ActiveDirectoryId

    ID of Active Directory profile to be sent with this scripted action. Can be retrieved by running Get-NmeAdConfig

    .PARAMETER RestartVm

    Specify a boolean value. Use -restartVM $True if you wish to restart the VM after executing the script

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int[]]$ScriptedActionsIds,
        [int]$ActiveDirectoryId,
        [Parameter(Mandatory=$true)][bool]$RestartVm
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    if ($PSBoundParameters.containskey("ActiveDirectoryId")){ $PropertyHash += @{ActiveDirectoryId = $ActiveDirectoryId} }
    if ($PSBoundParameters.containskey("RestartVm")){ $PropertyHash += @{RestartVm = $RestartVm} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunCustomScriptOnVmRestModel')
    Return $ReturnObject    
}
function New-NmeRunHostPoolScriptRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunHostPoolScriptRestPayload, for use in other Nme module commands

    .PARAMETER Config

    An object of type NmeRunScriptParams. Can be created using New-NmeRunScriptParams

    .PARAMETER BulkJobParams

    An object of type NmeBulkJobParamsWithRestartAndHosts. Can be created using New-NmeBulkJobParamsWithRestartAndHosts

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunScriptParams"){$true} else{throw "$_ is not a NmeRunScriptParams object. Use New-NmeRunScriptParams to create before calling this function"}})][psobject]$Config,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeBulkJobParamsWithRestartAndHosts"){$true} else{throw "$_ is not a NmeBulkJobParamsWithRestartAndHosts object. Use New-NmeBulkJobParamsWithRestartAndHosts to create before calling this function"}})][psobject]$BulkJobParams
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    if ($PSBoundParameters.containskey("BulkJobParams")){ $PropertyHash += @{BulkJobParams = $BulkJobParams} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunHostPoolScriptRestPayload')
    Return $ReturnObject    
}
function New-NmeRunHostPoolScriptRestRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunHostPoolScriptRestRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeRunHostPoolScriptRestPayload. Can be created using New-NmeRunHostPoolScriptRestPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunHostPoolScriptRestPayload"){$true} else{throw "$_ is not a NmeRunHostPoolScriptRestPayload object. Use New-NmeRunHostPoolScriptRestPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunHostPoolScriptRestRequest')
    Return $ReturnObject    
}
function New-NmeRunScriptParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunScriptParams, for use in other Nme module commands

    .PARAMETER ActiveDirectoryId

    ID of Active Directory profile to be sent with this scripted action. Can be retrieved by running Get-NmeAdConfig

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    #>

    [cmdletbinding()]
    Param(
        [int]$ActiveDirectoryId,
        [int[]]$ScriptedActionsIds
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("ActiveDirectoryId")){ $PropertyHash += @{ActiveDirectoryId = $ActiveDirectoryId} }
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunScriptParams')
    Return $ReturnObject    
}
function New-NmeRunScriptScheduledBulkJobParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeRunScriptScheduledBulkJobParams, for use in other Nme module commands

    .PARAMETER JobParams

    An object of type NmeRunScriptParams. Can be created using New-NmeRunScriptParams

    .PARAMETER Schedule

    An object of type NmeHostpoolScheduleRestModel. Can be created using New-NmeHostpoolScheduleRestModel

    .PARAMETER BulkJobParams

    An object of type NmeBulkJobParamsWithRestart. Can be created using New-NmeBulkJobParamsWithRestart

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunScriptParams"){$true} else{throw "$_ is not a NmeRunScriptParams object. Use New-NmeRunScriptParams to create before calling this function"}})][psobject]$JobParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostpoolScheduleRestModel"){$true} else{throw "$_ is not a NmeHostpoolScheduleRestModel object. Use New-NmeHostpoolScheduleRestModel to create before calling this function"}})][psobject]$Schedule,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeBulkJobParamsWithRestart"){$true} else{throw "$_ is not a NmeBulkJobParamsWithRestart object. Use New-NmeBulkJobParamsWithRestart to create before calling this function"}})][psobject]$BulkJobParams
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobParams")){ $PropertyHash += @{JobParams = $JobParams} }
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    if ($PSBoundParameters.containskey("BulkJobParams")){ $PropertyHash += @{BulkJobParams = $BulkJobParams} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeRunScriptScheduledBulkJobParams')
    Return $ReturnObject    
}
function New-NmeScaleIntimeRestrictionConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeScaleIntimeRestrictionConfiguration, for use in other Nme module commands

    .PARAMETER Enable

    boolean. Specify -Enable $True or -Enable $False.

    .PARAMETER TimeRange

    An object of type NmeTimeRangeWithTimeZone. Can be created using New-NmeTimeRangeWithTimeZone

    .PARAMETER PutToDrainMode

    boolean. Specify -PutToDrainMode $True or -PutToDrainMode $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enable,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeTimeRangeWithTimeZone"){$true} else{throw "$_ is not a NmeTimeRangeWithTimeZone object. Use New-NmeTimeRangeWithTimeZone to create before calling this function"}})][psobject]$TimeRange,
        [bool]$PutToDrainMode
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enable")){ $PropertyHash += @{Enable = $Enable} }
    if ($PSBoundParameters.containskey("TimeRange")){ $PropertyHash += @{TimeRange = $TimeRange} }
    if ($PSBoundParameters.containskey("PutToDrainMode")){ $PropertyHash += @{PutToDrainMode = $PutToDrainMode} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScaleIntimeRestrictionConfiguration')
    Return $ReturnObject    
}
function New-NmeScheduleAzureScripedActionPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeScheduleAzureScripedActionPayload, for use in other Nme module commands

    .PARAMETER Schedule

    An object of type NmeScheduleConfigurationPayloadRest. Can be created using New-NmeScheduleConfigurationPayloadRest

    .PARAMETER Config

    An object of type NmeRunAzureScripedActionPayload. Can be created using New-NmeRunAzureScripedActionPayload

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScheduleConfigurationPayloadRest"){$true} else{throw "$_ is not a NmeScheduleConfigurationPayloadRest object. Use New-NmeScheduleConfigurationPayloadRest to create before calling this function"}})][psobject]$Schedule,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunAzureScripedActionPayload"){$true} else{throw "$_ is not a NmeRunAzureScripedActionPayload object. Use New-NmeRunAzureScripedActionPayload to create before calling this function"}})][psobject]$Config
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScheduleAzureScripedActionPayload')
    Return $ReturnObject    
}
function New-NmeScheduleConfigurationPayloadRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeScheduleConfigurationPayloadRest, for use in other Nme module commands

    .PARAMETER StartDate

    string.

    .PARAMETER StartHour

    integer.

    .PARAMETER StartMinutes

    integer.

    .PARAMETER TimeZoneId

    string.

    .PARAMETER ScheduleRecurrenceType

    string. Valid values are: Once, Daily, Weekly, Monthly, Hourly, PatchTuesday

    .PARAMETER DayOfWeekNumber

    string. Valid values are: First, Second, Third, Fourth, Last

    .PARAMETER DayOfWeek

    integer. Valid values are: 0, 1, 2, 3, 4, 5, 6

    .PARAMETER OffsetInDays

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$StartDate,
        [Parameter(Mandatory=$true)][int]$StartHour,
        [Parameter(Mandatory=$true)][int]$StartMinutes,
        [Parameter(Mandatory=$true)][string]$TimeZoneId,
        [Parameter(Mandatory=$true)][ValidateSet("Once","Daily","Weekly","Monthly","Hourly","PatchTuesday")][string]$ScheduleRecurrenceType,
        [ValidateSet("First","Second","Third","Fourth","Last")][string]$DayOfWeekNumber,
        [ValidateSet("0","1","2","3","4","5","6")][int]$DayOfWeek,
        [int]$OffsetInDays
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StartDate")){ $PropertyHash += @{StartDate = $StartDate} }
    if ($PSBoundParameters.containskey("StartHour")){ $PropertyHash += @{StartHour = $StartHour} }
    if ($PSBoundParameters.containskey("StartMinutes")){ $PropertyHash += @{StartMinutes = $StartMinutes} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    if ($PSBoundParameters.containskey("ScheduleRecurrenceType")){ $PropertyHash += @{ScheduleRecurrenceType = $ScheduleRecurrenceType} }
    if ($PSBoundParameters.containskey("DayOfWeekNumber")){ $PropertyHash += @{DayOfWeekNumber = $DayOfWeekNumber} }
    if ($PSBoundParameters.containskey("DayOfWeek")){ $PropertyHash += @{DayOfWeek = $DayOfWeek} }
    if ($PSBoundParameters.containskey("OffsetInDays")){ $PropertyHash += @{OffsetInDays = $OffsetInDays} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScheduleConfigurationPayloadRest')
    Return $ReturnObject    
}
function New-NmeScheduleHostPoolScriptRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeScheduleHostPoolScriptRestPayload, for use in other Nme module commands

    .PARAMETER Config

    An object of type NmeRunScriptParams. Can be created using New-NmeRunScriptParams

    .PARAMETER BulkJobParams

    An object of type NmeBulkJobParamsWithRestart. Can be created using New-NmeBulkJobParamsWithRestart

    .PARAMETER Schedule

    An object of type NmeScheduleConfigurationPayloadRest. Can be created using New-NmeScheduleConfigurationPayloadRest

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunScriptParams"){$true} else{throw "$_ is not a NmeRunScriptParams object. Use New-NmeRunScriptParams to create before calling this function"}})][psobject]$Config,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeBulkJobParamsWithRestart"){$true} else{throw "$_ is not a NmeBulkJobParamsWithRestart object. Use New-NmeBulkJobParamsWithRestart to create before calling this function"}})][psobject]$BulkJobParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScheduleConfigurationPayloadRest"){$true} else{throw "$_ is not a NmeScheduleConfigurationPayloadRest object. Use New-NmeScheduleConfigurationPayloadRest to create before calling this function"}})][psobject]$Schedule
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    if ($PSBoundParameters.containskey("BulkJobParams")){ $PropertyHash += @{BulkJobParams = $BulkJobParams} }
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScheduleHostPoolScriptRestPayload')
    Return $ReturnObject    
}
function New-NmeScheduleReimagePoolRestPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeScheduleReimagePoolRestPayload, for use in other Nme module commands

    .PARAMETER Reimage

    An object of type NmeReimagePoolPayload. Can be created using New-NmeReimagePoolPayload

    .PARAMETER Schedule

    An object of type NmeScheduleConfigurationPayloadRest. Can be created using New-NmeScheduleConfigurationPayloadRest

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeReimagePoolPayload"){$true} else{throw "$_ is not a NmeReimagePoolPayload object. Use New-NmeReimagePoolPayload to create before calling this function"}})][psobject]$Reimage,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScheduleConfigurationPayloadRest"){$true} else{throw "$_ is not a NmeScheduleConfigurationPayloadRest object. Use New-NmeScheduleConfigurationPayloadRest to create before calling this function"}})][psobject]$Schedule
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Reimage")){ $PropertyHash += @{Reimage = $Reimage} }
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScheduleReimagePoolRestPayload')
    Return $ReturnObject    
}
function New-NmeScheduleRunCustomScriptOnVmRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeScheduleRunCustomScriptOnVmRestModel, for use in other Nme module commands

    .PARAMETER Schedule

    An object of type NmeScheduleConfigurationPayloadRest. Can be created using New-NmeScheduleConfigurationPayloadRest

    .PARAMETER Config

    An object of type NmeRunCustomScriptOnVmRestModel. Can be created using New-NmeRunCustomScriptOnVmRestModel

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeScheduleConfigurationPayloadRest"){$true} else{throw "$_ is not a NmeScheduleConfigurationPayloadRest object. Use New-NmeScheduleConfigurationPayloadRest to create before calling this function"}})][psobject]$Schedule,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunCustomScriptOnVmRestModel"){$true} else{throw "$_ is not a NmeRunCustomScriptOnVmRestModel object. Use New-NmeRunCustomScriptOnVmRestModel to create before calling this function"}})][psobject]$Config
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScheduleRunCustomScriptOnVmRestModel')
    Return $ReturnObject    
}
function New-NmeScriptedAction {
    <#

    .SYNOPSIS

    Creates an object of type NmeScriptedAction, for use in other Nme module commands

    .PARAMETER Id

    ID of scripted Action

    .PARAMETER Name

    The name of the resource

    .PARAMETER Description

    string.

    .PARAMETER Script

    string.

    .PARAMETER ExecutionMode

    string. Valid values are: Combined, Individual, IndividualWithRestart

    .PARAMETER ExecutionEnvironment

    string. Valid values are: CustomScript, AzureAutomation

    .PARAMETER ExecutionTimeout

    integer.

    .PARAMETER Tags

    array.

    #>

    [cmdletbinding()]
    Param(
        [int]$Id,
        [string]$Name,
        [string]$Description,
        [string]$Script,
        [ValidateSet("Combined","Individual","IndividualWithRestart")][string]$ExecutionMode,
        [ValidateSet("CustomScript","AzureAutomation")][string]$ExecutionEnvironment,
        [int]$ExecutionTimeout,
        [string[]]$Tags
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Id")){ $PropertyHash += @{Id = $Id} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("Description")){ $PropertyHash += @{Description = $Description} }
    if ($PSBoundParameters.containskey("Script")){ $PropertyHash += @{Script = $Script} }
    if ($PSBoundParameters.containskey("ExecutionMode")){ $PropertyHash += @{ExecutionMode = $ExecutionMode} }
    if ($PSBoundParameters.containskey("ExecutionEnvironment")){ $PropertyHash += @{ExecutionEnvironment = $ExecutionEnvironment} }
    if ($PSBoundParameters.containskey("ExecutionTimeout")){ $PropertyHash += @{ExecutionTimeout = $ExecutionTimeout} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScriptedAction')
    Return $ReturnObject    
}
function New-NmeScriptedActionScheduleRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeScriptedActionScheduleRestModel, for use in other Nme module commands

    .PARAMETER Schedule

    An object of type NmeExistingScheduleConfigurationPayloadRest. Can be created using New-NmeExistingScheduleConfigurationPayloadRest

    .PARAMETER Config

    An object of type NmeRunAzureScripedActionPayload. Can be created using New-NmeRunAzureScripedActionPayload

    #>

    [cmdletbinding()]
    Param(
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeExistingScheduleConfigurationPayloadRest"){$true} else{throw "$_ is not a NmeExistingScheduleConfigurationPayloadRest object. Use New-NmeExistingScheduleConfigurationPayloadRest to create before calling this function"}})][psobject]$Schedule,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRunAzureScripedActionPayload"){$true} else{throw "$_ is not a NmeRunAzureScripedActionPayload object. Use New-NmeRunAzureScripedActionPayload to create before calling this function"}})][psobject]$Config
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Schedule")){ $PropertyHash += @{Schedule = $Schedule} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeScriptedActionScheduleRestModel')
    Return $ReturnObject    
}
function New-NmeSecondaryRegionConfigurationRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeSecondaryRegionConfigurationRestModel, for use in other Nme module commands

    .PARAMETER Prefix

    string.

    .PARAMETER ResourceGroupId

    string.

    .PARAMETER NetworkId

    string.

    .PARAMETER Subnet

    string.

    #>

    [cmdletbinding()]
    Param(
        [string]$Prefix,
        [Parameter(Mandatory=$true)][string]$ResourceGroupId,
        [Parameter(Mandatory=$true)][string]$NetworkId,
        [Parameter(Mandatory=$true)][string]$Subnet
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Prefix")){ $PropertyHash += @{Prefix = $Prefix} }
    if ($PSBoundParameters.containskey("ResourceGroupId")){ $PropertyHash += @{ResourceGroupId = $ResourceGroupId} }
    if ($PSBoundParameters.containskey("NetworkId")){ $PropertyHash += @{NetworkId = $NetworkId} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSecondaryRegionConfigurationRestModel')
    Return $ReturnObject    
}
function New-NmeSecondaryRegionRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeSecondaryRegionRestModel, for use in other Nme module commands

    .PARAMETER Enabled

    boolean. Specify -Enabled $True or -Enabled $False.

    .PARAMETER Config

    An object of type NmeSecondaryRegionConfigurationRestModel. Can be created using New-NmeSecondaryRegionConfigurationRestModel

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enabled,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeSecondaryRegionConfigurationRestModel"){$true} else{throw "$_ is not a NmeSecondaryRegionConfigurationRestModel object. Use New-NmeSecondaryRegionConfigurationRestModel to create before calling this function"}})][psobject]$Config
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enabled")){ $PropertyHash += @{Enabled = $Enabled} }
    if ($PSBoundParameters.containskey("Config")){ $PropertyHash += @{Config = $Config} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSecondaryRegionRestModel')
    Return $ReturnObject    
}
function New-NmeSecureVariableRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeSecureVariableRestModel, for use in other Nme module commands

    .PARAMETER Name

    The name of the resource

    .PARAMETER ScriptedActions

    array.

    .PARAMETER AssignmentRequired

    boolean. Specify -AssignmentRequired $True or -AssignmentRequired $False.

    #>

    [cmdletbinding()]
    Param(
        [string]$Name,
        [int[]]$ScriptedActions,
        [bool]$AssignmentRequired
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("ScriptedActions")){ $PropertyHash += @{ScriptedActions = $ScriptedActions} }
    if ($PSBoundParameters.containskey("AssignmentRequired")){ $PropertyHash += @{AssignmentRequired = $AssignmentRequired} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSecureVariableRestModel')
    Return $ReturnObject    
}
function New-NmeServicePrincipalRestParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeServicePrincipalRestParams, for use in other Nme module commands

    .PARAMETER AppId

    string.

    .PARAMETER AppSecret

    string.

    .PARAMETER AzureType

    string. Valid values are: AzureCloud, AzureUSGovernment, AzureChina

    .PARAMETER AppName

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$AppId,
        [Parameter(Mandatory=$true)][string]$AppSecret,
        [Parameter(Mandatory=$true)][ValidateSet("AzureCloud","AzureUSGovernment","AzureChina")][string]$AzureType,
        [string]$AppName
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("AppId")){ $PropertyHash += @{AppId = $AppId} }
    if ($PSBoundParameters.containskey("AppSecret")){ $PropertyHash += @{AppSecret = $AppSecret} }
    if ($PSBoundParameters.containskey("AzureType")){ $PropertyHash += @{AzureType = $AzureType} }
    if ($PSBoundParameters.containskey("AppName")){ $PropertyHash += @{AppName = $AppName} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeServicePrincipalRestParams')
    Return $ReturnObject    
}
function New-NmeSessionHostParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeSessionHostParams, for use in other Nme module commands

    .PARAMETER VmId

    An object of type NmeVmObjectId. Can be created using New-NmeVmObjectId

    .PARAMETER VmSize

    string.

    .PARAMETER Image

    string.

    .PARAMETER StorageType

    string.

    .PARAMETER DiskSize

    integer.

    .PARAMETER NetworkId

    string.

    .PARAMETER Subnet

    string.

    .PARAMETER HasEphemeralOSDisk

    boolean. Specify -HasEphemeralOSDisk $True or -HasEphemeralOSDisk $False.

    .PARAMETER EphemeralOSDiskPlacement

    string. Valid values are: CacheDisk, ResourceDisk

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeVmObjectId"){$true} else{throw "$_ is not a NmeVmObjectId object. Use New-NmeVmObjectId to create before calling this function"}})][psobject]$VmId,
        [Parameter(Mandatory=$true)][string]$VmSize,
        [Parameter(Mandatory=$true)][string]$Image,
        [Parameter(Mandatory=$true)][string]$StorageType,
        [Parameter(Mandatory=$true)][int]$DiskSize,
        [Parameter(Mandatory=$true)][string]$NetworkId,
        [Parameter(Mandatory=$true)][string]$Subnet,
        [Parameter(Mandatory=$true)][bool]$HasEphemeralOSDisk,
        [ValidateSet("CacheDisk","ResourceDisk")][string]$EphemeralOSDiskPlacement
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("VmId")){ $PropertyHash += @{VmId = $VmId} }
    if ($PSBoundParameters.containskey("VmSize")){ $PropertyHash += @{VmSize = $VmSize} }
    if ($PSBoundParameters.containskey("Image")){ $PropertyHash += @{Image = $Image} }
    if ($PSBoundParameters.containskey("StorageType")){ $PropertyHash += @{StorageType = $StorageType} }
    if ($PSBoundParameters.containskey("DiskSize")){ $PropertyHash += @{DiskSize = $DiskSize} }
    if ($PSBoundParameters.containskey("NetworkId")){ $PropertyHash += @{NetworkId = $NetworkId} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    if ($PSBoundParameters.containskey("HasEphemeralOSDisk")){ $PropertyHash += @{HasEphemeralOSDisk = $HasEphemeralOSDisk} }
    if ($PSBoundParameters.containskey("EphemeralOSDiskPlacement")){ $PropertyHash += @{EphemeralOSDiskPlacement = $EphemeralOSDiskPlacement} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSessionHostParams')
    Return $ReturnObject    
}
function New-NmeSetAsImagePayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeSetAsImagePayload, for use in other Nme module commands

    .PARAMETER Changelog

    string.

    .PARAMETER PowerOnVm

    boolean. Specify -PowerOnVm $True or -PowerOnVm $False.

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    .PARAMETER GalleryImage

    An object of type NmeGalleryImageRestConfiguration. Can be created using New-NmeGalleryImageRestConfiguration

    .PARAMETER SkipRemoveProfiles

    boolean. Specify -SkipRemoveProfiles $True or -SkipRemoveProfiles $False.

    .PARAMETER Tags

    object.

    .PARAMETER InstallCertificates

    boolean. Specify -InstallCertificates $True or -InstallCertificates $False.

    .PARAMETER RetainOldImage

    boolean. Specify -RetainOldImage $True or -RetainOldImage $False.

    #>

    [cmdletbinding()]
    Param(
        [string]$Changelog,
        [bool]$PowerOnVm,
        [int[]]$ScriptedActionsIds,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeGalleryImageRestConfiguration"){$true} else{throw "$_ is not a NmeGalleryImageRestConfiguration object. Use New-NmeGalleryImageRestConfiguration to create before calling this function"}})][psobject]$GalleryImage,
        [bool]$SkipRemoveProfiles,
        [hashtable]$Tags,
        [bool]$InstallCertificates,
        [bool]$RetainOldImage
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Changelog")){ $PropertyHash += @{Changelog = $Changelog} }
    if ($PSBoundParameters.containskey("PowerOnVm")){ $PropertyHash += @{PowerOnVm = $PowerOnVm} }
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    if ($PSBoundParameters.containskey("GalleryImage")){ $PropertyHash += @{GalleryImage = $GalleryImage} }
    if ($PSBoundParameters.containskey("SkipRemoveProfiles")){ $PropertyHash += @{SkipRemoveProfiles = $SkipRemoveProfiles} }
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    if ($PSBoundParameters.containskey("InstallCertificates")){ $PropertyHash += @{InstallCertificates = $InstallCertificates} }
    if ($PSBoundParameters.containskey("RetainOldImage")){ $PropertyHash += @{RetainOldImage = $RetainOldImage} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSetAsImagePayload')
    Return $ReturnObject    
}
function New-NmeSetAsImageRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeSetAsImageRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeSetAsImagePayload. Can be created using New-NmeSetAsImagePayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeSetAsImagePayload"){$true} else{throw "$_ is not a NmeSetAsImagePayload object. Use New-NmeSetAsImagePayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSetAsImageRequest')
    Return $ReturnObject    
}
function New-NmeSetAsImageRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeSetAsImageRestConfiguration, for use in other Nme module commands

    .PARAMETER PowerOnVm

    boolean. Specify -PowerOnVm $True or -PowerOnVm $False.

    .PARAMETER CustomScriptEnable

    boolean. Specify -CustomScriptEnable $True or -CustomScriptEnable $False.

    .PARAMETER ChangeLog

    string.

    .PARAMETER ScriptedActionsIds

    Array of integers, listed under the ID column in Nerdio Manager Scripted Actions. Can be retrieved by running Get-NmeScriptedActions

    .PARAMETER ActiveDirectoryId

    ID of Active Directory profile to be sent with this scripted action. Can be retrieved by running Get-NmeAdConfig

    .PARAMETER GalleryImageParams

    An object of type NmeGalleryImageRestConfiguration. Can be created using New-NmeGalleryImageRestConfiguration

    .PARAMETER RefreshVmParams

    An object of type NmeRefreshVmRestConfiguration. Can be created using New-NmeRefreshVmRestConfiguration

    .PARAMETER RetainOldImage

    boolean. Specify -RetainOldImage $True or -RetainOldImage $False.

    .PARAMETER Certificates

    boolean. Specify -Certificates $True or -Certificates $False.

    .PARAMETER UploadToCloudPc

    boolean. Specify -UploadToCloudPc $True or -UploadToCloudPc $False.

    .PARAMETER SkipRemoveProfiles

    boolean. Specify -SkipRemoveProfiles $True or -SkipRemoveProfiles $False.

    #>

    [cmdletbinding()]
    Param(
        [bool]$PowerOnVm,
        [bool]$CustomScriptEnable,
        [string]$ChangeLog,
        [int[]]$ScriptedActionsIds,
        [int]$ActiveDirectoryId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeGalleryImageRestConfiguration"){$true} else{throw "$_ is not a NmeGalleryImageRestConfiguration object. Use New-NmeGalleryImageRestConfiguration to create before calling this function"}})][psobject]$GalleryImageParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeRefreshVmRestConfiguration"){$true} else{throw "$_ is not a NmeRefreshVmRestConfiguration object. Use New-NmeRefreshVmRestConfiguration to create before calling this function"}})][psobject]$RefreshVmParams,
        [bool]$RetainOldImage,
        [bool]$Certificates,
        [bool]$UploadToCloudPc,
        [bool]$SkipRemoveProfiles
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("PowerOnVm")){ $PropertyHash += @{PowerOnVm = $PowerOnVm} }
    if ($PSBoundParameters.containskey("CustomScriptEnable")){ $PropertyHash += @{CustomScriptEnable = $CustomScriptEnable} }
    if ($PSBoundParameters.containskey("ChangeLog")){ $PropertyHash += @{ChangeLog = $ChangeLog} }
    if ($PSBoundParameters.containskey("ScriptedActionsIds")){ $PropertyHash += @{ScriptedActionsIds = $ScriptedActionsIds} }
    if ($PSBoundParameters.containskey("ActiveDirectoryId")){ $PropertyHash += @{ActiveDirectoryId = $ActiveDirectoryId} }
    if ($PSBoundParameters.containskey("GalleryImageParams")){ $PropertyHash += @{GalleryImageParams = $GalleryImageParams} }
    if ($PSBoundParameters.containskey("RefreshVmParams")){ $PropertyHash += @{RefreshVmParams = $RefreshVmParams} }
    if ($PSBoundParameters.containskey("RetainOldImage")){ $PropertyHash += @{RetainOldImage = $RetainOldImage} }
    if ($PSBoundParameters.containskey("Certificates")){ $PropertyHash += @{Certificates = $Certificates} }
    if ($PSBoundParameters.containskey("UploadToCloudPc")){ $PropertyHash += @{UploadToCloudPc = $UploadToCloudPc} }
    if ($PSBoundParameters.containskey("SkipRemoveProfiles")){ $PropertyHash += @{SkipRemoveProfiles = $SkipRemoveProfiles} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeSetAsImageRestConfiguration')
    Return $ReturnObject    
}
function New-NmeTempVmId {
    <#

    .SYNOPSIS

    Creates an object of type NmeTempVmId, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER ResourceGroup

    The Azure resource group where the resource resides

    .PARAMETER Name

    The name of the resource

    #>

    [cmdletbinding()]
    Param(
        [string]$SubscriptionId,
        [string]$ResourceGroup,
        [Parameter(Mandatory=$true)][string]$Name
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("ResourceGroup")){ $PropertyHash += @{ResourceGroup = $ResourceGroup} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeTempVmId')
    Return $ReturnObject    
}
function New-NmeTempVmRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeTempVmRestModel, for use in other Nme module commands

    .PARAMETER VmId

    An object of type NmeTempVmId. Can be created using New-NmeTempVmId

    .PARAMETER VmSize

    string.

    .PARAMETER Image

    string.

    .PARAMETER StorageType

    string.

    .PARAMETER DiskSize

    integer.

    .PARAMETER NetworkId

    string.

    .PARAMETER Subnet

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeTempVmId"){$true} else{throw "$_ is not a NmeTempVmId object. Use New-NmeTempVmId to create before calling this function"}})][psobject]$VmId,
        [Parameter(Mandatory=$true)][string]$VmSize,
        [Parameter(Mandatory=$true)][string]$Image,
        [Parameter(Mandatory=$true)][string]$StorageType,
        [Parameter(Mandatory=$true)][int]$DiskSize,
        [string]$NetworkId,
        [string]$Subnet
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("VmId")){ $PropertyHash += @{VmId = $VmId} }
    if ($PSBoundParameters.containskey("VmSize")){ $PropertyHash += @{VmSize = $VmSize} }
    if ($PSBoundParameters.containskey("Image")){ $PropertyHash += @{Image = $Image} }
    if ($PSBoundParameters.containskey("StorageType")){ $PropertyHash += @{StorageType = $StorageType} }
    if ($PSBoundParameters.containskey("DiskSize")){ $PropertyHash += @{DiskSize = $DiskSize} }
    if ($PSBoundParameters.containskey("NetworkId")){ $PropertyHash += @{NetworkId = $NetworkId} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeTempVmRestModel')
    Return $ReturnObject    
}
function New-NmeTimeIntervalWithTimeZone {
    <#

    .SYNOPSIS

    Creates an object of type NmeTimeIntervalWithTimeZone, for use in other Nme module commands

    .PARAMETER Hour

    integer.

    .PARAMETER TimeZoneId

    string.

    .PARAMETER Duration

    integer.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$Hour,
        [Parameter(Mandatory=$true)][string]$TimeZoneId,
        [Parameter(Mandatory=$true)][int]$Duration
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Hour")){ $PropertyHash += @{Hour = $Hour} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    if ($PSBoundParameters.containskey("Duration")){ $PropertyHash += @{Duration = $Duration} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeTimeIntervalWithTimeZone')
    Return $ReturnObject    
}
function New-NmeTimeRangeWithTimeZone {
    <#

    .SYNOPSIS

    Creates an object of type NmeTimeRangeWithTimeZone, for use in other Nme module commands

    .PARAMETER StartHour

    integer.

    .PARAMETER EndHour

    integer.

    .PARAMETER TimeZoneId

    string.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$StartHour,
        [Parameter(Mandatory=$true)][int]$EndHour,
        [Parameter(Mandatory=$true)][string]$TimeZoneId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StartHour")){ $PropertyHash += @{StartHour = $StartHour} }
    if ($PSBoundParameters.containskey("EndHour")){ $PropertyHash += @{EndHour = $EndHour} }
    if ($PSBoundParameters.containskey("TimeZoneId")){ $PropertyHash += @{TimeZoneId = $TimeZoneId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeTimeRangeWithTimeZone')
    Return $ReturnObject    
}
function New-NmeTriggerInfo {
    <#

    .SYNOPSIS

    Creates an object of type NmeTriggerInfo, for use in other Nme module commands

    .PARAMETER TriggerType

    string. Valid values are: CPUUsage, RAMUsage, AvgActiveSessions, AvailableUserSessionSingle, AvailableUserSessions, UserDriven, PersonalAutoGrow, PersonalAutoShrink

    .PARAMETER AverageSessions

    An object of type NmeActiveSessionsConfiguration. Can be created using New-NmeActiveSessionsConfiguration

    .PARAMETER AvailableSessions

    An object of type NmeAvailableUserSessionsConfiguration. Can be created using New-NmeAvailableUserSessionsConfiguration

    .PARAMETER Cpu

    An object of type NmeHostUsageConfiguration. Can be created using New-NmeHostUsageConfiguration

    .PARAMETER Ram

    An object of type NmeHostUsageConfiguration. Can be created using New-NmeHostUsageConfiguration

    .PARAMETER UserDriven

    An object of type NmeUserDrivenRestConfiguration. Can be created using New-NmeUserDrivenRestConfiguration

    .PARAMETER PersonalAutoGrow

    An object of type NmePersonalAutoGrowRestConfiguration. Can be created using New-NmePersonalAutoGrowRestConfiguration

    .PARAMETER PersonalAutoShrink

    An object of type NmePersonalAutoShrinkRestConfiguration. Can be created using New-NmePersonalAutoShrinkRestConfiguration

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("CPUUsage","RAMUsage","AvgActiveSessions","AvailableUserSessionSingle","AvailableUserSessions","UserDriven","PersonalAutoGrow","PersonalAutoShrink")][string]$TriggerType,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeActiveSessionsConfiguration"){$true} else{throw "$_ is not a NmeActiveSessionsConfiguration object. Use New-NmeActiveSessionsConfiguration to create before calling this function"}})][psobject]$AverageSessions,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAvailableUserSessionsConfiguration"){$true} else{throw "$_ is not a NmeAvailableUserSessionsConfiguration object. Use New-NmeAvailableUserSessionsConfiguration to create before calling this function"}})][psobject]$AvailableSessions,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostUsageConfiguration"){$true} else{throw "$_ is not a NmeHostUsageConfiguration object. Use New-NmeHostUsageConfiguration to create before calling this function"}})][psobject]$Cpu,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeHostUsageConfiguration"){$true} else{throw "$_ is not a NmeHostUsageConfiguration object. Use New-NmeHostUsageConfiguration to create before calling this function"}})][psobject]$Ram,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeUserDrivenRestConfiguration"){$true} else{throw "$_ is not a NmeUserDrivenRestConfiguration object. Use New-NmeUserDrivenRestConfiguration to create before calling this function"}})][psobject]$UserDriven,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmePersonalAutoGrowRestConfiguration"){$true} else{throw "$_ is not a NmePersonalAutoGrowRestConfiguration object. Use New-NmePersonalAutoGrowRestConfiguration to create before calling this function"}})][psobject]$PersonalAutoGrow,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmePersonalAutoShrinkRestConfiguration"){$true} else{throw "$_ is not a NmePersonalAutoShrinkRestConfiguration object. Use New-NmePersonalAutoShrinkRestConfiguration to create before calling this function"}})][psobject]$PersonalAutoShrink
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("TriggerType")){ $PropertyHash += @{TriggerType = $TriggerType} }
    if ($PSBoundParameters.containskey("AverageSessions")){ $PropertyHash += @{AverageSessions = $AverageSessions} }
    if ($PSBoundParameters.containskey("AvailableSessions")){ $PropertyHash += @{AvailableSessions = $AvailableSessions} }
    if ($PSBoundParameters.containskey("Cpu")){ $PropertyHash += @{Cpu = $Cpu} }
    if ($PSBoundParameters.containskey("Ram")){ $PropertyHash += @{Ram = $Ram} }
    if ($PSBoundParameters.containskey("UserDriven")){ $PropertyHash += @{UserDriven = $UserDriven} }
    if ($PSBoundParameters.containskey("PersonalAutoGrow")){ $PropertyHash += @{PersonalAutoGrow = $PersonalAutoGrow} }
    if ($PSBoundParameters.containskey("PersonalAutoShrink")){ $PropertyHash += @{PersonalAutoShrink = $PersonalAutoShrink} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeTriggerInfo')
    Return $ReturnObject    
}
function New-NmeUpdateAutoScaleRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeUpdateAutoScaleRequest, for use in other Nme module commands

    .PARAMETER IsEnabled

    boolean. Specify -IsEnabled $True or -IsEnabled $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$IsEnabled
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("IsEnabled")){ $PropertyHash += @{IsEnabled = $IsEnabled} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUpdateAutoScaleRequest')
    Return $ReturnObject    
}
function New-NmeUpdateHostPoolActiveDirectoryRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeUpdateHostPoolActiveDirectoryRestModel, for use in other Nme module commands

    .PARAMETER Type

    string. Valid values are: Default, Predefined, Custom

    .PARAMETER PredefinedConfigId

    integer.

    .PARAMETER Custom

    An object of type NmeAdConfigRestPropertiesWithPassword. Can be created using New-NmeAdConfigRestPropertiesWithPassword

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("Default","Predefined","Custom")][string]$Type,
        [int]$PredefinedConfigId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeAdConfigRestPropertiesWithPassword"){$true} else{throw "$_ is not a NmeAdConfigRestPropertiesWithPassword object. Use New-NmeAdConfigRestPropertiesWithPassword to create before calling this function"}})][psobject]$Custom
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("PredefinedConfigId")){ $PropertyHash += @{PredefinedConfigId = $PredefinedConfigId} }
    if ($PSBoundParameters.containskey("Custom")){ $PropertyHash += @{Custom = $Custom} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUpdateHostPoolActiveDirectoryRestModel')
    Return $ReturnObject    
}
function New-NmeUpdateHostPoolFsLogixRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeUpdateHostPoolFsLogixRestModel, for use in other Nme module commands

    .PARAMETER Enable

    boolean. Specify -Enable $True or -Enable $False.

    .PARAMETER UseDefault

    DEPRECATED

    .PARAMETER Type

    string. Valid values are: Default, Predefined, Custom

    .PARAMETER PredefinedConfigId

    integer.

    .PARAMETER Custom

    An object of type NmeFsLogixRestProperties. Can be created using New-NmeFsLogixRestProperties

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][bool]$Enable,
        [bool]$UseDefault,
        [ValidateSet("Default","Predefined","Custom")][string]$Type,
        [int]$PredefinedConfigId,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeFsLogixRestProperties"){$true} else{throw "$_ is not a NmeFsLogixRestProperties object. Use New-NmeFsLogixRestProperties to create before calling this function"}})][psobject]$Custom
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Enable")){ $PropertyHash += @{Enable = $Enable} }
    if ($PSBoundParameters.containskey("UseDefault")){ $PropertyHash += @{UseDefault = $UseDefault} }
    if ($PSBoundParameters.containskey("Type")){ $PropertyHash += @{Type = $Type} }
    if ($PSBoundParameters.containskey("PredefinedConfigId")){ $PropertyHash += @{PredefinedConfigId = $PredefinedConfigId} }
    if ($PSBoundParameters.containskey("Custom")){ $PropertyHash += @{Custom = $Custom} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUpdateHostPoolFsLogixRestModel')
    Return $ReturnObject    
}
function New-NmeUpdateHostPoolTagsRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeUpdateHostPoolTagsRest, for use in other Nme module commands

    .PARAMETER Tags

    object.

    .PARAMETER UpdateObjects

    boolean. Specify -UpdateObjects $True or -UpdateObjects $False. Update existing AVD object and VMs

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][hashtable]$Tags,
        [bool]$UpdateObjects
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    if ($PSBoundParameters.containskey("UpdateObjects")){ $PropertyHash += @{UpdateObjects = $UpdateObjects} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUpdateHostPoolTagsRest')
    Return $ReturnObject    
}
function New-NmeUpdateHostPoolTagsResultRest {
    <#

    .SYNOPSIS

    Creates an object of type NmeUpdateHostPoolTagsResultRest, for use in other Nme module commands

    .PARAMETER Tags

    object.

    .PARAMETER UpdateObjectsJob

    An object of type NmeJobShortInfo. Can be created using New-NmeJobShortInfo

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][hashtable]$Tags,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobShortInfo"){$true} else{throw "$_ is not a NmeJobShortInfo object. Use New-NmeJobShortInfo to create before calling this function"}})][psobject]$UpdateObjectsJob
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Tags")){ $PropertyHash += @{Tags = $Tags} }
    if ($PSBoundParameters.containskey("UpdateObjectsJob")){ $PropertyHash += @{UpdateObjectsJob = $UpdateObjectsJob} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUpdateHostPoolTagsResultRest')
    Return $ReturnObject    
}
function New-NmeUploadMsixPackageRestRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeUploadMsixPackageRestRequest, for use in other Nme module commands

    .PARAMETER LocationId

    string.

    .PARAMETER ImageName

    string.

    .PARAMETER PackageLinks

    array.

    .PARAMETER TempVmParams

    An object of type NmeTempVmRestModel. Can be created using New-NmeTempVmRestModel

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$LocationId,
        [Parameter(Mandatory=$true)][string]$ImageName,
        [Parameter(Mandatory=$true)][string[]]$PackageLinks,
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeTempVmRestModel"){$true} else{throw "$_ is not a NmeTempVmRestModel object. Use New-NmeTempVmRestModel to create before calling this function"}})][psobject]$TempVmParams,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("LocationId")){ $PropertyHash += @{LocationId = $LocationId} }
    if ($PSBoundParameters.containskey("ImageName")){ $PropertyHash += @{ImageName = $ImageName} }
    if ($PSBoundParameters.containskey("PackageLinks")){ $PropertyHash += @{PackageLinks = $PackageLinks} }
    if ($PSBoundParameters.containskey("TempVmParams")){ $PropertyHash += @{TempVmParams = $TempVmParams} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUploadMsixPackageRestRequest')
    Return $ReturnObject    
}
function New-NmeUsageRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeUsageRestModel, for use in other Nme module commands

    .PARAMETER NamedUsers

    integer.

    .PARAMETER ConcurentUsers

    integer.

    .PARAMETER MonthlyActiveUsers

    integer.

    #>

    [cmdletbinding()]
    Param(
        [int]$NamedUsers,
        [int]$ConcurentUsers,
        [int]$MonthlyActiveUsers
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("NamedUsers")){ $PropertyHash += @{NamedUsers = $NamedUsers} }
    if ($PSBoundParameters.containskey("ConcurentUsers")){ $PropertyHash += @{ConcurentUsers = $ConcurentUsers} }
    if ($PSBoundParameters.containskey("MonthlyActiveUsers")){ $PropertyHash += @{MonthlyActiveUsers = $MonthlyActiveUsers} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUsageRestModel')
    Return $ReturnObject    
}
function New-NmeUserDrivenRestConfiguration {
    <#

    .SYNOPSIS

    Creates an object of type NmeUserDrivenRestConfiguration, for use in other Nme module commands

    .PARAMETER StopDelayMinutes

    integer.

    .PARAMETER MinAvailableSessions

    integer.

    .PARAMETER BypassDrainMode

    boolean. Specify -BypassDrainMode $True or -BypassDrainMode $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][int]$StopDelayMinutes,
        [int]$MinAvailableSessions,
        [bool]$BypassDrainMode
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("StopDelayMinutes")){ $PropertyHash += @{StopDelayMinutes = $StopDelayMinutes} }
    if ($PSBoundParameters.containskey("MinAvailableSessions")){ $PropertyHash += @{MinAvailableSessions = $MinAvailableSessions} }
    if ($PSBoundParameters.containskey("BypassDrainMode")){ $PropertyHash += @{BypassDrainMode = $BypassDrainMode} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUserDrivenRestConfiguration')
    Return $ReturnObject    
}
function New-NmeUserSessionActionPayload {
    <#

    .SYNOPSIS

    Creates an object of type NmeUserSessionActionPayload, for use in other Nme module commands

    .PARAMETER Command

    string. Valid values are: LogOff

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateSet("LogOff")][string]$Command
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Command")){ $PropertyHash += @{Command = $Command} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUserSessionActionPayload')
    Return $ReturnObject    
}
function New-NmeUserSessionActionRequest {
    <#

    .SYNOPSIS

    Creates an object of type NmeUserSessionActionRequest, for use in other Nme module commands

    .PARAMETER JobPayload

    An object of type NmeUserSessionActionPayload. Can be created using New-NmeUserSessionActionPayload

    .PARAMETER FailurePolicy

    An object of type NmeJobFailurePolicy. Can be created using New-NmeJobFailurePolicy

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][ValidateScript({if ($_.PSObject.TypeNames -contains "NmeUserSessionActionPayload"){$true} else{throw "$_ is not a NmeUserSessionActionPayload object. Use New-NmeUserSessionActionPayload to create before calling this function"}})][psobject]$JobPayload,
        [ValidateScript({if ($_.PSObject.TypeNames -contains "NmeJobFailurePolicy"){$true} else{throw "$_ is not a NmeJobFailurePolicy object. Use New-NmeJobFailurePolicy to create before calling this function"}})][psobject]$FailurePolicy
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("JobPayload")){ $PropertyHash += @{JobPayload = $JobPayload} }
    if ($PSBoundParameters.containskey("FailurePolicy")){ $PropertyHash += @{FailurePolicy = $FailurePolicy} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeUserSessionActionRequest')
    Return $ReturnObject    
}
function New-NmeVmObjectId {
    <#

    .SYNOPSIS

    Creates an object of type NmeVmObjectId, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER ResourceGroup

    The Azure resource group where the resource resides

    .PARAMETER Name

    The name of the resource

    .PARAMETER AddSuffix

    boolean. Specify -AddSuffix $True or -AddSuffix $False.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$SubscriptionId,
        [Parameter(Mandatory=$true)][string]$ResourceGroup,
        [Parameter(Mandatory=$true)][string]$Name,
        [bool]$AddSuffix
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("ResourceGroup")){ $PropertyHash += @{ResourceGroup = $ResourceGroup} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    if ($PSBoundParameters.containskey("AddSuffix")){ $PropertyHash += @{AddSuffix = $AddSuffix} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeVmObjectId')
    Return $ReturnObject    
}
function New-NmeVmTemplateParams {
    <#

    .SYNOPSIS

    Creates an object of type NmeVmTemplateParams, for use in other Nme module commands

    .PARAMETER Prefix

    string.

    .PARAMETER Size

    string.

    .PARAMETER Image

    string.

    .PARAMETER StorageType

    string.

    .PARAMETER ResourceGroupId

    string.

    .PARAMETER NetworkId

    string.

    .PARAMETER Subnet

    string.

    .PARAMETER DiskSize

    integer.

    .PARAMETER HasEphemeralOSDisk

    boolean. Specify -HasEphemeralOSDisk $True or -HasEphemeralOSDisk $False.

    .PARAMETER EphemeralOSDiskPlacement

    string. Valid values are: CacheDisk, ResourceDisk

    #>

    [cmdletbinding()]
    Param(
        [string]$Prefix,
        [string]$Size,
        [string]$Image,
        [string]$StorageType,
        [string]$ResourceGroupId,
        [string]$NetworkId,
        [string]$Subnet,
        [int]$DiskSize,
        [bool]$HasEphemeralOSDisk,
        [ValidateSet("CacheDisk","ResourceDisk")][string]$EphemeralOSDiskPlacement
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("Prefix")){ $PropertyHash += @{Prefix = $Prefix} }
    if ($PSBoundParameters.containskey("Size")){ $PropertyHash += @{Size = $Size} }
    if ($PSBoundParameters.containskey("Image")){ $PropertyHash += @{Image = $Image} }
    if ($PSBoundParameters.containskey("StorageType")){ $PropertyHash += @{StorageType = $StorageType} }
    if ($PSBoundParameters.containskey("ResourceGroupId")){ $PropertyHash += @{ResourceGroupId = $ResourceGroupId} }
    if ($PSBoundParameters.containskey("NetworkId")){ $PropertyHash += @{NetworkId = $NetworkId} }
    if ($PSBoundParameters.containskey("Subnet")){ $PropertyHash += @{Subnet = $Subnet} }
    if ($PSBoundParameters.containskey("DiskSize")){ $PropertyHash += @{DiskSize = $DiskSize} }
    if ($PSBoundParameters.containskey("HasEphemeralOSDisk")){ $PropertyHash += @{HasEphemeralOSDisk = $HasEphemeralOSDisk} }
    if ($PSBoundParameters.containskey("EphemeralOSDiskPlacement")){ $PropertyHash += @{EphemeralOSDiskPlacement = $EphemeralOSDiskPlacement} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeVmTemplateParams')
    Return $ReturnObject    
}
function New-NmeWarningMessageSettings {
    <#

    .SYNOPSIS

    Creates an object of type NmeWarningMessageSettings, for use in other Nme module commands

    .PARAMETER MinutesBeforeRemove

    integer.

    .PARAMETER Message

    string.

    #>

    [cmdletbinding()]
    Param(
        [int]$MinutesBeforeRemove,
        [string]$Message
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("MinutesBeforeRemove")){ $PropertyHash += @{MinutesBeforeRemove = $MinutesBeforeRemove} }
    if ($PSBoundParameters.containskey("Message")){ $PropertyHash += @{Message = $Message} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeWarningMessageSettings')
    Return $ReturnObject    
}
function New-NmeWorkspaceScopeRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeWorkspaceScopeRestModel, for use in other Nme module commands

    .PARAMETER WorkspaceId

    Azure resource ID of AVD workspace. E.g.: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/your-resource-group-name/providers/Microsoft.DesktopVirtualization/workspaces/your-workspace-name

    .PARAMETER HostPoolIds

    array.

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$WorkspaceId,
        [string[]]$HostPoolIds
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("WorkspaceId")){ $PropertyHash += @{WorkspaceId = $WorkspaceId} }
    if ($PSBoundParameters.containskey("HostPoolIds")){ $PropertyHash += @{HostPoolIds = $HostPoolIds} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeWorkspaceScopeRestModel')
    Return $ReturnObject    
}
function New-NmeWorkspaceScopeUpdateRestModel {
    <#

    .SYNOPSIS

    Creates an object of type NmeWorkspaceScopeUpdateRestModel, for use in other Nme module commands

    .PARAMETER WorkspaceId

    Azure resource ID of AVD workspace. E.g.: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/your-resource-group-name/providers/Microsoft.DesktopVirtualization/workspaces/your-workspace-name

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$WorkspaceId
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("WorkspaceId")){ $PropertyHash += @{WorkspaceId = $WorkspaceId} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeWorkspaceScopeUpdateRestModel')
    Return $ReturnObject    
}
function New-NmeWvdObjectId {
    <#

    .SYNOPSIS

    Creates an object of type NmeWvdObjectId, for use in other Nme module commands

    .PARAMETER SubscriptionId

    The id (guid) of the subscription where this resource resides

    .PARAMETER ResourceGroup

    The Azure resource group where the resource resides

    .PARAMETER Name

    The name of the resource

    #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$true)][string]$SubscriptionId,
        [Parameter(Mandatory=$true)][string]$ResourceGroup,
        [Parameter(Mandatory=$true)][string]$Name
    )

    $PropertyHash = @{}
    if ($PSBoundParameters.containskey("SubscriptionId")){ $PropertyHash += @{SubscriptionId = $SubscriptionId} }
    if ($PSBoundParameters.containskey("ResourceGroup")){ $PropertyHash += @{ResourceGroup = $ResourceGroup} }
    if ($PSBoundParameters.containskey("Name")){ $PropertyHash += @{Name = $Name} }
    $ReturnObject = New-Object -TypeName psobject -Property $PropertyHash
    $ReturnObject.PSObject.TypeNames.Insert(0, 'NmeWvdObjectId')
    Return $ReturnObject    
}