Functions/IsilonPlatformSet.ps1

# The MIT License
#
# Copyright (c) 2016 Christopher Banck.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

#Build using Isilon OneFS build: B_MR_8_0_1_1_112(RELEASE)

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"


function Set-isiAntivirusPolicy{
<#
.SYNOPSIS
    Set Antivirus Policy

.DESCRIPTION
    Modify an antivirus scan policy.
 
.PARAMETER id
    Name id

.PARAMETER name
    Name name

.PARAMETER description
    A description for the policy.

.PARAMETER enabled
    Whether the policy is enabled.

.PARAMETER force_run
    Forces the scan to run regardless of whether the files were recently scanned.

.PARAMETER impact
    The priority of the antivirus scan job. Must be a valid job engine impact policy, or null to use the default impact.

.PARAMETER new_name
    The name of the policy.

.PARAMETER paths
    Paths to include in the scan.

.PARAMETER recursion_depth
    The depth to recurse in directories. The default of -1 gives unlimited recursion.

.PARAMETER schedule
    The schedule for running scans in isi date format. Examples include: 'every Friday' or 'every day at 4:00'. A null value means the policy is manually scheduled.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$force_run,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$impact,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][array]$paths,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$recursion_depth,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAntivirusPolicy')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/antivirus/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAntivirusPolicy

function Set-isiAntivirusQuarantine{
<#
.SYNOPSIS
    Set Antivirus Quarantine

.DESCRIPTION
    Set the quarantine status of the file at the specified path. Use either an empty object {} in the request body or {"quarantined":true} to quarantine the file, and {"quarantined":false} to unquarantine the file.
 
.PARAMETER id
    Path id

.PARAMETER name
    Path name

.PARAMETER quarantined
    If true, this file is quarantined. If false, the file is not quarantined.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$quarantined,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAntivirusQuarantine')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/antivirus/quarantine/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAntivirusQuarantine

function Set-isiAntivirusServer{
<#
.SYNOPSIS
    Set Antivirus Server

.DESCRIPTION
    Modify an antivirus server entry.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER description
    A description for the server.

.PARAMETER enabled
    Whether the server is enabled.

.PARAMETER url
    The icap url for the server. This should have a format of: icap://host.domain:port/path

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$url,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAntivirusServer')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/antivirus/servers/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAntivirusServer

function Set-isiAntivirusSettings{
<#
.SYNOPSIS
    Set Antivirus Settings

.DESCRIPTION
    Modify the Antivirus settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER fail_open
    Allow access when scanning fails.

.PARAMETER glob_filters
    Glob patterns for leaf filenames.

.PARAMETER glob_filters_enabled
    Enable glob filters.

.PARAMETER glob_filters_include
    If true, only scan files matching a glob filter. If false, only scan files that don't match a glob filter.

.PARAMETER path_prefixes
    Paths to include in realtime scans.

.PARAMETER quarantine
    Try to quarantine files when threats are found.

.PARAMETER repair
    Try to repair files when threats are found.

.PARAMETER report_expiry
    Amount of time in seconds until old reporting data is purged.

.PARAMETER scan_on_close
    Scan files when apps close them.

.PARAMETER scan_on_open
    Scan files on access.

.PARAMETER scan_size_maximum
    Skip scanning files larger than this.

.PARAMETER service
    Whether the antivirus service is enabled.

.PARAMETER truncate
    Try to truncate files when threats are found.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$fail_open,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$glob_filters,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$glob_filters_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$glob_filters_include,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$path_prefixes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$quarantine,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$repair,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$report_expiry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$scan_on_close,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$scan_on_open,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$scan_size_maximum,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$truncate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=13)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAntivirusSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/antivirus/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAntivirusSettings

function Set-isiAuditSettingsGlobalv1{
<#
.SYNOPSIS
    Set Audit Global Settings

.DESCRIPTION
    Modify Global Audit settings.
 
.PARAMETER audited_zones
    Specifies zones that are audited when the protocol_auditing_enabled property is enabled.

.PARAMETER cee_log_time
    Specifies that events past a certain date are forwarded by the audit CEE forwarder. Format these events as follows: 'Topic@YYYY-MM-DD HH:MM:SS'.

.PARAMETER cee_server_uris
    Specifies a list of Common Event Enabler (CEE) server URIs. Protocol audit logs are sent to these URIs for external processing.

.PARAMETER config_auditing_enabled
    Specifies whether logging for API configuration changes are enabled.

.PARAMETER config_syslog_enabled
    Specifies whether configuration audit syslog messages are forwarded.

.PARAMETER hostname
    Specifies the hostname that is reported in protocol events from this cluster.

.PARAMETER protocol_auditing_enabled
    Specifies if logging for the I/O stream is enabled.

.PARAMETER syslog_log_time
    Specifies that events past a specified date are forwarded by the audit syslog forwarder. Format these events as follows: 'Topic@YYYY-MM-DD HH:MM:SS' format

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$audited_zones,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$cee_log_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$cee_server_uris,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$config_auditing_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$config_syslog_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$hostname,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$protocol_auditing_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$syslog_log_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuditSettingsGlobalv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/audit/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuditSettingsGlobalv1
Set-Alias Set-isiAuditSettingsGlobal -Value Set-isiAuditSettingsGlobalv1
Export-ModuleMember -Alias Set-isiAuditSettingsGlobal

function Set-isiAuditSettingsv3{
<#
.SYNOPSIS
    Set Audit Settings

.DESCRIPTION
    Modify per-Access Zone Audit settings.
 
.PARAMETER audit_failure
    Filter of protocol operations to Audit when they fail.

.PARAMETER audit_success
    Filter of protocol operations to Audit when they succeed.

.PARAMETER syslog_audit_events
    Filter of Audit operations to forward to syslog.

.PARAMETER syslog_forwarding_enabled
    Enables forwarding of events to syslog.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Access zone which contains audit settings.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$audit_failure,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$audit_success,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$syslog_audit_events,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$syslog_forwarding_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuditSettingsv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/audit/settings" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuditSettingsv3

function Set-isiAuditSettingsGlobal{
<#
.SYNOPSIS
    Set Audit Settings Global

.DESCRIPTION
    Modify Global Audit settings.
 
.PARAMETER audited_zones
    Specifies zones that are audited when the protocol_auditing_enabled property is enabled.

.PARAMETER cee_log_time
    Specifies that events past a certain date are forwarded by the audit CEE forwarder. Format these events as follows: 'Topic@YYYY-MM-DD HH:MM:SS'.

.PARAMETER cee_server_uris
    Specifies a list of Common Event Enabler (CEE) server URIs. Protocol audit logs are sent to these URIs for external processing.

.PARAMETER config_auditing_enabled
    Specifies whether logging for API configuration changes are enabled.

.PARAMETER config_syslog_enabled
    Specifies whether configuration audit syslog messages are forwarded.

.PARAMETER hostname
    Specifies the hostname that is reported in protocol events from this cluster.

.PARAMETER protocol_auditing_enabled
    Specifies if logging for the I/O stream is enabled.

.PARAMETER syslog_log_time
    Specifies that events past a specified date are forwarded by the audit syslog forwarder. Format these events as follows: 'Topic@YYYY-MM-DD HH:MM:SS' format

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$audited_zones,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$cee_log_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$cee_server_uris,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$config_auditing_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$config_syslog_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$hostname,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$protocol_auditing_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$syslog_log_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuditSettingsGlobal')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/audit/settings/global" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuditSettingsGlobal

function Set-isiAuditTopic{
<#
.SYNOPSIS
    Set Audit Topic

.DESCRIPTION
    Modify the audit topic.
 
.PARAMETER id
    Topic id

.PARAMETER name
    Topic name

.PARAMETER new_id
    Specifies the system-provided ID for the audit topic.

.PARAMETER max_cached_messages
    Specifies the maximum number of messages that can be sent and received at the same time. Messages that are sent and received at the same time can be lost if a system crash occurs. You can prevent message loss by setting this property to 0, which sets audit logs to synchronous.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$max_cached_messages,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_id){
                $BoundParameters.Remove('new_id') | out-null
                $BoundParameters.Add('id',$new_id)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuditTopic')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/audit/topics/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuditTopic

function Set-isiAuthGroup{
<#
.SYNOPSIS
    Set Auth Group

.DESCRIPTION
    Modify the group.
 
.PARAMETER id
    Group id

.PARAMETER name
    Group name

.PARAMETER gid
    Specifies the numeric group identifier.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER provider
    Optional provider type.

.PARAMETER access_zone
    Optional zone.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$gid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            $queryArguments = @()
            if ($provider){
                $queryArguments += 'provider=' + $provider
                $BoundParameters.Remove('provider') | out-null
            }
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthGroup')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/auth/groups/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthGroup

function Set-isiAuthLogLevel{
<#
.SYNOPSIS
    Set Auth Log Level

.DESCRIPTION
    Set the current authentication service and netlogon logging level.
 
.PARAMETER level
    Valid auth logging levels
    Valid inputs: always,error,warning,info,verbose,debug,trace

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('always','error','warning','info','verbose','debug','trace')][string]$level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthLogLevel')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/auth/log-level" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthLogLevel

function Set-isiAuthMappingImport{
<#
.SYNOPSIS
    Set Auth Mapping Import

.DESCRIPTION
    Set or update a list of mappings between two personae.
 
.PARAMETER identities
    

.PARAMETER Force
    Force update of object without prompt

.PARAMETER replace
    Specify whether existing mappings should be replaced. The default behavior is to leave existing mappings intact and return an error.

.PARAMETER access_zone
    Optional zone.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$identities,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][bool]$replace,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($replace){
                $queryArguments += 'replace=' + $replace
                $BoundParameters.Remove('replace') | out-null
            }
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthMappingImport')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/auth/mapping/import" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthMappingImport

function Set-isiAuthMappingUsersRules{
<#
.SYNOPSIS
    Set Auth Mapping Users Rules

.DESCRIPTION
    Modify the user mapping rules.
 
.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=0)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthMappingUsersRules')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/mapping/users/rules" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthMappingUsersRules

function Set-isiAuthProviderAdsv1{
<#
.SYNOPSIS
    Set Auth Provider Ads

.DESCRIPTION
    Modify the ADS provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER allocate_gids
    Allocates an ID for an unmapped Active Directory (ADS) group. ADS groups without GIDs can be proactively assigned a GID by the ID mapper. If the ID mapper option is disabled, GIDs are not proactively assigned, and when a primary group for a user does not include a GID, the system may allocate one.

.PARAMETER allocate_uids
    Allocates a user ID for an unmapped Active Directory (ADS) user. ADS users without UIDs can be proactively assigned a UID by the ID mapper. IF the ID mapper option is disabled, UIDs are not proactively assigned, and when an identify for a user does not include a UID, the system may allocate one.

.PARAMETER assume_default_domain
    Enables lookup of unqualified user names in the primary domain.

.PARAMETER authentication
    Enables authentication and identity management through the authentication provider.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER controller_time
    Specifies the current time for the domain controllers.

.PARAMETER create_home_directory
    Automatically creates a home directory on the first login.

.PARAMETER domain_controller
    Specifies the domain controller to which the authentication service should send requests

.PARAMETER domain_offline_alerts
    Sends an alert if the domain goes offline.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER ignored_trusted_domains
    Includes trusted domains when 'ignore_all_trusts' is set to false.

.PARAMETER ignore_all_trusts
    If set to true, ignores all trusted domains.

.PARAMETER include_trusted_domains
    Includes trusted domains when 'ignore_all_trusts' is set to true.

.PARAMETER ldap_sign_and_seal
    Enables encryption and signing on LDAP requests.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER lookup_domains
    Limits user and group lookups to the specified domains.

.PARAMETER lookup_groups
    Looks up AD groups in other providers before allocating a group ID.

.PARAMETER lookup_normalize_groups
    Normalizes AD group names to lowercase before look up.

.PARAMETER lookup_normalize_users
    Normalize AD user names to lowercase before look up.

.PARAMETER lookup_users
    Looks up AD users in other providers before allocating a user ID.

.PARAMETER machine_password_changes
    Enables periodic changes of the machine password for security.

.PARAMETER machine_password_lifespan
    Sets maximum age of a password in seconds.

.PARAMETER node_dc_affinity
    Specifies the domain controller for which the node has affinity.

.PARAMETER node_dc_affinity_timeout
    Specifies the timeout for the domain controller for which the local node has affinity.

.PARAMETER nss_enumeration
    Enables the Active Directory provider to respond to 'getpwent' and 'getgrent' requests.

.PARAMETER reset_schannel
    Resets the secure channel to the primary domain.

.PARAMETER sfu_support
    Specifies whether to support RFC 2307 attributes on ADS domain controllers.
    Valid inputs: none,rfc2307

.PARAMETER store_sfu_mappings
    Stores SFU mappings permanently in the ID mapper.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$allocate_gids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$allocate_uids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$assume_default_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$controller_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$domain_controller,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$domain_offline_alerts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][array]$ignored_trusted_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$ignore_all_trusts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$include_trusted_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][bool]$ldap_sign_and_seal,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][array]$lookup_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$lookup_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$lookup_normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$lookup_normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$lookup_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][bool]$machine_password_changes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$machine_password_lifespan,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][string]$node_dc_affinity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][int]$node_dc_affinity_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$nss_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$reset_schannel,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][ValidateSet('none','rfc2307')][string]$sfu_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][bool]$store_sfu_mappings,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=29)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderAdsv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/ads/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderAdsv1
Set-Alias Set-isiAuthProviderAds -Value Set-isiAuthProviderAdsv1
Export-ModuleMember -Alias Set-isiAuthProviderAds

function Set-isiAuthProviderAdsv3{
<#
.SYNOPSIS
    Set Auth Provider Ads

.DESCRIPTION
    Modify the ADS provider.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER allocate_gids
    Allocates an ID for an unmapped Active Directory (ADS) group. ADS groups without GIDs can be proactively assigned a GID by the ID mapper. If the ID mapper option is disabled, GIDs are not proactively assigned, and when a primary group for a user does not include a GID, the system may allocate one.

.PARAMETER allocate_uids
    Allocates a user ID for an unmapped Active Directory (ADS) user. ADS users without UIDs can be proactively assigned a UID by the ID mapper. IF the ID mapper option is disabled, UIDs are not proactively assigned, and when an identify for a user does not include a UID, the system may allocate one.

.PARAMETER assume_default_domain
    Enables lookup of unqualified user names in the primary domain.

.PARAMETER authentication
    Enables authentication and identity management through the authentication provider.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER controller_time
    Specifies the current time for the domain controllers.

.PARAMETER create_home_directory
    Automatically creates a home directory on the first login.

.PARAMETER domain_controller
    Specifies the domain controller to which the authentication service should send requests

.PARAMETER domain_offline_alerts
    Sends an alert if the domain goes offline.

.PARAMETER findable_groups
    Sets list of groups that can be resolved.

.PARAMETER findable_users
    Sets list of users that can be resolved.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER ignored_trusted_domains
    Includes trusted domains when 'ignore_all_trusts' is set to false.

.PARAMETER ignore_all_trusts
    If set to true, ignores all trusted domains.

.PARAMETER include_trusted_domains
    Includes trusted domains when 'ignore_all_trusts' is set to true.

.PARAMETER instance
    Specifies Active Directory provider instnace.

.PARAMETER ldap_sign_and_seal
    Enables encryption and signing on LDAP requests.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER lookup_domains
    Limits user and group lookups to the specified domains.

.PARAMETER lookup_groups
    Looks up AD groups in other providers before allocating a group ID.

.PARAMETER lookup_normalize_groups
    Normalizes AD group names to lowercase before look up.

.PARAMETER lookup_normalize_users
    Normalize AD user names to lowercase before look up.

.PARAMETER lookup_users
    Looks up AD users in other providers before allocating a user ID.

.PARAMETER machine_name
    Specifies name to join AD as.

.PARAMETER machine_password_changes
    Enables periodic changes of the machine password for security.

.PARAMETER machine_password_lifespan
    Sets maximum age of a password in seconds.

.PARAMETER node_dc_affinity
    Specifies the domain controller for which the node has affinity.

.PARAMETER node_dc_affinity_timeout
    Specifies the timeout for the domain controller for which the local node has affinity.

.PARAMETER nss_enumeration
    Enables the Active Directory provider to respond to 'getpwent' and 'getgrent' requests.

.PARAMETER password
    Specifies the password used during domain join.

.PARAMETER reset_schannel
    Resets the secure channel to the primary domain.

.PARAMETER restrict_findable
    Check the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER sfu_support
    Specifies whether to support RFC 2307 attributes on ADS domain controllers.
    Valid inputs: none,rfc2307

.PARAMETER spns
    Currently configured SPNs.

.PARAMETER store_sfu_mappings
    Stores SFU mappings permanently in the ID mapper.

.PARAMETER unfindable_groups
    Specifies groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER user
    Specifies the user name that has permission to join a machine to the given domain.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$allocate_gids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$allocate_uids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$assume_default_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$controller_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$domain_controller,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$domain_offline_alerts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$ignored_trusted_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][bool]$ignore_all_trusts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][array]$include_trusted_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$instance,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$ldap_sign_and_seal,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$lookup_domains,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$lookup_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][bool]$lookup_normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][bool]$lookup_normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$lookup_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][string]$machine_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$machine_password_changes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][int]$machine_password_lifespan,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][string]$node_dc_affinity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][int]$node_dc_affinity_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$nss_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][bool]$reset_schannel,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][ValidateSet('none','rfc2307')][string]$sfu_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][array]$spns,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][bool]$store_sfu_mappings,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][string]$user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=39)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderAdsv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/auth/providers/ads/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderAdsv3

function Set-isiAuthProviderFile{
<#
.SYNOPSIS
    Set Auth Provider File

.DESCRIPTION
    Modify the file provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER authentication
    Enables authentication and identity mapping through the authentication provider.

.PARAMETER create_home_directory
    Automatically creates a home directory on the first login.

.PARAMETER enabled
    Enables the file provider.

.PARAMETER enumerate_groups
    Enables the provider to enumerate groups.

.PARAMETER enumerate_users
    Enables the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER group_domain
    Specifies the domain for this provider through which domains are qualified.

.PARAMETER group_file
    Specifies the location of the file that contains information about the group.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER modifiable_groups
    Specifies the groups that can be modified in the provider.

.PARAMETER modifiable_users
    Specifies the users that can be modified in the provider.

.PARAMETER new_name
    Specifies the name of the file provider.

.PARAMETER netgroup_file
    Specifies the path to a netgroups replacement file.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER password_file
    Specifies the location of the file containing information about users.

.PARAMETER provider_domain
    Specifies the domain for the provider.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER restrict_modifiable
    If true, checks the provider for filtered lists of modifiable and unmodifiable users and groups.

.PARAMETER unfindable_groups
    Specifies groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER unmodifiable_groups
    Specifies a group that cannot be modified by the provider.

.PARAMETER unmodifiable_users
    Specifies a user that cannot be modified by the provider.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$group_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][array]$modifiable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][array]$modifiable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][string]$netgroup_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$password_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$restrict_modifiable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$unmodifiable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$unmodifiable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=33)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderFile')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/file/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderFile

function Set-isiAuthProviderKrb5v1{
<#
.SYNOPSIS
    Set Auth Provider Krb5

.DESCRIPTION
    Modify the KRB5 provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER keytab_entries
    Specifies the key information for the Kerberos SPNs.

.PARAMETER keytab_file
    Specifies the path to a keytab file to import.

.PARAMETER manual_keying
    If true, keys are managed manually. If false, keys are managed through kadmin.

.PARAMETER new_name
    Specifies the Kerberos provider name.

.PARAMETER password
    Specifies the Kerberos provider password.

.PARAMETER realm
    Specifies the name of realm.

.PARAMETER status
    Specifies the status of the provider.

.PARAMETER user
    Specifies the name of the user that performs kadmin tasks.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$keytab_entries,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$keytab_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$manual_keying,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$status,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderKrb5v1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/krb5/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderKrb5v1
Set-Alias Set-isiAuthProviderKrb5 -Value Set-isiAuthProviderKrb5v1
Export-ModuleMember -Alias Set-isiAuthProviderKrb5

function Set-isiAuthProviderKrb5v3{
<#
.SYNOPSIS
    Set Auth Provider Krb5

.DESCRIPTION
    Modify the KRB5 provider.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER keytab_entries
    Specifies the key information for the Kerberos SPNs.

.PARAMETER keytab_file
    Specifies the path to a keytab file to import.

.PARAMETER manual_keying
    If true, keys are managed manually. If false, keys are managed through kadmin.

.PARAMETER new_name
    Specifies the Kerberos provider name.

.PARAMETER password
    Specifies the Kerberos provider password.

.PARAMETER realm
    Specifies the name of realm.

.PARAMETER status
    Specifies the status of the provider.

.PARAMETER user
    Specifies the name of the user that performs kadmin tasks.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$keytab_entries,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$keytab_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$manual_keying,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$status,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderKrb5v3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/auth/providers/krb5/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderKrb5v3

function Set-isiAuthProviderLdapv1{
<#
.SYNOPSIS
    Set Auth Provider Ldap

.DESCRIPTION
    Modify the LDAP provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER alternate_security_identities_attribute
    Specifies the attribute name used when searching for alternate security identities.

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER balance_servers
    If true, connects the provider to a random server.

.PARAMETER base_dn
    Specifies the root of the tree in which to search identities.

.PARAMETER bind_dn
    Specifies the distinguished name for binding to the LDAP server.

.PARAMETER bind_mechanism
    Specifies which bind mechanism to use when connecting to an LDAP server. The only supported option is the 'simple' value.
    Valid inputs: simple,gssapi,digest-md5

.PARAMETER bind_password
    Specifies the password for the distinguished name for binding to the LDAP server.

.PARAMETER bind_timeout
    Specifies the timeout in seconds when binding to an LDAP server.

.PARAMETER certificate_authority_file
    Specifies the path to the root certificates file.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER cn_attribute
    Specifies the canonical name.

.PARAMETER create_home_directory
    Automatically create the home directory on the first login.

.PARAMETER crypt_password_attribute
    Specifies the hashed password value.

.PARAMETER email_attribute
    Specifies the LDAP Email attribute.

.PARAMETER enabled
    If true, enables the LDAP provider.

.PARAMETER enumerate_groups
    If true, allows the provider to enumerate groups.

.PARAMETER enumerate_users
    If true, allows the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER gecos_attribute
    Specifies the LDAP GECOS attribute.

.PARAMETER gid_attribute
    Specifies the LDAP GID attribute.

.PARAMETER group_base_dn
    Specifies the distinguished name of the entry where LDAP searches for groups are started.

.PARAMETER group_domain
    Specifies the domain for this provider through which groups are qualified.

.PARAMETER group_filter
    Specifies the LDAP filter for group objects.

.PARAMETER group_members_attribute
    Specifies the LDAP Group Members attribute.

.PARAMETER group_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER homedir_attribute
    Specifies the LDAP Homedir attribute.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER ignore_tls_errors
    If true, continues over secure connections even if identity checks fail.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER member_of_attribute
    Specifies the LDAP Query Member Of attribute, which performs reverse membership queries.

.PARAMETER new_name
    Specifies the name of the LDAP provider.

.PARAMETER name_attribute
    Specifies the LDAP UID attribute, which is used as the login name.

.PARAMETER netgroup_base_dn
    Specifies the distinguished name of the entry where LDAP searches for netgroups are started.

.PARAMETER netgroup_filter
    Specifies the LDAP filter for netgroup objects.

.PARAMETER netgroup_members_attribute
    Specifies the LDAP Netgroup Members attribute.

.PARAMETER netgroup_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER netgroup_triple_attribute
    Specifies the LDAP Netgroup Triple attribute.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER nt_password_attribute
    Specifies the LDAP NT Password attribute.

.PARAMETER provider_domain
    Specifies the provider domain.

.PARAMETER require_secure_connection
    Determines whether to continue over a non-TLS connection.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER search_scope
    Specifies the default depth from the base DN to perform LDAP searches.
    Valid inputs: base,onelevel,subtree,children

.PARAMETER search_timeout
    Specifies the search timeout period in seconds.

.PARAMETER server_uris
    Specifies the server URIs.

.PARAMETER shell_attribute
    Specifies the the LDAP Shell attribute.

.PARAMETER uid_attribute
    Specifies the the LDAP UID Number attribute.

.PARAMETER unfindable_groups
    Specifies the groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unique_group_members_attribute
    Sets the LDAP Unique Group Members attribute.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER user_base_dn
    Specifies the distinguished name of the entry at which to start LDAP searches for users.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER user_filter
    Specifies the LDAP filter for user objects.

.PARAMETER user_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$alternate_security_identities_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$balance_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$bind_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('simple','gssapi','digest-md5')][string]$bind_mechanism,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$bind_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$bind_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$certificate_authority_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$cn_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$crypt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$email_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][string]$gecos_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$gid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][string]$group_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][string]$group_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][string]$group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][ValidateSet('default','base','onelevel','subtree','children')][string]$group_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][string]$homedir_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$ignore_tls_errors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][string]$member_of_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][string]$name_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][string]$netgroup_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][string]$netgroup_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][string]$netgroup_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('default','base','onelevel','subtree','children')][string]$netgroup_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][string]$netgroup_triple_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][string]$nt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=45)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=46)][bool]$require_secure_connection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=47)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=48)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=49)][ValidateSet('base','onelevel','subtree','children')][string]$search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=50)][int]$search_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=51)][array]$server_uris,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=52)][string]$shell_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=53)][string]$uid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=54)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=55)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=56)][string]$unique_group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=57)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=58)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=59)][string]$user_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=60)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=61)][string]$user_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=62)][ValidateSet('default','base','onelevel','subtree','children')][string]$user_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=63)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=64)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderLdapv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/ldap/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderLdapv1
Set-Alias Set-isiAuthProviderLdap -Value Set-isiAuthProviderLdapv1
Export-ModuleMember -Alias Set-isiAuthProviderLdap

function Set-isiAuthProviderLdapv3{
<#
.SYNOPSIS
    Set Auth Provider Ldap

.DESCRIPTION
    Modify the LDAP provider.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER alternate_security_identities_attribute
    Specifies the attribute name used when searching for alternate security identities.

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER balance_servers
    If true, connects the provider to a random server.

.PARAMETER base_dn
    Specifies the root of the tree in which to search identities.

.PARAMETER bind_dn
    Specifies the distinguished name for binding to the LDAP server.

.PARAMETER bind_mechanism
    Specifies which bind mechanism to use when connecting to an LDAP server. The only supported option is the 'simple' value.
    Valid inputs: simple,gssapi,digest-md5

.PARAMETER bind_password
    Specifies the password for the distinguished name for binding to the LDAP server.

.PARAMETER bind_timeout
    Specifies the timeout in seconds when binding to an LDAP server.

.PARAMETER certificate_authority_file
    Specifies the path to the root certificates file.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER cn_attribute
    Specifies the canonical name.

.PARAMETER create_home_directory
    Automatically create the home directory on the first login.

.PARAMETER crypt_password_attribute
    Specifies the hashed password value.

.PARAMETER email_attribute
    Specifies the LDAP Email attribute.

.PARAMETER enabled
    If true, enables the LDAP provider.

.PARAMETER enumerate_groups
    If true, allows the provider to enumerate groups.

.PARAMETER enumerate_users
    If true, allows the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER gecos_attribute
    Specifies the LDAP GECOS attribute.

.PARAMETER gid_attribute
    Specifies the LDAP GID attribute.

.PARAMETER group_base_dn
    Specifies the distinguished name of the entry where LDAP searches for groups are started.

.PARAMETER group_domain
    Specifies the domain for this provider through which groups are qualified.

.PARAMETER group_filter
    Specifies the LDAP filter for group objects.

.PARAMETER group_members_attribute
    Specifies the LDAP Group Members attribute.

.PARAMETER group_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER homedir_attribute
    Specifies the LDAP Homedir attribute.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER ignore_tls_errors
    If true, continues over secure connections even if identity checks fail.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER member_of_attribute
    Specifies the LDAP Query Member Of attribute, which performs reverse membership queries.

.PARAMETER new_name
    Specifies the name of the LDAP provider.

.PARAMETER name_attribute
    Specifies the LDAP UID attribute, which is used as the login name.

.PARAMETER netgroup_base_dn
    Specifies the distinguished name of the entry where LDAP searches for netgroups are started.

.PARAMETER netgroup_filter
    Specifies the LDAP filter for netgroup objects.

.PARAMETER netgroup_members_attribute
    Specifies the LDAP Netgroup Members attribute.

.PARAMETER netgroup_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER netgroup_triple_attribute
    Specifies the LDAP Netgroup Triple attribute.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER nt_password_attribute
    Specifies the LDAP NT Password attribute.

.PARAMETER provider_domain
    Specifies the provider domain.

.PARAMETER require_secure_connection
    Determines whether to continue over a non-TLS connection.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER search_scope
    Specifies the default depth from the base DN to perform LDAP searches.
    Valid inputs: base,onelevel,subtree,children

.PARAMETER search_timeout
    Specifies the search timeout period in seconds.

.PARAMETER server_uris
    Specifies the server URIs.

.PARAMETER shell_attribute
    Specifies the the LDAP Shell attribute.

.PARAMETER uid_attribute
    Specifies the the LDAP UID Number attribute.

.PARAMETER unfindable_groups
    Specifies the groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unique_group_members_attribute
    Sets the LDAP Unique Group Members attribute.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER user_base_dn
    Specifies the distinguished name of the entry at which to start LDAP searches for users.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER user_filter
    Specifies the LDAP filter for user objects.

.PARAMETER user_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$alternate_security_identities_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$balance_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$bind_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('simple','gssapi','digest-md5')][string]$bind_mechanism,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$bind_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$bind_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$certificate_authority_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$cn_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$crypt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$email_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][string]$gecos_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$gid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][string]$group_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][string]$group_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][string]$group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][ValidateSet('default','base','onelevel','subtree','children')][string]$group_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][string]$homedir_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$ignore_tls_errors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][string]$member_of_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][string]$name_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][string]$netgroup_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][string]$netgroup_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][string]$netgroup_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('default','base','onelevel','subtree','children')][string]$netgroup_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][string]$netgroup_triple_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][string]$nt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=45)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=46)][bool]$require_secure_connection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=47)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=48)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=49)][ValidateSet('base','onelevel','subtree','children')][string]$search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=50)][int]$search_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=51)][array]$server_uris,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=52)][string]$shell_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=53)][string]$uid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=54)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=55)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=56)][string]$unique_group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=57)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=58)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=59)][string]$user_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=60)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=61)][string]$user_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=62)][ValidateSet('default','base','onelevel','subtree','children')][string]$user_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=63)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=64)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderLdapv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/auth/providers/ldap/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderLdapv3

function Set-isiAuthProvidersLdapv4{
<#
.SYNOPSIS
    Set Auth Providers Ldap

.DESCRIPTION
    Modify the LDAP provider.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER alternate_security_identities_attribute
    Specifies the attribute name used when searching for alternate security identities.

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER balance_servers
    If true, connects the provider to a random server.

.PARAMETER base_dn
    Specifies the root of the tree in which to search identities.

.PARAMETER bind_dn
    Specifies the distinguished name for binding to the LDAP server.

.PARAMETER bind_mechanism
    Specifies which bind mechanism to use when connecting to an LDAP server. The only supported option is the 'simple' value.
    Valid inputs: simple,gssapi,digest-md5

.PARAMETER bind_password
    Specifies the password for the distinguished name for binding to the LDAP server.

.PARAMETER bind_timeout
    Specifies the timeout in seconds when binding to an LDAP server.

.PARAMETER certificate_authority_file
    Specifies the path to the root certificates file.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER cn_attribute
    Specifies the canonical name.

.PARAMETER create_home_directory
    Automatically create the home directory on the first login.

.PARAMETER crypt_password_attribute
    Specifies the hashed password value.

.PARAMETER email_attribute
    Specifies the LDAP Email attribute.

.PARAMETER enabled
    If true, enables the LDAP provider.

.PARAMETER enumerate_groups
    If true, allows the provider to enumerate groups.

.PARAMETER enumerate_users
    If true, allows the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER gecos_attribute
    Specifies the LDAP GECOS attribute.

.PARAMETER gid_attribute
    Specifies the LDAP GID attribute.

.PARAMETER group_base_dn
    Specifies the distinguished name of the entry where LDAP searches for groups are started.

.PARAMETER group_domain
    Specifies the domain for this provider through which groups are qualified.

.PARAMETER group_filter
    Specifies the LDAP filter for group objects.

.PARAMETER group_members_attribute
    Specifies the LDAP Group Members attribute.

.PARAMETER group_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER homedir_attribute
    Specifies the LDAP Homedir attribute.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER ignore_tls_errors
    If true, continues over secure connections even if identity checks fail.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER member_of_attribute
    Specifies the LDAP Query Member Of attribute, which performs reverse membership queries.

.PARAMETER new_name
    Specifies the name of the LDAP provider.

.PARAMETER name_attribute
    Specifies the LDAP UID attribute, which is used as the login name.

.PARAMETER netgroup_base_dn
    Specifies the distinguished name of the entry where LDAP searches for netgroups are started.

.PARAMETER netgroup_filter
    Specifies the LDAP filter for netgroup objects.

.PARAMETER netgroup_members_attribute
    Specifies the LDAP Netgroup Members attribute.

.PARAMETER netgroup_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER netgroup_triple_attribute
    Specifies the LDAP Netgroup Triple attribute.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER nt_password_attribute
    Specifies the LDAP NT Password attribute.

.PARAMETER provider_domain
    Specifies the provider domain.

.PARAMETER require_secure_connection
    Determines whether to continue over a non-TLS connection.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER search_scope
    Specifies the default depth from the base DN to perform LDAP searches.
    Valid inputs: base,onelevel,subtree,children

.PARAMETER search_timeout
    Specifies the search timeout period in seconds.

.PARAMETER server_uris
    Specifies the server URIs.

.PARAMETER shadow_expire_attribute
    Sets the attribute name that indicates the absolute date to expire the account.

.PARAMETER shadow_flag_attribute
    Sets the attribute name that indicates the section of the shadow map that is used to store the flag value.

.PARAMETER shadow_inactive_attribute
    Sets the attribute name that indicates the number of days of inactivity that is allowed for the user.

.PARAMETER shadow_last_change_attribute
    Sets the attribute name that indicates the last change of the shadow information.

.PARAMETER shadow_max_attribute
    Sets the attribute name that indicates the maximum number of days a password can be valid.

.PARAMETER shadow_min_attribute
    Sets the attribute name that indicates the minimum number of days between shadow changes.

.PARAMETER shadow_user_filter
    Sets LDAP filter for shadow user objects.

.PARAMETER shadow_warning_attribute
    Sets the attribute name that indicates the number of days before the password expires to warn the user.

.PARAMETER shell_attribute
    Specifies the the LDAP Shell attribute.

.PARAMETER template
    Specifies template to be used to create the LDAP provider. The list of templates can be found at /auth/providers/ldap-templates. Any fields directly defined in your request will override the template values.

.PARAMETER uid_attribute
    Specifies the the LDAP UID Number attribute.

.PARAMETER unfindable_groups
    Specifies the groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unique_group_members_attribute
    Sets the LDAP Unique Group Members attribute.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER user_base_dn
    Specifies the distinguished name of the entry at which to start LDAP searches for users.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER user_filter
    Specifies the LDAP filter for user objects.

.PARAMETER user_search_scope
    Specifies the depth from the base DN to perform LDAP searches.
    Valid inputs: default,base,onelevel,subtree,children

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$alternate_security_identities_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$balance_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$bind_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('simple','gssapi','digest-md5')][string]$bind_mechanism,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$bind_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$bind_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$certificate_authority_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$cn_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$crypt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$email_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][string]$gecos_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$gid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][string]$group_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][string]$group_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][string]$group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][ValidateSet('default','base','onelevel','subtree','children')][string]$group_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][string]$homedir_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$ignore_tls_errors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][string]$member_of_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][string]$name_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][string]$netgroup_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][string]$netgroup_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][string]$netgroup_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('default','base','onelevel','subtree','children')][string]$netgroup_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][string]$netgroup_triple_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][string]$nt_password_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=45)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=46)][bool]$require_secure_connection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=47)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=48)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=49)][ValidateSet('base','onelevel','subtree','children')][string]$search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=50)][int]$search_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=51)][array]$server_uris,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=52)][string]$shadow_expire_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=53)][string]$shadow_flag_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=54)][string]$shadow_inactive_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=55)][string]$shadow_last_change_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=56)][string]$shadow_max_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=57)][string]$shadow_min_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=58)][string]$shadow_user_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=59)][string]$shadow_warning_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=60)][string]$shell_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=61)][string]$template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=62)][string]$uid_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=63)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=64)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=65)][string]$unique_group_members_attribute,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=66)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=67)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=68)][string]$user_base_dn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=69)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=70)][string]$user_filter,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=71)][ValidateSet('default','base','onelevel','subtree','children')][string]$user_search_scope,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=72)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=73)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProvidersLdapv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/auth/providers/ldap/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProvidersLdapv4

function Set-isiAuthProviderLocal{
<#
.SYNOPSIS
    Set Auth Provider Local

.DESCRIPTION
    Modify the local provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER create_home_directory
    Automatically creates the home directory on the first login.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER lockout_duration
    Specifies the length of time in seconds that an account will be inaccessible after multiple failed login attempts.

.PARAMETER lockout_threshold
    Specifies the number of failed login attempts necessary before an account is locked.

.PARAMETER lockout_window
    Specifies the duration of time in seconds in which the number of failed attempts set in the 'lockout_threshold' parameter must be made before an account is locked.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER machine_name
    Specifies the domain for this provider through which users and groups are qualified.

.PARAMETER max_password_age
    Specifies the maximum password age in seconds.

.PARAMETER min_password_age
    Specifies the minimum password age in seconds.

.PARAMETER min_password_length
    Specifies the minimum password length.

.PARAMETER new_name
    Specifies the local provider name.

.PARAMETER password_complexity
    Specifies the conditions required for a password.

.PARAMETER password_history_length
    Specifies the number of previous passwords to store.

.PARAMETER password_prompt_time
    Specifies the time in seconds remaining before a user will be prompted for a password change.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$lockout_duration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$lockout_threshold,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$lockout_window,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$machine_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$max_password_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$min_password_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$min_password_length,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$password_complexity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][int]$password_history_length,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$password_prompt_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=16)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderLocal')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/local/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderLocal

function Set-isiAuthProviderNisv1{
<#
.SYNOPSIS
    Set Auth Provider Nis

.DESCRIPTION
    Modify the NIS provider.
 
.PARAMETER id
    Provider id

.PARAMETER name
    Provider name

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER balance_servers
    If true, connects the provider to a random server.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER create_home_directory
    Automatically creates the home directory on the first login.

.PARAMETER enabled
    If true, enables the NIS provider.

.PARAMETER enumerate_groups
    If true, allows the provider to enumerate groups.

.PARAMETER enumerate_users
    If true, allows the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER group_domain
    Specifies the domain for this provider through which groups are qualified.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER hostname_lookup
    If true, enables host name look ups.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER new_name
    Specifies the NIS provider name.

.PARAMETER nis_domain
    Specifies the NIS domain name.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER provider_domain
    Specifies the domain for the provider.

.PARAMETER request_timeout
    Specifies the request timeout interval in seconds.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER retry_time
    Specifies the timeout period in seconds after which a request will be retried.

.PARAMETER servers
    Adds an NIS server for this provider.

.PARAMETER unfindable_groups
    Specifies groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER ypmatch_using_tcp
    If true, specifies TCP for YP Match operations.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$balance_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$hostname_lookup,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][string]$nis_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$request_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][int]$retry_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][array]$servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][bool]$ypmatch_using_tcp,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=33)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderNisv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/providers/nis/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderNisv1
Set-Alias Set-isiAuthProviderNis -Value Set-isiAuthProviderNisv1
Export-ModuleMember -Alias Set-isiAuthProviderNis

function Set-isiAuthProviderNisv3{
<#
.SYNOPSIS
    Set Auth Provider Nis

.DESCRIPTION
    Modify the NIS provider.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER authentication
    If true, enables authentication and identity management through the authentication provider.

.PARAMETER balance_servers
    If true, connects the provider to a random server.

.PARAMETER check_online_interval
    Specifies the time in seconds between provider online checks.

.PARAMETER create_home_directory
    Automatically creates the home directory on the first login.

.PARAMETER enabled
    If true, enables the NIS provider.

.PARAMETER enumerate_groups
    If true, allows the provider to enumerate groups.

.PARAMETER enumerate_users
    If true, allows the provider to enumerate users.

.PARAMETER findable_groups
    Specifies the list of groups that can be resolved.

.PARAMETER findable_users
    Specifies the list of users that can be resolved.

.PARAMETER group_domain
    Specifies the domain for this provider through which groups are qualified.

.PARAMETER home_directory_template
    Specifies the path to the home directory template.

.PARAMETER hostname_lookup
    If true, enables host name look ups.

.PARAMETER listable_groups
    Specifies the groups that can be viewed in the provider.

.PARAMETER listable_users
    Specifies the users that can be viewed in the provider.

.PARAMETER login_shell
    Specifies the login shell path.

.PARAMETER new_name
    Specifies the NIS provider name.

.PARAMETER nis_domain
    Specifies the NIS domain name.

.PARAMETER normalize_groups
    Normalizes group names to lowercase before look up.

.PARAMETER normalize_users
    Normalizes user names to lowercase before look up.

.PARAMETER ntlm_support
    Specifies which NTLM versions to support for users with NTLM-compatible credentials.
    Valid inputs: all,v2only,none

.PARAMETER provider_domain
    Specifies the domain for the provider.

.PARAMETER request_timeout
    Specifies the request timeout interval in seconds.

.PARAMETER restrict_findable
    If true, checks the provider for filtered lists of findable and unfindable users and groups.

.PARAMETER restrict_listable
    If true, checks the provider for filtered lists of listable and unlistable users and groups.

.PARAMETER retry_time
    Specifies the timeout period in seconds after which a request will be retried.

.PARAMETER servers
    Adds an NIS server for this provider.

.PARAMETER unfindable_groups
    Specifies groups that cannot be resolved by the provider.

.PARAMETER unfindable_users
    Specifies users that cannot be resolved by the provider.

.PARAMETER unlistable_groups
    Specifies a group that cannot be listed by the provider.

.PARAMETER unlistable_users
    Specifies a user that cannot be listed by the provider.

.PARAMETER user_domain
    Specifies the domain for this provider through which users are qualified.

.PARAMETER ypmatch_using_tcp
    If true, specifies TCP for YP Match operations.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$balance_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$check_online_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$create_home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$enumerate_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$enumerate_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][array]$findable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][array]$findable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$group_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$home_directory_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$hostname_lookup,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$listable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][array]$listable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$login_shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][string]$nis_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$normalize_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$normalize_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][ValidateSet('all','v2only','none')][string]$ntlm_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$provider_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$request_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$restrict_findable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$restrict_listable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][int]$retry_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][array]$servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$unfindable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][array]$unfindable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][array]$unlistable_groups,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][array]$unlistable_users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][string]$user_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][bool]$ypmatch_using_tcp,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=33)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthProviderNisv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/auth/providers/nis/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthProviderNisv3

function Set-isiAuthRole{
<#
.SYNOPSIS
    Set Auth Role

.DESCRIPTION
    Modify the role.
 
.PARAMETER id
    Role id

.PARAMETER name
    Role name

.PARAMETER description
    Specifies the description of the role.

.PARAMETER members
    Specifies the users or groups that have this role.

.PARAMETER new_name
    Specifies the name of the role.

.PARAMETER privileges
    Specifies the privileges granted by this role.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$members,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$privileges,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthRole')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/roles/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthRole

function Set-isiAuthSettingsAcls{
<#
.SYNOPSIS
    Set Auth Settings Acls

.DESCRIPTION
    Modify cluster ACL policy settings.
 
.PARAMETER access
    Access checks (chmod, chown).
    Valid inputs: unix,windows

.PARAMETER calcmode
    Displayed mode bits.
    Valid inputs: approx,777

.PARAMETER calcmode_group
    Approximate group mode bits when ACL exists.
    Valid inputs: group_aces,group_only

.PARAMETER calcmode_owner
    Approximate owner mode bits when ACL exists.
    Valid inputs: owner_aces,owner_only

.PARAMETER chmod
    chmod on files with existing ACLs.
    Valid inputs: remove,replace,replace_users_and_groups,merge,deny,ignore

.PARAMETER chmod_007
    chmod (007) on files with existing ACLs.
    Valid inputs: default,remove

.PARAMETER chmod_inheritable
    ACLs created on directories by UNIX chmod.
    Valid inputs: yes,no

.PARAMETER chown
    chown/chgrp on files with existing ACLs.
    Valid inputs: owner_group_and_acl,owner_group_only,ignore

.PARAMETER create_over_smb
    ACL creation over SMB.
    Valid inputs: allow,disallow

.PARAMETER dos_attr
     Read only DOS attribute.
    Valid inputs: deny_smb,deny_smb_and_nfs

.PARAMETER group_owner_inheritance
    Group owner inheritance.
    Valid inputs: native,parent,creator

.PARAMETER rwx
    Treatment of 'rwx' permissions.
    Valid inputs: retain,full_control

.PARAMETER synthetic_denies
    Synthetic 'deny' ACEs.
    Valid inputs: none,remove

.PARAMETER utimes
    Access check (utimes)
    Valid inputs: only_owner,owner_and_write

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('unix','windows')][string]$access,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('approx','777')][string]$calcmode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('group_aces','group_only')][string]$calcmode_group,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('owner_aces','owner_only')][string]$calcmode_owner,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateSet('remove','replace','replace_users_and_groups','merge','deny','ignore')][string]$chmod,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('default','remove')][string]$chmod_007,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('yes','no')][string]$chmod_inheritable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('owner_group_and_acl','owner_group_only','ignore')][string]$chown,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateSet('allow','disallow')][string]$create_over_smb,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateSet('deny_smb','deny_smb_and_nfs')][string]$dos_attr,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateSet('native','parent','creator')][string]$group_owner_inheritance,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateSet('retain','full_control')][string]$rwx,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateSet('none','remove')][string]$synthetic_denies,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][ValidateSet('only_owner','owner_and_write')][string]$utimes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=14)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsAcls')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/auth/settings/acls" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsAcls

function Set-isiAuthSettingsGlobal{
<#
.SYNOPSIS
    Set Auth Settings Global

.DESCRIPTION
    Modify the global settings.
 
.PARAMETER alloc_retries
    Specifies the number of times to retry an ID allocation before failing.

.PARAMETER gid_range_enabled
    If true, allocates GIDs from a fixed range.

.PARAMETER gid_range_max
    Specifies the ending number for a fixed range from which GIDs are allocated.

.PARAMETER gid_range_min
    Specifies the starting number for a fixed range from which GIDs are allocated.

.PARAMETER gid_range_next
    Specifies the next GID to allocate.

.PARAMETER group_uid
    Specifies the user iD for a group when requested by the kernel.

.PARAMETER load_providers
    Specifies which providers are loaded by the authentication daemon (lsassd).

.PARAMETER min_mapped_rid
    Starts the RID in the local domain to map a UID and a GID.

.PARAMETER null_gid
    Specifies an alternative GID when the kernel is unable to retrieve a GID for a persona.

.PARAMETER null_uid
    Specifies an alternative UID when the kernel is unable to retrieve a UID for a persona.

.PARAMETER on_disk_identity
    Specifies the type of identity that is stored on disk.
    Valid inputs: native,unix,sid

.PARAMETER rpc_block_time
    Specifies the minimum amount of time in milliseconds to wait before performing an oprestart.

.PARAMETER rpc_max_requests
    Specifies the maximum number of outstanding RPC requests.

.PARAMETER rpc_timeout
    Specifies the maximum amount of time in seconds to wait for an idmap response.

.PARAMETER send_ntlmv2
    If true, sends NTLMv2 responses.

.PARAMETER space_replacement
    Specifies the space replacement character.

.PARAMETER system_gid_threshold
    Specifies the minimum GID to attempt to look up in the idmap database.

.PARAMETER system_uid_threshold
    Specifies the minimum UID to attempt to look up in the idmap database.

.PARAMETER uid_range_enabled
    If true, allocates UIDs from a fixed range.

.PARAMETER uid_range_max
    Specifies the ending number for a fixed range from which UIDs are allocated.

.PARAMETER uid_range_min
    Specifies the starting number for a fixed range from which UIDs are allocated.

.PARAMETER uid_range_next
    Specifies the next UID to allocate.

.PARAMETER unknown_gid
    Specifies the GID for the unknown (anonymous) group.

.PARAMETER unknown_uid
    Specifies the UID for the unknown (anonymous) user.

.PARAMETER user_object_cache_size
    Specifies the maximum size (in bytes) of the security object cache in the authentication daemon.

.PARAMETER workgroup
    Specifies the NetBIOS workgroup or domain.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Zone which contains any per-zone settings.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$alloc_retries,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$gid_range_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$gid_range_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$gid_range_min,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$gid_range_next,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$group_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][array]$load_providers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$min_mapped_rid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$null_gid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$null_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateSet('native','unix','sid')][string]$on_disk_identity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$rpc_block_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$rpc_max_requests,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][int]$rpc_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][bool]$send_ntlmv2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$space_replacement,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$system_gid_threshold,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$system_uid_threshold,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$uid_range_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][int]$uid_range_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][int]$uid_range_min,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$uid_range_next,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$unknown_gid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][int]$unknown_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][int]$user_object_cache_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][string]$workgroup,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=26)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsGlobal')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/auth/settings/global" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsGlobal

function Set-isiAuthSettingsKrb5Defaults{
<#
.SYNOPSIS
    Set Auth Settings Krb5 Defaults

.DESCRIPTION
    Modify the krb5 settings.
 
.PARAMETER allow_weak_crypto
    If true, allow the use of DES encryption

.PARAMETER always_send_preauth
    If true, always attempts to preauthenticate to the domain controller.

.PARAMETER default_realm
    Specifies the realm for unqualified names.

.PARAMETER dns_lookup_kdc
    If true, find KDCs through the DNS.

.PARAMETER dns_lookup_realm
    If true, find realm names through the DNS.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$allow_weak_crypto,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$always_send_preauth,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$default_realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$dns_lookup_kdc,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$dns_lookup_realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsKrb5Defaults')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/settings/krb5/defaults" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsKrb5Defaults

function Set-isiAuthSettingsKrb5Domain{
<#
.SYNOPSIS
    Set Auth Settings Krb5 Domain

.DESCRIPTION
    Modify the krb5 domain settings.
 
.PARAMETER id
    Domain id

.PARAMETER name
    Domain name

.PARAMETER realm
    Specifies the name of the realm.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsKrb5Domain')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/settings/krb5/domains/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsKrb5Domain

function Set-isiAuthSettingsKrb5Realm{
<#
.SYNOPSIS
    Set Auth Settings Krb5 Realm

.DESCRIPTION
    Modify the krb5 realm settings.
 
.PARAMETER id
    Realm id

.PARAMETER name
    Realm name

.PARAMETER admin_server
    Specifies the administrative server hostname.

.PARAMETER default_domain
    Specifies the default domain mapped to the realm.

.PARAMETER is_default_realm
    If true, indicates that the realm is the default.

.PARAMETER kdc
    Specifies the list of KDC hostnames.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$admin_server,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$default_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$is_default_realm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$kdc,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsKrb5Realm')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/auth/settings/krb5/realms/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsKrb5Realm

function Set-isiAuthSettingsMapping{
<#
.SYNOPSIS
    Set Auth Settings Mapping

.DESCRIPTION
    Modify the mapping settings.
 
.PARAMETER cache_entry_expiry
    Specifies the cache expiry in seconds of the idmapper.

.PARAMETER gid_range_enabled
    If true, allocates GIDs from a fixed range.

.PARAMETER gid_range_max
    Specifies the ending number for a fixed range from which GIDs are allocated.

.PARAMETER gid_range_min
    Specifies the starting number for a fixed range from which GIDs are allocated.

.PARAMETER gid_range_next
    Specifies the next GID to allocate.

.PARAMETER uid_range_enabled
    If true, allocates UIDs from a fixed range.

.PARAMETER uid_range_max
    Specifies the ending number for a fixed range from which UIDs are allocated.

.PARAMETER uid_range_min
    Specifies the starting number for a fixed range from which UIDs are allocated.

.PARAMETER uid_range_next
    Specifies the next UID to allocate.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Access zone which contains mapping settings.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$cache_entry_expiry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$gid_range_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$gid_range_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$gid_range_min,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$gid_range_next,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$uid_range_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$uid_range_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$uid_range_min,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$uid_range_next,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthSettingsMapping')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/auth/settings/mapping" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthSettingsMapping

function Set-isiAuthUser{
<#
.SYNOPSIS
    Set Auth User

.DESCRIPTION
    Modify the user.
 
.PARAMETER id
    User id

.PARAMETER name
    User name

.PARAMETER email
    Specifies an email address for the user.

.PARAMETER enabled
    If true, the authenticated user is enabled.

.PARAMETER expiry
    Specifies the Unix Epoch time when the auth user will expire.

.PARAMETER gecos
    Specifies the GECOS value, which is usually the full name.

.PARAMETER home_directory
    Specifies a home directory for the user.

.PARAMETER password
    Changes the password for the user.

.PARAMETER password_expires
    If true, the password should expire.

.PARAMETER primary_group
    Specifies the primary group by name.

.PARAMETER prompt_password_change
    If true, prompts the user to change their password at the next login.

.PARAMETER shell
    Specifies the shell for the user.

.PARAMETER sid
    Specifies a security identifier.

.PARAMETER uid
    Specifies a numeric user identifier.

.PARAMETER unlock
    If true, the user account should be unlocked.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER provider
    Optional provider type.

.PARAMETER access_zone
    Optional zone.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$email,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$expiry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$gecos,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$home_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$password_expires,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][object]$primary_group,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$prompt_password_change,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$shell,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$sid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$unlock,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=14)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][ValidateNotNullOrEmpty()][string]$provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            $queryArguments = @()
            if ($provider){
                $queryArguments += 'provider=' + $provider
                $BoundParameters.Remove('provider') | out-null
            }
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthUser')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/auth/users/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthUser

function Set-isiAuthUserChangePasswordv3{
<#
.SYNOPSIS
    Set Auth User Change Password

.DESCRIPTION
    Change the user's password.
 
.PARAMETER id
    User id

.PARAMETER name
    User name

.PARAMETER new_password
    Specifies user's new password

.PARAMETER old_password
    User's expired password

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Specifies access zone containing user.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_password,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$old_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthUserChangePasswordv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/auth/users/$parameter1/change-password" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthUserChangePasswordv3

function Set-isiAuthUserChangePasswordv1{
<#
.SYNOPSIS
    Set Auth User Change Password

.DESCRIPTION
    Change the user's password.
 
.PARAMETER id
    User id

.PARAMETER name
    User name

.PARAMETER new_password
    Specifies user's new password

.PARAMETER old_password
    User's expired password

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Specifies access zone containing user.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_password,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$old_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiAuthUserChangePasswordv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/auth/users/$parameter1/change_password" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiAuthUserChangePasswordv1

function Set-isiCertificateServer{
<#
.SYNOPSIS
    Set Certificate Server

.DESCRIPTION
    Modify a TLS server certificate.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER default
    Boolean identifying if a certificate is the default certificate.The default certificate is used as the fallback when no other certificates match a TLS enabled service's particular criteria. There must always be a configured default certificate.

.PARAMETER description
    Description field associated with a certificate provided for administrative convenience.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$default,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCertificateServer')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/certificate/server/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCertificateServer

function Set-isiCloudAccountv3{
<#
.SYNOPSIS
    Set Cloud Account

.DESCRIPTION
    Modify cloud account. All fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Account id

.PARAMETER name
    Account name

.PARAMETER account_id
    (S3 only) The user id of the S3 account

.PARAMETER account_username
    The username required to authenticate against the cloud service

.PARAMETER birth_cluster_id
    The guid of the cluster where this account was created

.PARAMETER enabled
    Whether this account is explicitly enabled or disabled by a user

.PARAMETER key
    A valid authentication key for connecting to the cloud

.PARAMETER new_name
    A unique name for this account

.PARAMETER skip_ssl_validation
    Indicates whether to skip SSL certificate validation when connecting to the cloud

.PARAMETER storage_region
    (S3 only) An appropriate region for the S3 account. For example, faster access times may be gained by referencing a nearby region

.PARAMETER telemetry_bucket
    (S3 only) The name of the bucket into which generated metrics reports are placed by the cloud service provider

.PARAMETER uri
    A valid URI pointing to the location of the cloud storage

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$account_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$account_username,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$birth_cluster_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$key,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$skip_ssl_validation,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$storage_region,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$telemetry_bucket,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$uri,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=11)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudAccountv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cloud/accounts/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudAccountv3

function Set-isiCloudAccountv4{
<#
.SYNOPSIS
    Set Cloud Account

.DESCRIPTION
    Modify cloud account. All fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Account id

.PARAMETER name
    Account name

.PARAMETER account_id
    (S3 only) The user id of the S3 account

.PARAMETER account_username
    The username required to authenticate against the cloud service

.PARAMETER birth_cluster_id
    The guid of the cluster where this account was created

.PARAMETER enabled
    Whether this account is explicitly enabled or disabled by a user

.PARAMETER key
    A valid authentication key for connecting to the cloud

.PARAMETER new_name
    A unique name for this account

.PARAMETER proxy
    The id or name of a proxy to be used by this account

.PARAMETER skip_account_check
    (Not recommended) Indicates whether to skip validation that the cloud account is still accessible

.PARAMETER skip_ssl_validation
    Indicates whether to skip SSL certificate validation when connecting to the cloud

.PARAMETER storage_region
    (S3 only) An appropriate region for the S3 account. For example, faster access times may be gained by referencing a nearby region

.PARAMETER telemetry_bucket
    (S3 only) The name of the bucket into which generated metrics reports are placed by the cloud service provider

.PARAMETER uri
    A valid URI pointing to the location of the cloud storage

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$account_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$account_username,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$birth_cluster_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$key,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$proxy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$skip_account_check,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$skip_ssl_validation,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$storage_region,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$telemetry_bucket,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][string]$uri,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=13)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudAccountv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/cloud/accounts/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudAccountv4

function Set-isiCloudJobv3{
<#
.SYNOPSIS
    Set Cloud Job

.DESCRIPTION
    Modify a cloud job or operation.
 
.PARAMETER id
    Job id

.PARAMETER name
    Job name

.PARAMETER all
    Whether to apply to the given operation type or to all jobs of the given operation type

.PARAMETER state
    The desired state of the job or operation
    Valid inputs: resume,pause,cancel

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$all,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('resume','pause','cancel')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            $queryArguments = @()
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudJobv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/cloud/jobs/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudJobv3

function Set-isiCloudPoolv3{
<#
.SYNOPSIS
    Set Cloud Pool

.DESCRIPTION
    Modify a cloud pool. All fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Pool id

.PARAMETER name
    Pool name

.PARAMETER accounts
    A list of valid names for the accounts in this pool. There is currently only one account allowed per pool.

.PARAMETER birth_cluster_id
    The guid of the cluster where this pool was created

.PARAMETER description
    A brief description of this pool

.PARAMETER new_name
    A unique name for this pool

.PARAMETER vendor
    A string identifier of the cloud services vendor

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$accounts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$birth_cluster_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$vendor,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudPoolv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cloud/pools/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudPoolv3

function Set-isiCloudProxy{
<#
.SYNOPSIS
    Set Cloud Proxy

.DESCRIPTION
    Modify cloud account. All fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Proxy id

.PARAMETER name
    Proxy name

.PARAMETER host
    A host name or network address for connecting to this proxy

.PARAMETER new_name
    A unique friendly name for this proxy configuration

.PARAMETER password
    The password to connect to this proxy if required (write-only)

.PARAMETER port
    The port used to connect to this proxy

.PARAMETER type
    The type of connection used to connect to this proxy
    Valid inputs: socks_4,socks_5,http

.PARAMETER username
    The username to connect to this proxy if required

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$port,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('socks_4','socks_5','http')][string]$type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$username,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudProxy')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/cloud/proxies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudProxy

function Set-isiCloudSettingsv3{
<#
.SYNOPSIS
    Set Cloud Settings

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER cloud_policy_defaults
    The default filepool policy values for cloudpools.

.PARAMETER retry_coefficient_archive
    Coefficients in the quadratic function for determining the rest period between successive archive attempts.

.PARAMETER retry_coefficient_cache_invalidation
    Coefficients in the quadratic function for determining the rest period between successive cache invalidation attempts.

.PARAMETER retry_coefficient_cloud_garbage_collection
    Coefficients in the quadratic function for determining the rest period between successive cloud garbage collection attempts.

.PARAMETER retry_coefficient_local_garbage_collection
    Coefficients in the quadratic function for determining the rest period between successive local garbage collection attempts.

.PARAMETER retry_coefficient_read_ahead
    Coefficients in the quadratic function for determining the rest period between successive read ahead attempts.

.PARAMETER retry_coefficient_recall
    Coefficients in the quadratic function for determining the rest period between successive recall attempts.

.PARAMETER retry_coefficient_writeback
    Coefficients in the quadratic function for determining the rest period between successive writeback attempts.

.PARAMETER sleep_timeout_archive
    Amount of time to wait between successive file archive operations.

.PARAMETER sleep_timeout_cache_invalidation
    Amount of time to wait between successive file cache_invalidation operations.

.PARAMETER sleep_timeout_cloud_garbage_collection
    Amount of time to wait between successive file cloud garbage collection operations.

.PARAMETER sleep_timeout_local_garbage_collection
    Amount of time to wait between successive file local garbage collection operations.

.PARAMETER sleep_timeout_read_ahead
    Amount of time to wait between successive file read ahead operations.

.PARAMETER sleep_timeout_recall
    Amount of time to wait between successive file recall operations.

.PARAMETER sleep_timeout_writeback
    Amount of time to wait between successive file writeback operations.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][object]$cloud_policy_defaults,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$retry_coefficient_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$retry_coefficient_cache_invalidation,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$retry_coefficient_cloud_garbage_collection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$retry_coefficient_local_garbage_collection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$retry_coefficient_read_ahead,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$retry_coefficient_recall,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$retry_coefficient_writeback,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][object]$sleep_timeout_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][object]$sleep_timeout_cache_invalidation,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][object]$sleep_timeout_cloud_garbage_collection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][object]$sleep_timeout_local_garbage_collection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][object]$sleep_timeout_read_ahead,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][object]$sleep_timeout_recall,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][object]$sleep_timeout_writeback,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=15)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiCloudSettingsv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cloud/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiCloudSettingsv3

function Set-isiClusterDiagnosticsGatherSettings{
<#
.SYNOPSIS
    Set Cluster Diagnostics Gather Settings

.DESCRIPTION
    Set the default options for isi_gather_info.
 
.PARAMETER esrs
    Use ESRS for upload of gather.

.PARAMETER ftp_upload
    

.PARAMETER ftp_upload_host
    Alternate FTP host to upload to.

.PARAMETER ftp_upload_mode
    FTP upload mode.
    Valid inputs: both,passive,active

.PARAMETER ftp_upload_pass
    FTP password for upload.

.PARAMETER ftp_upload_path
    Alternate FTP path to upload to.

.PARAMETER ftp_upload_proxy
    FTP proxy to use for upload.

.PARAMETER ftp_upload_proxy_port
    FTP proxy port to use for upload.

.PARAMETER ftp_upload_user
    FTP user for upload.

.PARAMETER gather_mode
    Set gather to full or incremental.
    Valid inputs: full,incremental

.PARAMETER http_upload
    Whether or not to use HTTP upload on completed gather.

.PARAMETER http_upload_host
    Alternate HTTP Host to upload to.

.PARAMETER http_upload_path
    Alternate path to write gather to.

.PARAMETER http_upload_proxy
    Proxy to use for HTTP upload.

.PARAMETER http_upload_proxy_port
    Alternate port for proxy server

.PARAMETER upload
    Upload gather to EMC.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$esrs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$ftp_upload,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$ftp_upload_host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('both','passive','active')][string]$ftp_upload_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$ftp_upload_pass,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$ftp_upload_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$ftp_upload_proxy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$ftp_upload_proxy_port,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$ftp_upload_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateSet('full','incremental')][string]$gather_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$http_upload,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$http_upload_host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][string]$http_upload_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$http_upload_proxy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][int]$http_upload_proxy_port,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$upload,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=16)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterDiagnosticsGatherSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/diagnostics/gather/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterDiagnosticsGatherSettings

function Set-isiClusterDiagnosticsNetloggerSettings{
<#
.SYNOPSIS
    Set Cluster Diagnostics Netlogger Settings

.DESCRIPTION
    Set the default options for isi_netlogger.
 
.PARAMETER clients
    IP Addresses or host names of clients

.PARAMETER count
    Count of capture files to keep, 0 is infinite.

.PARAMETER duration
    Duration in minutes of each capture file

.PARAMETER interfaces
    Network interfaces to capture on.

.PARAMETER nodelist
    List of nodes, or empty for all

.PARAMETER ports
    List of Integers of TCP or UDP ports

.PARAMETER protocols
    which protocol(s) to gather on

.PARAMETER snaplength
    Amount of bytes per packet to capture

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$duration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$interfaces,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$nodelist,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$ports,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$protocols,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$snaplength,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterDiagnosticsNetloggerSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/diagnostics/netlogger/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterDiagnosticsNetloggerSettings

function Set-isiClusterEmail{
<#
.SYNOPSIS
    Set Cluster Email

.DESCRIPTION
    Modify the cluster email notification settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER batch_mode
    This setting determines how notifications will be batched together to be sent by email. 'none' means each notification will be sent separately. 'severity' means notifications of the same severity will be sent together. 'category' means notifications of the same category will be sent together. 'all' means all notifications will be batched together and sent in a single email.
    Valid inputs: all,severity,category,none

.PARAMETER mail_relay
    The address of the SMTP server to be used for relaying the notification messages. An SMTP server is required in order to send notifications. If this string is empty, no emails will be sent.

.PARAMETER mail_sender
    The full email address that will appear as the sender of notification messages.

.PARAMETER mail_subject
    The subject line for notification messages from this cluster.

.PARAMETER smtp_auth_passwd
    Password to authenticate with if SMTP authentication is being used.

.PARAMETER smtp_auth_security
    The type of secure communication protocol to use if SMTP is being used. If 'none', plain text will be used, if 'starttls', the encrypted STARTTLS protocol will be used.
    Valid inputs: none,starttls

.PARAMETER smtp_auth_username
    Username to authenticate with if SMTP authentication is being used.

.PARAMETER smtp_port
    The port on the SMTP server to be used for relaying the notification messages.

.PARAMETER user_template
    Location of a custom template file that can be used to specify the layout of the notification emails.

.PARAMETER use_smtp_auth
    If true, this cluster will send SMTP authentication credentials to the SMTP relay server in order to send its notification emails. If false, the cluster will attempt to send its notification emails without authentication.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('all','severity','category','none')][string]$batch_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$mail_relay,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$mail_sender,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$mail_subject,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$smtp_auth_passwd,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('none','starttls')][string]$smtp_auth_security,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$smtp_auth_username,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$smtp_port,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$user_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$use_smtp_auth,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=10)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterEmail')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/cluster/email" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterEmail

function Set-isiClusterIdentityv3{
<#
.SYNOPSIS
    Set Cluster Identity

.DESCRIPTION
    Modify the login information.
 
.PARAMETER description
    A description of the cluster.

.PARAMETER logon
    The information displayed when a user logs in to the cluster.

.PARAMETER name
    The name of the cluster.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][object]$logon,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterIdentityv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/identity" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterIdentityv3

function Set-isiClusterNode{
<#
.SYNOPSIS
    Set Cluster Node

.DESCRIPTION
    Modify one or more node settings.
 
.PARAMETER id
    Lnn id

.PARAMETER name
    Lnn name

.PARAMETER drives
    List of the drives in this node.

.PARAMETER state
    Node state information (reported and modifiable).

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$drives,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][object]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterNode')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/nodes/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterNode

function Set-isiClusterNodeStateReadonly{
<#
.SYNOPSIS
    Set Cluster Node State Readonly

.DESCRIPTION
    Modify one or more node readonly state settings.
 
.PARAMETER id
    Lnn id

.PARAMETER name
    Lnn name

.PARAMETER allowed
    The current read-only mode allowed status for the node.

.PARAMETER enabled
    The current read-only user mode status for the node. NOTE: If read-only mode is currently disallowed for this node, it will remain read/write until read-only mode is allowed again. This value only sets or clears any user-specified requests for read-only mode. If the node has been placed into read-only mode by the system, it will remain in read-only mode until the system conditions which triggered read-only mode have cleared.

.PARAMETER mode
    The current read-only mode status for the node.

.PARAMETER status
    The current read-only mode status description for the node.

.PARAMETER valid
    The read-only state values are valid (False = Error).

.PARAMETER value
    The current read-only value (enumerated bitfield) for the node.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$allowed,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$status,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$valid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$value,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterNodeStateReadonly')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/nodes/$parameter1/state/readonly" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterNodeStateReadonly

function Set-isiClusterNodeStateServicelight{
<#
.SYNOPSIS
    Set Cluster Node State Servicelight

.DESCRIPTION
    Modify one or more node service light state settings.
 
.PARAMETER id
    Lnn id

.PARAMETER name
    Lnn name

.PARAMETER enabled
    The node service light state (True = on).

.PARAMETER present
    This node has a service light.

.PARAMETER supported
    This node supports a service light.

.PARAMETER valid
    The node service light state is valid (False = Error).

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$present,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$supported,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$valid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterNodeStateServicelight')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/nodes/$parameter1/state/servicelight" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterNodeStateServicelight

function Set-isiClusterNodeStateSmartfail{
<#
.SYNOPSIS
    Set Cluster Node State Smartfail

.DESCRIPTION
    Modify smartfail state of the node. Only the 'smartfailed' body member has any effect on node smartfail state.
 
.PARAMETER id
    Lnn id

.PARAMETER name
    Lnn name

.PARAMETER dead
    This node is dead (dead_devs).

.PARAMETER down
    This node is down (down_devs).

.PARAMETER in_cluster
    This node is in the cluster (all_devs).

.PARAMETER readonly
    This node is readonly (ro_devs).

.PARAMETER shutdown_readonly
    This node is shutdown readonly (down_devs).

.PARAMETER smartfailed
    This node is smartfailed (soft_devs).

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$dead,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$down,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$in_cluster,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$shutdown_readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$smartfailed,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterNodeStateSmartfail')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/nodes/$parameter1/state/smartfail" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterNodeStateSmartfail

function Set-isiClusterOwner{
<#
.SYNOPSIS
    Set Cluster Owner

.DESCRIPTION
    Modify the cluster contact info settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER company
    Cluster owner company name.

.PARAMETER location
    Cluster owner location.

.PARAMETER primary_email
    Cluster owner primary email address.

.PARAMETER primary_name
    Cluster owner primary contact name.

.PARAMETER primary_phone1
    Cluster owner primary contact phone number 1.

.PARAMETER primary_phone2
    Cluster owner primary contact phone number 2.

.PARAMETER secondary_email
    Cluster owner secondary email address.

.PARAMETER secondary_name
    Cluster owner secondary contact name.

.PARAMETER secondary_phone1
    Cluster owner secondary contact phone number 1.

.PARAMETER secondary_phone2
    Cluster owner secondary contact phone number 2.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$company,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$location,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$primary_email,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$primary_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$primary_phone1,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$primary_phone2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$secondary_email,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$secondary_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$secondary_phone1,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$secondary_phone2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=10)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterOwner')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/cluster/owner" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterOwner

function Set-isiClusterTimev3{
<#
.SYNOPSIS
    Set Cluster Time

.DESCRIPTION
    Set cluster time. Time will mostly be synchronized across nodes, but there may be slight drift.
 
.PARAMETER time
    The current time on the cluster as a UNIX epoch (seconds since 1/1/1970), as reported by this node.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterTimev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/time" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterTimev3

function Set-isiClusterTimezone{
<#
.SYNOPSIS
    Set Cluster Timezone

.DESCRIPTION
    Set a new timezone for the cluster.
 
.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=0)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterTimezone')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/timezone" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterTimezone

function Set-isiClusterTimezoneSettings{
<#
.SYNOPSIS
    Set Cluster Timezone Settings

.DESCRIPTION
    Modify the cluster timezone.
 
.PARAMETER abbreviation
    The abbreviation for this timezone.

.PARAMETER path
    The timezone path. This is the unique identifier for the timezone.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$abbreviation,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiClusterTimezoneSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/cluster/timezone/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiClusterTimezoneSettings

function Set-isiDedupeSettings{
<#
.SYNOPSIS
    Set Dedupe Settings

.DESCRIPTION
    Modify the dedupe settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER assess_paths
    The paths that will be assessed.

.PARAMETER paths
    The paths that will be deduped.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$assess_paths,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$paths,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiDedupeSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/dedupe/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiDedupeSettings

function Set-isiEventAlertConditionv3{
<#
.SYNOPSIS
    Set Event Alert Condition

.DESCRIPTION
    Modify the alert-condition
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER categories
    Event Group categories to be alerted

.PARAMETER channel_ids
    Channels for alert

.PARAMETER condition
    Trigger condition for alert
    Valid inputs: NEW,NEW EVENTS,ONGOING,SEVERITY INCREASE,SEVERITY DECREASE,RESOLVED

.PARAMETER eventgroup_ids
    Event Group IDs to be alerted

.PARAMETER interval
    Required with ONGOING condition only, period in seconds between alerts of ongoing conditions

.PARAMETER limit
    Required with NEW EVENTS condition only, limits the number of alerts sent as events are added

.PARAMETER transient
    Any eventgroup lasting less than this many seconds is deemed transient and will not generate alerts under this condition.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$categories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$channel_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('NEW','NEW EVENTS','ONGOING','SEVERITY INCREASE','SEVERITY DECREASE','RESOLVED')][string]$condition,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$eventgroup_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$transient,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventAlertConditionv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/event/alert-conditions/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventAlertConditionv3

function Set-isiEventAlertConditionv4{
<#
.SYNOPSIS
    Set Event Alert Condition

.DESCRIPTION
    Modify the alert-condition
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER categories
    Event Group categories to be alerted: all, 100000000 (SYS_DISK_EVENTS), 200000000 (NODE_STATUS_EVENTS), 300000000 (REBOOT_EVENTS), 400000000 (SW_EVENTS), 500000000 (QUOTA_EVENTS), 600000000 (SNAP_EVENTS), 700000000 (WINNET_EVENTS), 800000000 (FILESYS_EVENTS), 900000000 (HW_EVENTS), 1100000000 (CPOOL_EVENTS)

.PARAMETER channel_ids
    Channels for alert

.PARAMETER condition
    Trigger condition for alert
    Valid inputs: NEW,NEW EVENTS,ONGOING,SEVERITY INCREASE,SEVERITY DECREASE,RESOLVED

.PARAMETER eventgroup_ids
    Event Group IDs to be alerted

.PARAMETER interval
    Required with ONGOING condition only, period in seconds between alerts of ongoing conditions

.PARAMETER limit
    Required with NEW EVENTS condition only, limits the number of alerts sent as events are added

.PARAMETER severities
    Severities to be alerted

.PARAMETER transient
    Any eventgroup lasting less than this many seconds is deemed transient and will not generate alerts under this condition.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$categories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$channel_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('NEW','NEW EVENTS','ONGOING','SEVERITY INCREASE','SEVERITY DECREASE','RESOLVED')][string]$condition,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$eventgroup_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][array]$severities,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$transient,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventAlertConditionv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/event/alert-conditions/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventAlertConditionv4

function Set-isiEventChannel{
<#
.SYNOPSIS
    Set Event Channel

.DESCRIPTION
    Modify the channel.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER allowed_nodes
    Nodes that can be masters for this channel

.PARAMETER enabled
    Channel is to be used or not

.PARAMETER excluded_nodes
    Nodes that can be masters for this channel

.PARAMETER parameters
    A collection of parameters dependent on the channel type

.PARAMETER system
    Channel is a pre-defined system channel

.PARAMETER type
    The mechanism used by the channel
    Valid inputs: connectemc,smtp,snmp

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$allowed_nodes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$excluded_nodes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$parameters,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$system,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('connectemc','smtp','snmp')][string]$type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventChannel')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/event/channels/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventChannel

function Set-isiEventEventgroupOccurrences{
<#
.SYNOPSIS
    Set Event Eventgroup Occurrences

.DESCRIPTION
    Modify all eventgroup occurrences, resolve or ignore all
 
.PARAMETER ignore
    True if eventgroup is to be ignored

.PARAMETER resolved
    True if eventgroup is to be resolved

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$ignore,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$resolved,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventEventgroupOccurrences')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/event/eventgroup-occurrences" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventEventgroupOccurrences

function Set-isiEventEventgroupOccurrence{
<#
.SYNOPSIS
    Set Event Eventgroup Occurrence

.DESCRIPTION
    modify eventgroup occurrence.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER ignore
    True if eventgroup is to be ignored

.PARAMETER resolved
    True if eventgroup is to be resolved

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$ignore,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$resolved,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventEventgroupOccurrence')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/event/eventgroup-occurrences/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventEventgroupOccurrence

function Set-isiEventSettings{
<#
.SYNOPSIS
    Set Event Settings

.DESCRIPTION
    Update settings
 
.PARAMETER heartbeat_interval
    Interval between heartbeat events. "daily", "weekly", or "monthly".

.PARAMETER maintenance
    Maintenance period

.PARAMETER retention_days
    Retention period in days

.PARAMETER storage_limit
    Storage limit in megabytes per terabyte of available storage

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$heartbeat_interval,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][object]$maintenance,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$retention_days,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$storage_limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiEventSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/event/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiEventSettings

function Set-isiFileFilterSettings{
<#
.SYNOPSIS
    Set File Filter Settings

.DESCRIPTION
    Modify one or more File Filtering settings for an access zone
 
.PARAMETER file_filtering_enabled
    Indicates whether file filtering is enabled on this zone.

.PARAMETER file_filter_extensions
    List of file extensions to be filtered.

.PARAMETER file_filter_type
    Specifies if filter list is for deny or allow. Default is deny.
    Valid inputs: deny,allow

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$file_filtering_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$file_filter_extensions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('deny','allow')][string]$file_filter_type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFileFilterSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/file-filter/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFileFilterSettings

function Set-isiFilepoolDefaultPolicyv1{
<#
.SYNOPSIS
    Set Filepool Default Policy

.DESCRIPTION
    Set default file pool policy.
 
.PARAMETER actions
    

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$actions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilepoolDefaultPolicyv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/filepool/default-policy" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilepoolDefaultPolicyv1
Set-Alias Set-isiFilepoolDefaultPolicy -Value Set-isiFilepoolDefaultPolicyv1
Export-ModuleMember -Alias Set-isiFilepoolDefaultPolicy

function Set-isiFilepoolDefaultPolicyv4{
<#
.SYNOPSIS
    Set Filepool Default Policy

.DESCRIPTION
    Set default file pool policy.
 
.PARAMETER actions
    

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$actions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilepoolDefaultPolicyv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/filepool/default-policy" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilepoolDefaultPolicyv4

function Set-isiFilepoolPolicyv1{
<#
.SYNOPSIS
    Set Filepool Policy

.DESCRIPTION
    Modify file pool policy. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Policy id

.PARAMETER name
    Policy name

.PARAMETER actions
    A list of actions to be taken for matching files

.PARAMETER apply_order
    The order in which this policy should be applied (relative to other policies)

.PARAMETER description
    A description for this policy

.PARAMETER file_matching_pattern
    The file matching rules for this policy

.PARAMETER new_name
    A unique name for this policy

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$actions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$apply_order,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$file_matching_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilepoolPolicyv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/filepool/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilepoolPolicyv1
Set-Alias Set-isiFilepoolPolicy -Value Set-isiFilepoolPolicyv1
Export-ModuleMember -Alias Set-isiFilepoolPolicy

function Set-isiFilepoolPolicyv4{
<#
.SYNOPSIS
    Set Filepool Policy

.DESCRIPTION
    Modify file pool policy. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Polname id

.PARAMETER name
    Polname name

.PARAMETER actions
    A list of actions to be taken for matching files

.PARAMETER apply_order
    The order in which this policy should be applied (relative to other policies)

.PARAMETER description
    A description for this policy

.PARAMETER file_matching_pattern
    The file matching rules for this policy

.PARAMETER new_name
    A unique name for this policy

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$actions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$apply_order,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$file_matching_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilepoolPolicyv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/filepool/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilepoolPolicyv4

function Set-isiFilesystemAccessTime{
<#
.SYNOPSIS
    Set Filesystem Access Time

.DESCRIPTION
    Set settings for access time.
 
.PARAMETER enabled
    Enable access time tracking.

.PARAMETER precision
    Access time tracked on each cluster file accurate to this number of seconds.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$precision,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilesystemAccessTime')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/filesystem/settings/access-time" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilesystemAccessTime

function Set-isiFilesystemCharacterEncoding{
<#
.SYNOPSIS
    Set Filesystem Character Encoding

.DESCRIPTION
    Set current character encoding.
 
.PARAMETER current_encoding
    Current character encoding.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$current_encoding,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFilesystemCharacterEncoding')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/filesystem/settings/character-encodings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFilesystemCharacterEncoding

function Set-isiFsaResultv1{
<#
.SYNOPSIS
    Set Fsa Result

.DESCRIPTION
    Modify result set. Only the pinned property can be changed at this time.
 
.PARAMETER id
    Result id

.PARAMETER name
    Result name

.PARAMETER pinned
    True if the result is pinned to prevent automatic removal.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$pinned,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFsaResultv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/fsa/results/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFsaResultv1
Set-Alias Set-isiFsaResult -Value Set-isiFsaResultv1
Export-ModuleMember -Alias Set-isiFsaResult

function Set-isiFsaResultv3{
<#
.SYNOPSIS
    Set Fsa Result

.DESCRIPTION
    Modify result set. Only the pinned property can be changed at this time.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER pinned
    True if the result is pinned to prevent automatic removal.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$pinned,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFsaResultv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/fsa/results/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFsaResultv3

function Set-isiFsaSettings{
<#
.SYNOPSIS
    Set Fsa Settings

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER default_template
    Name of question template to use for new FSA jobs.

.PARAMETER disk_usage_depth
    Maximum directory depth used for disk_usage question if not specified in the question.

.PARAMETER max_age
    Maximum age of non-pinned results in seconds.

.PARAMETER max_count
    Maximum number of non-pinned result sets to keep.

.PARAMETER squash_depth
    Squash depth to use for squash binning questions if not specified in the question.

.PARAMETER top_n_max
    Maximum number of items in a Top-N question result if not specified in the question.

.PARAMETER use_snapshot
    If true, use a snapshot for consistency, otherwise analyze head.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$default_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$disk_usage_depth,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$max_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$max_count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$squash_depth,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$top_n_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$use_snapshot,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFsaSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/fsa/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFsaSettings

function Set-isiHardwareFcport{
<#
.SYNOPSIS
    Set Hardware Fcport

.DESCRIPTION
    Change wwnn, wwpn, state, topology, or rate of a FC port
 
.PARAMETER id
    Port id

.PARAMETER name
    Port name

.PARAMETER new_id
    The unique display id

.PARAMETER rate
    
    Valid inputs: auto,1,2,4,8

.PARAMETER state
    State of the port
    Valid inputs: enable,disable

.PARAMETER topology
    
    Valid inputs: auto,ptp,loop

.PARAMETER wwnn
    World wide node name of the port

.PARAMETER wwpn
    World wide port name of the port

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('auto','1','2','4','8')][string]$rate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('enable','disable')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateSet('auto','ptp','loop')][string]$topology,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$wwnn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$wwpn,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_id){
                $BoundParameters.Remove('new_id') | out-null
                $BoundParameters.Add('id',$new_id)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHardwareFcport')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/hardware/fcports/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHardwareFcport

function Set-isiHardwareTape{
<#
.SYNOPSIS
    Set Hardware Tape

.DESCRIPTION
    Tape/Changer device modify
 
.PARAMETER id
    Name id

.PARAMETER name
    Name name

.PARAMETER new_name
    The name of the device

.PARAMETER state
    Set the device state to close
    Valid inputs: closed

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('closed')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHardwareTape')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/hardware/tape/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHardwareTape

function Set-isiJob{
<#
.SYNOPSIS
    Set Job

.DESCRIPTION
    Modify a running or paused job instance. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Job id

.PARAMETER name
    Job name

.PARAMETER policy
    Impact policy of this job instance.

.PARAMETER priority
    Priority of this job instance; lower numbers preempt higher numbers.

.PARAMETER state
    Desired new state of this job instance.
    Valid inputs: run,pause,cancel

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$priority,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('run','pause','cancel')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiJob')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/job/jobs/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiJob

function Set-isiJobPolicy{
<#
.SYNOPSIS
    Set Job Policy

.DESCRIPTION
    Modify a job impact policy.
 
.PARAMETER id
    Policy id

.PARAMETER name
    Policy name

.PARAMETER description
    A helpful human-readable description of the impact policy.

.PARAMETER intervals
    

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$intervals,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiJobPolicy')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/job/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiJobPolicy

function Set-isiJobType{
<#
.SYNOPSIS
    Set Job Type

.DESCRIPTION
    Modify the job type. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Type id

.PARAMETER name
    Type name

.PARAMETER enabled
    Whether the job type is enabled and able to run.

.PARAMETER policy
    Default impact policy of this job type.

.PARAMETER priority
    Default priority of this job type; lower numbers preempt higher numbers.

.PARAMETER schedule
    The schedule on which this job type is queued, if any.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$priority,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiJobType')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/job/types/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiJobType

function Set-isiNetworkDnscache{
<#
.SYNOPSIS
    Set Network Dnscache

.DESCRIPTION
    Modify network dns cache settings.
 
.PARAMETER cache_entry_limit
    DNS cache entry limit

.PARAMETER cluster_timeout
    Timeout value for calls made to other nodes in the cluster

.PARAMETER dns_timeout
    Timeout value for calls made to the dns resolvers

.PARAMETER eager_refresh
    Lead time to refresh cache entries nearing expiration

.PARAMETER testping_delta
    Deltas for checking cbind cluster health

.PARAMETER ttl_max_noerror
    Upper bound on ttl for cache hits

.PARAMETER ttl_max_nxdomain
    Upper bound on ttl for nxdomain

.PARAMETER ttl_max_other
    Upper bound on ttl for non-nxdomain failures

.PARAMETER ttl_max_servfail
    Upper bound on ttl for server failures

.PARAMETER ttl_min_noerror
    Lower bound on ttl for cache hits

.PARAMETER ttl_min_nxdomain
    Lower bound on ttl for nxdomain

.PARAMETER ttl_min_other
    Lower bound on ttl for non-nxdomain failures

.PARAMETER ttl_min_servfail
    Lower bound on ttl for server failures

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$cache_entry_limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$cluster_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$dns_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$eager_refresh,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$testping_delta,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$ttl_max_noerror,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$ttl_max_nxdomain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$ttl_max_other,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$ttl_max_servfail,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$ttl_min_noerror,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$ttl_min_nxdomain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$ttl_min_other,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$ttl_min_servfail,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=13)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNetworkDnscache')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/network/dnscache" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNetworkDnscache

function Set-isiNetworkExternal{
<#
.SYNOPSIS
    Set Network External

.DESCRIPTION
    Modify external network settings.
 
.PARAMETER sbr
    Enable or disable Source Based Routing (Defaults to false)

.PARAMETER sc_rebalance_delay
    Delay in seconds for IP rebalance.

.PARAMETER tcp_ports
    List of client TCP ports.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$sbr,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$sc_rebalance_delay,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$tcp_ports,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNetworkExternal')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/network/external" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNetworkExternal

function Set-isiNetworkGroupnet{
<#
.SYNOPSIS
    Set Network Groupnet

.DESCRIPTION
    Modify a network groupnet.
 
.PARAMETER id
    Groupnet id

.PARAMETER description
    A description of the groupnet.

.PARAMETER dns_cache_enabled
    DNS caching is enabled or disabled.

.PARAMETER dns_options
    List of DNS resolver options.

.PARAMETER dns_search
    List of DNS search suffixes.

.PARAMETER dns_servers
    List of Domain Name Server IP addresses.

.PARAMETER name
    The name of the groupnet.

.PARAMETER server_side_dns_search
    Enable or disable appending nodes DNS search list to client DNS inquiries directed at SmartConnect service IP.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$dns_cache_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$dns_options,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$dns_search,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][array]$dns_servers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$server_side_dns_search,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $parameter1 = $id
            $BoundParameters.Remove('id') | out-null
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNetworkGroupnet')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/network/groupnets/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNetworkGroupnet

function Set-isiNetworkGroupnetSubnet{
<#
.SYNOPSIS
    Set Network Groupnet Subnet

.DESCRIPTION
    Modify a network subnet.
 
.PARAMETER groupnet_id
    Groupnet groupnet_id

.PARAMETER groupnet_name
    Groupnet groupnet_name

.PARAMETER id
     id

.PARAMETER description
    A description of the subnet.

.PARAMETER dsr_addrs
    List of Direct Server Return addresses.

.PARAMETER gateway
    Gateway IP address.

.PARAMETER gateway_priority
    Gateway priority.

.PARAMETER mtu
    MTU of the subnet.

.PARAMETER name
    The name of the subnet.

.PARAMETER prefixlen
    Subnet Prefix Length.

.PARAMETER sc_service_addr
    The address that SmartConnect listens for DNS requests.

.PARAMETER vlan_enabled
    VLAN tagging enabled or disabled.

.PARAMETER vlan_id
    VLAN ID for all interfaces in the subnet.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER enforce
    force modifying this subnet even if it causes an MTU conflict.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$groupnet_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$groupnet_name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$dsr_addrs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$gateway,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$gateway_priority,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$mtu,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$prefixlen,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$sc_service_addr,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$vlan_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$vlan_id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=12)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][ValidateNotNullOrEmpty()][bool]$enforce,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('groupnet_id')){
                $parameter1 = $groupnet_id
                $BoundParameters.Remove('groupnet_id') | out-null
            } else {
                $parameter1 = $groupnet_name
                $BoundParameters.Remove('groupnet_name') | out-null
            }
            $parameter2 = $id
            $BoundParameters.Remove('id') | out-null
            $queryArguments = @()
            if ($enforce){
                $queryArguments += 'force=' + $enforce
                $BoundParameters.Remove('enforce') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNetworkGroupnetSubnet')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/network/groupnets/$parameter1/subnets/$parameter2" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNetworkGroupnetSubnet

function Set-isiFtpSettings{
<#
.SYNOPSIS
    Set Protocols Ftp Settings

.DESCRIPTION
    Modify the FTP settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER accept_timeout
    The timeout, in seconds, for a remote client to establish a PASV style data connection.

.PARAMETER allow_anon_access
    Controls whether anonymous logins are permitted or not.

.PARAMETER allow_anon_upload
    Controls whether anonymous users will be permitted to upload files.

.PARAMETER allow_dirlists
    If set to false, all directory list commands will return a permission denied error.

.PARAMETER allow_downloads
    If set to false, all downloads requests will return a permission denied error.

.PARAMETER allow_local_access
    Controls whether local logins are permitted or not.

.PARAMETER allow_writes
    This controls whether any FTP commands which change the filesystem are allowed or not.

.PARAMETER always_chdir_homedir
    This controls whether FTP will always initially change directories to the home directory of the user, regardless of whether it is chroot-ing.

.PARAMETER anon_chown_username
    This is the name of the user who is given ownership of anonymously uploaded files.

.PARAMETER anon_password_list
    A list of passwords for anonymous users.

.PARAMETER anon_root_path
    This option represents a directory in /ifs which vsftpd will try to change into after an anonymous login.

.PARAMETER anon_umask
    The value that the umask for file creation is set to for anonymous users.

.PARAMETER ascii_mode
    Controls whether ascii mode data transfers are honored for various types of requests.
    Valid inputs: off,upload,download,both

.PARAMETER chroot_exception_list
    A list of users that are not chrooted when logging in.

.PARAMETER chroot_local_mode
    If set to 'all', all local users will be (by default) placed in a chroot() jail in their home directory after login. If set to 'all-with-exceptions', all local users except those listed in the chroot exception list (isi ftp chroot-exception-list) will be placed in a chroot() jail in their home directory after login. If set to 'none', no local users will be chrooted by default. If set to 'none-with-exceptions', only the local users listed in the chroot exception list (isi ftp chroot-exception-list) will be place in a chroot() jail in their home directory after login.
    Valid inputs: all,none,all-with-exceptions,none-with-exceptions

.PARAMETER connect_timeout
    The timeout, in seconds, for a remote client to respond to our PORT style data connection.

.PARAMETER data_timeout
    The timeout, in seconds, which is roughly the maximum time we permit data transfers to stall for with no progress. If the timeout triggers, the remote client is kicked off.

.PARAMETER denied_user_list
    A list of uses that will be denied access.

.PARAMETER dirlist_localtime
    If enabled, display directory listings with the time in your local time zone. The default is to display GMT. The times returned by the MDTM FTP command are also affected by this option.

.PARAMETER dirlist_names
    When set to 'hide', all user and group information in directory listings will be displayed as 'ftp'. When set to 'textual', textual names are shown in the user and group fields of directory listings. When set to 'numeric', numeric IDs are show in the user and group fields of directory listings.
    Valid inputs: numeric,textual,hide

.PARAMETER file_create_perm
    The permissions with which uploaded files are created. Umasks are applied on top of this value.

.PARAMETER limit_anon_passwords
    This field determines whether the anon_password_list is used.

.PARAMETER local_root_path
    This option represents a directory in /ifs which vsftpd will try to change into after a local login.

.PARAMETER local_umask
    The value that the umask for file creation is set to for local users.

.PARAMETER server_to_server
    If enabled, allow server-to-server (FXP) transfers.

.PARAMETER service
    This field controls whether the FTP daemon is running.

.PARAMETER session_support
    If enabled, maintain login sessions for each user through Pluggable Authentication Modules (PAM). Disabling this option prevents the ability to do automatic home directory creation if that functionality were otherwise available.

.PARAMETER session_timeout
    The timeout, in seconds, which is roughly the maximum time we permit data transfers to stall for with no progress. If the timeout triggers, the remote client is kicked off.

.PARAMETER user_config_dir
    Specifies the directory where per-user config overrides can be found.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$accept_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$allow_anon_access,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$allow_anon_upload,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$allow_dirlists,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$allow_downloads,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$allow_local_access,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$allow_writes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$always_chdir_homedir,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$anon_chown_username,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][array]$anon_password_list,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$anon_root_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$anon_umask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateSet('off','upload','download','both')][string]$ascii_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][array]$chroot_exception_list,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateSet('all','none','all-with-exceptions','none-with-exceptions')][string]$chroot_local_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$connect_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$data_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][array]$denied_user_list,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$dirlist_localtime,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][ValidateSet('numeric','textual','hide')][string]$dirlist_names,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][int]$file_create_perm,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][bool]$limit_anon_passwords,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][string]$local_root_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][int]$local_umask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$server_to_server,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$session_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][int]$session_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$user_config_dir,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=29)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiFtpSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ftp/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiFtpSettings

function Set-isiHdfsLogLevel{
<#
.SYNOPSIS
    Set Protocols Hdfs Log Level

.DESCRIPTION
    Modify the HDFS service log-level.
 
.PARAMETER level
    Setup the HDFS service log level for this node
    Valid inputs: always,error,warning,info,verbose,debug,trace,default

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('always','error','warning','info','verbose','debug','trace','default')][string]$level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsLogLevel')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/hdfs/log-level" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsLogLevel

function Set-isiHdfsProxyUser{
<#
.SYNOPSIS
    Set Hdfs Proxyuser

.DESCRIPTION
    Create a new HDFS proxyuser.
 
.PARAMETER id
    Proxyuser id

.PARAMETER name
    Proxyuser name

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsProxyUser')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/protocols/hdfs/proxyusers/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsProxyUser

function Set-isiHdfsProxyUserMember{
<#
.SYNOPSIS
    Set Hdfs Proxyuser Member

.DESCRIPTION
    Create a new HDFS proxyuser.
 
.PARAMETER proxyuser_id
    Proxyuser proxyuser_id

.PARAMETER proxyuser_name
    Proxyuser proxyuser_name

.PARAMETER id
     id

.PARAMETER name
     name

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$proxyuser_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$proxyuser_name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('proxyuser_id')){
                $parameter1 = $proxyuser_id
                $BoundParameters.Remove('proxyuser_id') | out-null
            } else {
                $parameter1 = $proxyuser_name
                $BoundParameters.Remove('proxyuser_name') | out-null
            }
            if ($psBoundParameters.ContainsKey('id')){
                $parameter2 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter2 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsProxyUserMember')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/protocols/hdfs/proxyusers/$parameter1/members/$parameter2" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsProxyUserMember

function Set-isiHdfsRack{
<#
.SYNOPSIS
    Set Hdfs Rack

.DESCRIPTION
    Modify the HDFS rack
 
.PARAMETER id
    Rack id

.PARAMETER name
    Rack name

.PARAMETER client_ip_ranges
    Array of IP ranges. Clients from one of these IP ranges are served by corresponding nodes from ip_pools array.

.PARAMETER ip_pools
    Array of IP pool names to use for serving clients from client_ip_ranges.

.PARAMETER new_name
    Name of the rack

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$client_ip_ranges,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$ip_pools,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsRack')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/protocols/hdfs/racks/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsRack

function Set-isiHdfsRangerPluginSettings{
<#
.SYNOPSIS
    Set Protocols Hdfs Ranger Plugin Settings

.DESCRIPTION
    Modify HDFS ranger-plugin properties.
 
.PARAMETER enabled
    Enable or disable the HDFS ranger plugin

.PARAMETER policy_manager_url
    The scheme, hostname, and port of the Apache Ranger server (e.g. http://ranger.com:6080)

.PARAMETER repository_name
    The HDFS repository name that is registered with Apache Ranger server

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$policy_manager_url,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$repository_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsRangerPluginSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/protocols/hdfs/ranger-plugin/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsRangerPluginSettings

function Set-isiHdfsSettingsv3{
<#
.SYNOPSIS
    Set Protocols Hdfs Settings

.DESCRIPTION
    Modify HDFS properties.
 
.PARAMETER ambari_namenode
    NameNode of Ambari server

.PARAMETER ambari_server
    Ambari server

.PARAMETER authentication_mode
    Type of authentication for HDFS protocol.
    Valid inputs: all,simple_only,kerberos_only

.PARAMETER default_block_size
    Block size (size=2**value) reported by HDFS server.

.PARAMETER default_checksum_type
    Checksum type reported by HDFS server.
    Valid inputs: none,crc32,crc32c

.PARAMETER odp_version
    ODP stack repository version number

.PARAMETER root_directory
    HDFS root directory

.PARAMETER service
    Enable or disable the HDFS service.

.PARAMETER webhdfs_enabled
    Enable or disable WebHDFS

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$ambari_namenode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$ambari_server,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('all','simple_only','kerberos_only')][string]$authentication_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$default_block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateSet('none','crc32','crc32c')][string]$default_checksum_type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$odp_version,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$root_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$webhdfs_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsSettingsv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/hdfs/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsSettingsv3

function Set-isiHdfsSettingsv4{
<#
.SYNOPSIS
    Set Protocols Hdfs Settings

.DESCRIPTION
    Modify HDFS properties.
 
.PARAMETER ambari_metrics_collector
    Ambari metrics collector

.PARAMETER ambari_namenode
    NameNode of Ambari server

.PARAMETER ambari_server
    Ambari server

.PARAMETER authentication_mode
    Type of authentication for HDFS protocol.
    Valid inputs: all,simple_only,kerberos_only

.PARAMETER data_transfer_cipher
    Encryption algorithm to use for data transfer (if any)
    Valid inputs: none,aes_128_ctr,aes_192_ctr,aes_256_ctr

.PARAMETER default_block_size
    Block size (size=2**value) reported by HDFS server.

.PARAMETER default_checksum_type
    Checksum type reported by HDFS server.
    Valid inputs: none,crc32,crc32c

.PARAMETER odp_version
    ODP stack repository version number

.PARAMETER root_directory
    HDFS root directory

.PARAMETER service
    Enable or disable the HDFS service.

.PARAMETER webhdfs_enabled
    Enable or disable WebHDFS

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$ambari_metrics_collector,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$ambari_namenode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$ambari_server,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('all','simple_only','kerberos_only')][string]$authentication_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateSet('none','aes_128_ctr','aes_192_ctr','aes_256_ctr')][string]$data_transfer_cipher,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$default_block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('none','crc32','crc32c')][string]$default_checksum_type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$odp_version,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$root_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$webhdfs_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=11)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHdfsSettingsv4')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/protocols/hdfs/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHdfsSettingsv4

function Set-isiHttpSettings{
<#
.SYNOPSIS
    Set Protocols Http Settings

.DESCRIPTION
    Modify HTTP properties.
 
.PARAMETER access_control
    Enable Access Control Authentication

.PARAMETER basic_authentication
    Enable Basic Authentication

.PARAMETER dav
    Enable DAV specification

.PARAMETER enable_access_log
    Enable HTTP access logging

.PARAMETER https
    Use HTTPS transport

.PARAMETER integrated_authentication
    Enable Integrated Authentication

.PARAMETER server_root
    Document root directory. Must be within /ifs.

.PARAMETER service
    Enable/disable the HTTP service or redirect to WebUI.
    Valid inputs: enabled,disabled,redirect

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$access_control,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$basic_authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$dav,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$enable_access_log,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$https,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$integrated_authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$server_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('enabled','disabled','redirect')][string]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiHttpSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/http/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiHttpSettings

function Set-isiNdmpDiagnostics{
<#
.SYNOPSIS
    Set Protocols Ndmp Diagnostics

.DESCRIPTION
    Modify ndmp diagnostics settings.
 
.PARAMETER diag_level
    Diagnostics level for ndmp.

.PARAMETER protocol_version
    The version of the ndmp protocol.

.PARAMETER trace_level
    Trace level for ndmp.
    Valid inputs: none,standard,include-file-history,log-file-history

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$diag_level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$protocol_version,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('none','standard','include-file-history','log-file-history')][string]$trace_level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNdmpDiagnostics')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ndmp/diagnostics" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNdmpDiagnostics

function Set-isiNdmpSettingsGlobal{
<#
.SYNOPSIS
    Set Protocols Ndmp Settings Global

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER bre_max_num_contexts
    Maximum number of BRE contexts.

.PARAMETER dma
    A unique identifier for the dma vendor.
    Valid inputs: generic,atempo,bakbone,commvault,emc,symantec,tivoli,symantec-netbackup,symantec-backupexec

.PARAMETER msb_context_retention_duration
    Multi-Stream Backup context retention duration.

.PARAMETER msr_context_retention_duration
    Multi-Stream Restore context retention duration.

.PARAMETER port
    The port to listen on.

.PARAMETER service
    Property to enable/diable the NDMP service.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$bre_max_num_contexts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('generic','atempo','bakbone','commvault','emc','symantec','tivoli','symantec-netbackup','symantec-backupexec')][string]$dma,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$msb_context_retention_duration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$msr_context_retention_duration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$port,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNdmpSettingsGlobal')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ndmp/settings/global" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNdmpSettingsGlobal

function Set-isiNdmpSettingsPreferredIp{
<#
.SYNOPSIS
    Set Protocols Ndmp Settings Preferred Ip

.DESCRIPTION
    Modify a preferred ip preference.
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER data_subnets
    

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$data_subnets,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNdmpSettingsPreferredIp')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/4/protocols/ndmp/settings/preferred-ips/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNdmpSettingsPreferredIp

function Set-isiNdmpSettingsVariable{
<#
.SYNOPSIS
    Set Protocols Ndmp Settings Variable

.DESCRIPTION
    Modify or create a NDMP preferred environment variable.
 
.PARAMETER id
    Path id

.PARAMETER value
    The value of environment variable.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$value,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $parameter1 = $id
            $BoundParameters.Remove('id') | out-null
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNdmpSettingsVariable')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ndmp/settings/variables/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNdmpSettingsVariable

function Set-isiNdmpUser{
<#
.SYNOPSIS
    Set Protocols Ndmp User

.DESCRIPTION
    Modify the user
 
.PARAMETER id
    Name id

.PARAMETER name
    Name name

.PARAMETER password
    The password for the NDMP administrator.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNdmpUser')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ndmp/users/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNdmpUser

function Set-isiNfsAlias{
<#
.SYNOPSIS
    Set Nfs Aliase

.DESCRIPTION
    Modify the alias. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Aid id

.PARAMETER name
    Aid name

.PARAMETER health
    Specifies whether the alias is usable.

.PARAMETER new_name
    Specifies the name by which the alias can be referenced.

.PARAMETER path
    Specifies the path to which the alias points.

.PARAMETER zone
    Specifies the zone in which the alias is valid.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Access zone

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][object]$health,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsAlias')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/2/protocols/nfs/aliases/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsAlias

function Set-isiNfsExportv1{
<#
.SYNOPSIS
    Set Nfs Export

.DESCRIPTION
    Modify the export. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
     id

.PARAMETER all_dirs
    If true, all directories under the specified paths are mountable.

.PARAMETER block_size
    The block size returned by the NFS STATFS procedure.

.PARAMETER can_set_time
    If true, the client may set file times using the NFS SETATTR request. This option is advisory and the server always behaves as if it is true.

.PARAMETER clients
    Clients that have access to the export.

.PARAMETER commit_asynchronous
    If true, allows NFS commit requests to execute asynchronously.

.PARAMETER description
    A human readable description of the export.

.PARAMETER directory_transfer_size
    The preferred size for directory read operations. This option is advisory.

.PARAMETER encoding
    The character encoding of clients connecting to the export.

.PARAMETER map_all
    User and group mapping.

.PARAMETER map_full
    If true, user mappings queries the OneFS user database. If false, only local authentication is queried.

.PARAMETER map_lookup_uid
    If true, incoming UIDs are mapped to users in the OneFS user database. If false, incoming UIDs are applied directly to file operations.

.PARAMETER map_retry
    Determines whether lookups for users specified in map_all or map_root are retried if the look fails.

.PARAMETER map_root
    User and group mapping.

.PARAMETER max_file_size
    The maximum file size in the export.

.PARAMETER paths
    The paths under /ifs that are exported.

.PARAMETER readdirplus
    If true, readdirplus requests are enabled.

.PARAMETER readdirplus_prefetch
    Sets the number of directory entries that will be prefetched when a readdirplus request is processed.

.PARAMETER read_only
    If true, the export is read-only.

.PARAMETER read_only_clients
    Clients that have read only access to the export.

.PARAMETER read_transfer_max_size
    The maximum buffer size that clients should use on NFS read requests. This option is advisory.

.PARAMETER read_transfer_multiple
    The preferred multiple size for NFS read requests. This option is advisory.

.PARAMETER read_transfer_size
    The optimal size for NFS read requests. This option is advisory.

.PARAMETER read_write_clients
    Clients that have read and write access to the export, even if the export is read-only.

.PARAMETER return_32bit_file_ids
    Limits the size of file identifiers returned by NFSv3+ to 32-bit values (may require remount).

.PARAMETER root_clients
    Clients that have root access to the export.

.PARAMETER security_flavors
    The authentication flavors that are supported for this export.

.PARAMETER setattr_asynchronous
    If true, allows setattr operations to execute asynchronously.

.PARAMETER snapshot
    Use this snapshot for all mounts.

.PARAMETER symlinks
    If true, paths reachable by symlinks are exported.

.PARAMETER time_delta
    The resolution of all time values that are returned to clients.

.PARAMETER write_datasync_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_datasync_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_transfer_max_size
    The maximum buffer size that clients should use on NFS write requests. This option is advisory.

.PARAMETER write_transfer_multiple
    The preferred multiple size for NFS write requests. This option is advisory.

.PARAMETER write_transfer_size
    The optimal size for NFS read requests. This option is advisory.

.PARAMETER write_unstable_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_unstable_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER Force
    Force update of object without prompt

.PARAMETER enforce
    If true, the export will be updated even if that change conflicts with another export.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$all_dirs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$can_set_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$commit_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$directory_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$encoding,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][object]$map_all,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$map_full,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$map_lookup_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$map_retry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][object]$map_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][int]$max_file_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][array]$paths,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$readdirplus,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$readdirplus_prefetch,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$read_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$read_only_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][int]$read_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$read_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$read_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][array]$read_write_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$return_32bit_file_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][array]$root_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][array]$security_flavors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][bool]$setattr_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$snapshot,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$symlinks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][object]$time_delta,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][int]$write_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][int]$write_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][int]$write_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=40)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][ValidateNotNullOrEmpty()][bool]$enforce,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $parameter1 = $id
            $BoundParameters.Remove('id') | out-null
            $queryArguments = @()
            if ($enforce){
                $queryArguments += 'force=' + $enforce
                $BoundParameters.Remove('enforce') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsExportv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/protocols/nfs/exports/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsExportv1

function Set-isiNfsExportv2{
<#
.SYNOPSIS
    Set Nfs Export

.DESCRIPTION
    Modify the export. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
     id

.PARAMETER all_dirs
    True if all directories under the specified paths are mountable.

.PARAMETER block_size
    Specifies the block size returned by the NFS statfs procedure.

.PARAMETER can_set_time
    True if the client can set file times through the NFS set attribute request. This parameter does not affect server behavior, but is included to accommoate legacy client requirements.

.PARAMETER case_insensitive
    True if the case is ignored for file names. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER case_preserving
    True if the case is preserved for file names. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER chown_restricted
    True if the superuser can change file ownership. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER clients
    Specifies the clients with root access to the export.

.PARAMETER commit_asynchronous
    True if NFS commit requests execute asynchronously.

.PARAMETER description
    Specifies the user-defined string that is used to identify the export.

.PARAMETER directory_transfer_size
    Specifies the preferred size for directory read operations. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER encoding
    Specifies the default character set encoding of the clients connecting to the export, unless otherwise specified.

.PARAMETER link_max
    Specifies the reported maximum number of links to a file. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER map_all
    User and group mapping.

.PARAMETER map_failure
    User and group mapping.

.PARAMETER map_full
    True if user mappings query the OneFS user database. When set to false, user mappings only query local authentication.

.PARAMETER map_lookup_uid
    True if incoming user IDs (UIDs) are mapped to users in the OneFS user database. When set to false, incoming UIDs are applied directly to file operations.

.PARAMETER map_non_root
    User and group mapping.

.PARAMETER map_retry
    Determines whether searches for users specified in 'map_all', 'map_root' or 'map_nonroot' are retried if the search fails.

.PARAMETER map_root
    User and group mapping.

.PARAMETER max_file_size
    Specifies the maximum file size for any file accessed from the export. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER name_max_size
    Specifies the reported maximum length of a file name. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER no_truncate
    True if long file names result in an error. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER paths
    Specifies the paths under /ifs that are exported.

.PARAMETER readdirplus
    True if 'readdirplus' requests are enabled. Enabling this property might improve network performance and is only available for NFSv3.

.PARAMETER readdirplus_prefetch
    Sets the number of directory entries that are prefetched when a 'readdirplus' request is processed. (Deprecated.)

.PARAMETER read_only
    True if the export is set to read-only.

.PARAMETER read_only_clients
    Specifies the clients with read-only access to the export.

.PARAMETER read_transfer_max_size
    Specifies the maximum buffer size that clients should use on NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER read_transfer_multiple
    Specifies the preferred multiple size for NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER read_transfer_size
    Specifies the preferred size for NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER read_write_clients
    Specifies the clients with both read and write access to the export, even when the export is set to read-only.

.PARAMETER return_32bit_file_ids
    Limits the size of file identifiers returned by NFSv3+ to 32-bit values (may require remount).

.PARAMETER root_clients
    Clients that have root access to the export.

.PARAMETER security_flavors
    Specifies the authentication types that are supported for this export.

.PARAMETER setattr_asynchronous
    True if set attribute operations execute asynchronously.

.PARAMETER snapshot
    Specifies the snapshot for all mounts.

.PARAMETER symlinks
    True if symlinks are supported. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER time_delta
    Specifies the resolution of all time values that are returned to the clients

.PARAMETER write_datasync_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_datasync_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_transfer_max_size
    Specifies the maximum buffer size that clients should use on NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_transfer_multiple
    Specifies the preferred multiple size for NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_transfer_size
    Specifies the preferred multiple size for NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_unstable_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_unstable_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER zone
    Specifies the zone in which the export is valid.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER enforce
    If true, the export will be updated even if that change conflicts with another export.

.PARAMETER access_zone
    Access zone

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$all_dirs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$can_set_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$case_insensitive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$case_preserving,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$chown_restricted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][array]$clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$commit_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$directory_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$encoding,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$link_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][object]$map_all,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][object]$map_failure,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$map_full,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$map_lookup_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][object]$map_non_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$map_retry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][object]$map_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][int]$max_file_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$name_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][bool]$no_truncate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][array]$paths,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$readdirplus,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][int]$readdirplus_prefetch,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$read_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$read_only_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][int]$read_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][int]$read_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][int]$read_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$read_write_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][bool]$return_32bit_file_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][array]$root_clients,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][array]$security_flavors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][bool]$setattr_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][string]$snapshot,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][bool]$symlinks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][object]$time_delta,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][int]$write_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][int]$write_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=45)][int]$write_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=46)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=47)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=48)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=49)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=50)][ValidateNotNullOrEmpty()][bool]$enforce,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=51)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=52)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $parameter1 = $id
            $BoundParameters.Remove('id') | out-null
            $queryArguments = @()
            if ($enforce){
                $queryArguments += 'force=' + $enforce
                $BoundParameters.Remove('enforce') | out-null
            }
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsExportv2')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/2/protocols/nfs/exports/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsExportv2
Set-Alias Set-isiNfsExport -Value Set-isiNfsExportv2
Export-ModuleMember -Alias Set-isiNfsExport

function Set-isiNfsLogLevel{
<#
.SYNOPSIS
    Set Protocols Nfs Log Level

.DESCRIPTION
    Set the current NFS service logging level.
 
.PARAMETER level
    Valid NFS logging levels
    Valid inputs: always,error,warning,info,verbose,debug,trace

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('always','error','warning','info','verbose','debug','trace')][string]$level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsLogLevel')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/nfs/log-level" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsLogLevel

function Set-isiNfsNetgroup{
<#
.SYNOPSIS
    Set Protocols Nfs Netgroup

.DESCRIPTION
    Modify the current NFS netgroup settings.
 
.PARAMETER Force
    Force update of object without prompt

.PARAMETER host
    Host to retrieve netgroup cache settings for.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=0)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateNotNullOrEmpty()][string]$host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($host){
                $queryArguments += 'host=' + $host
                $BoundParameters.Remove('host') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsNetgroup')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/protocols/nfs/netgroup" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsNetgroup

function Set-isiNfsSettingsExportv1{
<#
.SYNOPSIS
    Set Nfs Settings Export

.DESCRIPTION
    Modify the default values for NFS exports. All input fields are optional, but one or more must be supplied.
 
.PARAMETER all_dirs
    If true, all directories under the specified paths are mountable.

.PARAMETER block_size
    The block size returned by the NFS STATFS procedure.

.PARAMETER can_set_time
    If true, the client may set file times using the NFS SETATTR request. This option is advisory and the server always behaves as if it is true.

.PARAMETER commit_asynchronous
    If true, allows NFS commit requests to execute asynchronously.

.PARAMETER directory_transfer_size
    The preferred size for directory read operations. This option is advisory.

.PARAMETER encoding
    The character encoding of clients connecting to the export.

.PARAMETER map_all
    User and group mapping.

.PARAMETER map_full
    If true, user mappings queries the OneFS user database. If false, only local authentication is queried.

.PARAMETER map_lookup_uid
    If true, incoming UIDs are mapped to users in the OneFS user database. If false, incoming UIDs are applied directly to file operations.

.PARAMETER map_retry
    Determines whether lookups for users specified in map_all or map_root are retried if the look fails.

.PARAMETER map_root
    User and group mapping.

.PARAMETER max_file_size
    The maximum file size in the export.

.PARAMETER readdirplus
    If true, readdirplus requests are enabled.

.PARAMETER readdirplus_prefetch
    Sets the number of directory entries that will be prefetched when a readdirplus request is processed.

.PARAMETER read_only
    If true, the export is read-only.

.PARAMETER read_transfer_max_size
    The maximum buffer size that clients should use on NFS read requests. This option is advisory.

.PARAMETER read_transfer_multiple
    The preferred multiple size for NFS read requests. This option is advisory.

.PARAMETER read_transfer_size
    The optimal size for NFS read requests. This option is advisory.

.PARAMETER return_32bit_file_ids
    Limits the size of file identifiers returned by NFSv3+ to 32-bit values (may require remount).

.PARAMETER security_flavors
    The authentication flavors that are supported for this export.

.PARAMETER setattr_asynchronous
    If true, allows setattr operations to execute asynchronously.

.PARAMETER snapshot
    Use this snapshot for all mounts.

.PARAMETER symlinks
    If true, paths reachable by symlinks are exported.

.PARAMETER time_delta
    The resolution of all time values that are returned to clients.

.PARAMETER write_datasync_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_datasync_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_transfer_max_size
    The maximum buffer size that clients should use on NFS write requests. This option is advisory.

.PARAMETER write_transfer_multiple
    The preferred multiple size for NFS write requests. This option is advisory.

.PARAMETER write_transfer_size
    The optimal size for NFS read requests. This option is advisory.

.PARAMETER write_unstable_action
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_unstable_reply
    The synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$all_dirs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$can_set_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$commit_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$directory_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$encoding,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][object]$map_all,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$map_full,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$map_lookup_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$map_retry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][object]$map_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$max_file_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$readdirplus,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][int]$readdirplus_prefetch,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][bool]$read_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$read_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$read_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$read_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$return_32bit_file_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$security_flavors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$setattr_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$snapshot,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][bool]$symlinks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][object]$time_delta,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][int]$write_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][int]$write_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][int]$write_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=33)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsSettingsExportv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/protocols/nfs/settings/export" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsSettingsExportv1

function Set-isiNfsSettingsExportv2{
<#
.SYNOPSIS
    Set Nfs Settings Export

.DESCRIPTION
    Modify the default values for NFS exports. All input fields are optional, but one or more must be supplied.
 
.PARAMETER all_dirs
    True if all directories under the specified paths are mountable.

.PARAMETER block_size
    Specifies the block size returned by the NFS statfs procedure.

.PARAMETER can_set_time
    True if the client can set file times through the NFS set attribute request. This parameter does not affect server behavior, but is included to accommoate legacy client requirements.

.PARAMETER case_insensitive
    True if the case is ignored for file names. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER case_preserving
    True if the case is preserved for file names. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER chown_restricted
    True if the superuser can change file ownership. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER commit_asynchronous
    True if NFS commit requests execute asynchronously.

.PARAMETER directory_transfer_size
    Specifies the preferred size for directory read operations. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER encoding
    Specifies the default character set encoding of the clients connecting to the export, unless otherwise specified.

.PARAMETER link_max
    Specifies the reported maximum number of links to a file. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER map_all
    User and group mapping.

.PARAMETER map_failure
    User and group mapping.

.PARAMETER map_full
    True if user mappings query the OneFS user database. When set to false, user mappings only query local authentication.

.PARAMETER map_lookup_uid
    True if incoming user IDs (UIDs) are mapped to users in the OneFS user database. When set to false, incoming UIDs are applied directly to file operations.

.PARAMETER map_non_root
    User and group mapping.

.PARAMETER map_retry
    Determines whether searches for users specified in 'map_all', 'map_root' or 'map_nonroot' are retried if the search fails.

.PARAMETER map_root
    User and group mapping.

.PARAMETER max_file_size
    Specifies the maximum file size for any file accessed from the export. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER name_max_size
    Specifies the reported maximum length of a file name. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER no_truncate
    True if long file names result in an error. This parameter does not affect server behavior, but is included to accommodate legacy client requirements.

.PARAMETER readdirplus
    True if 'readdirplus' requests are enabled. Enabling this property might improve network performance and is only available for NFSv3.

.PARAMETER readdirplus_prefetch
    Sets the number of directory entries that are prefetched when a 'readdirplus' request is processed. (Deprecated.)

.PARAMETER read_only
    True if the export is set to read-only.

.PARAMETER read_transfer_max_size
    Specifies the maximum buffer size that clients should use on NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER read_transfer_multiple
    Specifies the preferred multiple size for NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER read_transfer_size
    Specifies the preferred size for NFS read requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER return_32bit_file_ids
    Limits the size of file identifiers returned by NFSv3+ to 32-bit values (may require remount).

.PARAMETER security_flavors
    Specifies the authentication types that are supported for this export.

.PARAMETER setattr_asynchronous
    True if set attribute operations execute asynchronously.

.PARAMETER snapshot
    Specifies the snapshot for all mounts.

.PARAMETER symlinks
    True if symlinks are supported. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER time_delta
    Specifies the resolution of all time values that are returned to the clients

.PARAMETER write_datasync_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_datasync_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_filesync_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_transfer_max_size
    Specifies the maximum buffer size that clients should use on NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_transfer_multiple
    Specifies the preferred multiple size for NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_transfer_size
    Specifies the preferred multiple size for NFS write requests. This value is used to advise the client of optimal settings for the server, but is not enforced.

.PARAMETER write_unstable_action
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER write_unstable_reply
    Specifies the synchronization type.
    Valid inputs: DATASYNC,FILESYNC,UNSTABLE

.PARAMETER zone
    Specifies the zone in which the export is valid.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Access zone

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$all_dirs,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$block_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$can_set_time,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$case_insensitive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$case_preserving,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$chown_restricted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$commit_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$directory_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$encoding,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$link_max,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][object]$map_all,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][object]$map_failure,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$map_full,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$map_lookup_uid,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][object]$map_non_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$map_retry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][object]$map_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$max_file_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][int]$name_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$no_truncate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$readdirplus,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$readdirplus_prefetch,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][bool]$read_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][int]$read_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][int]$read_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][int]$read_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$return_32bit_file_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$security_flavors,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][bool]$setattr_asynchronous,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][string]$snapshot,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][bool]$symlinks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][object]$time_delta,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_datasync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_filesync_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][int]$write_transfer_max_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][int]$write_transfer_multiple,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][int]$write_transfer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][ValidateSet('DATASYNC','FILESYNC','UNSTABLE')][string]$write_unstable_reply,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=42)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsSettingsExportv2')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/2/protocols/nfs/settings/export" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsSettingsExportv2
Set-Alias Set-isiNfsSettingsExport -Value Set-isiNfsSettingsExportv2
Export-ModuleMember -Alias Set-isiNfsSettingsExport

function Set-isiNfsSettingsGlobalv3{
<#
.SYNOPSIS
    Set Protocols Nfs Settings Global

.DESCRIPTION
    Modify the default values for NFS exports. All input fields are optional, but one or more must be supplied.
 
.PARAMETER nfsv3_enabled
    True if NFSv3 is enabled.

.PARAMETER nfsv4_enabled
    True if NFSv4 is enabled.

.PARAMETER rpc_maxthreads
    Specifies the maximum number of threads in the nfsd thread pool.

.PARAMETER rpc_minthreads
    Specifies the minimum number of threads in the nfsd thread pool.

.PARAMETER service
    True if the NFS service is enabled. When set to false, the NFS service is disabled.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$nfsv3_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$nfsv4_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$rpc_maxthreads,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$rpc_minthreads,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsSettingsGlobalv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/nfs/settings/global" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsSettingsGlobalv3

function Set-isiNfsSettingsZone{
<#
.SYNOPSIS
    Set Nfs Settings Zone

.DESCRIPTION
    Modify the NFS server settings for this zone.
 
.PARAMETER nfsv4_allow_numeric_ids
    If true, sends owners and groups as UIDs and GIDs when look up fails or if the 'nfsv4_no_name' property is set to 1.

.PARAMETER nfsv4_domain
    Specifies the domain or realm through which users and groups are associated.

.PARAMETER nfsv4_no_domain
    If true, sends owners and groups without a domain name.

.PARAMETER nfsv4_no_domain_uids
    If true, sends UIDs and GIDs without a domain name.

.PARAMETER nfsv4_no_names
    If true, sends owners and groups as UIDs and GIDs.

.PARAMETER nfsv4_replace_domain
    If true, replaces the owner or group domain with an NFS domain name.

.PARAMETER zone
    Specifies the access zones in which these settings apply.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$nfsv4_allow_numeric_ids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$nfsv4_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$nfsv4_no_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$nfsv4_no_domain_uids,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$nfsv4_no_names,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$nfsv4_replace_domain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNfsSettingsZone')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/2/protocols/nfs/settings/zone" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNfsSettingsZone

function Set-isiNtpServer{
<#
.SYNOPSIS
    Set Protocols Ntp Server

.DESCRIPTION
    Modify the key value for an NTP server.
 
.PARAMETER id
    Server id

.PARAMETER name
    Server name

.PARAMETER key
    Key value from key_file that maps to this server.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$key,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNtpServer')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ntp/servers/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNtpServer

function Set-isiNtpSettings{
<#
.SYNOPSIS
    Set Protocols Ntp Settings

.DESCRIPTION
    Modify the NTP settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER chimers
    Number of nodes that will contact the NTP servers.

.PARAMETER excluded
    Node number (LNN) for nodes excluded from chimer duty.

.PARAMETER key_file
    Path to NTP key file within /ifs.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$chimers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$excluded,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$key_file,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiNtpSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/ntp/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiNtpSettings

function Set-isiSmbLogLevel{
<#
.SYNOPSIS
    Set Protocols Smb Log Level

.DESCRIPTION
    Set the current SMB logging level.
 
.PARAMETER level
    Valid SMB logging levels
    Valid inputs: always,error,warning,info,verbose,debug,trace

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('always','error','warning','info','verbose','debug','trace')][string]$level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbLogLevel')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/smb/log-level" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbLogLevel

function Set-isiSmbSettingsGlobalv1{
<#
.SYNOPSIS
    Set Smb Settings Global

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER access_based_share_enum
    Only enumerate files and folders the requesting user has access to.

.PARAMETER audit_fileshare
    Specify level of file share audit events to log.
    Valid inputs: all,success,failure,none

.PARAMETER audit_global_sacl
    Specifies a list of permissions to audit.

.PARAMETER audit_logon
    Specify the level of logon audit events to log.
    Valid inputs: all,success,failure,none

.PARAMETER dot_snap_accessible_child
    Allow access to .snapshot directories in share subdirectories.

.PARAMETER dot_snap_accessible_root
    Allow access to the .snapshot directory in the root of the share.

.PARAMETER dot_snap_visible_child
    Show .snapshot directories in share subdirectories.

.PARAMETER dot_snap_visible_root
    Show the .snapshot directory in the root of a share.

.PARAMETER enable_security_signatures
    Indicates whether the server supports signed SMB packets.

.PARAMETER guest_user
    Specifies the fully-qualified user to use for guest access.

.PARAMETER ignore_eas
    Specify whether to ignore EAs on files.

.PARAMETER onefs_cpu_multiplier
    Specify the number of OneFS driver worker threads per CPU.

.PARAMETER onefs_num_workers
    Set the maximum number of OneFS driver worker threads.

.PARAMETER require_security_signatures
    Indicates whether the server requires signed SMB packets.

.PARAMETER server_string
    Provides a description of the server.

.PARAMETER service
    Specify whether service is enabled.

.PARAMETER srv_cpu_multiplier
    Specify the number of SRV service worker threads per CPU.

.PARAMETER srv_num_workers
    Set the maximum number of SRV service worker threads.

.PARAMETER support_multichannel
    Support multichannel.

.PARAMETER support_netbios
    Support NetBIOS.

.PARAMETER support_smb2
    Support the SMB2 protocol on the server.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$access_based_share_enum,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('all','success','failure','none')][string]$audit_fileshare,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$audit_global_sacl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('all','success','failure','none')][string]$audit_logon,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$dot_snap_accessible_child,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$dot_snap_accessible_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$dot_snap_visible_child,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$dot_snap_visible_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$enable_security_signatures,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$guest_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$ignore_eas,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$onefs_cpu_multiplier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$onefs_num_workers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$require_security_signatures,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$server_string,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$srv_cpu_multiplier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$srv_num_workers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$support_multichannel,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$support_netbios,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$support_smb2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=21)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSettingsGlobalv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/protocols/smb/settings/global" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSettingsGlobalv1
Set-Alias Set-isiSmbSettingsGlobal -Value Set-isiSmbSettingsGlobalv1
Export-ModuleMember -Alias Set-isiSmbSettingsGlobal

function Set-isiSmbSettingsGlobalv3{
<#
.SYNOPSIS
    Set Protocols Smb Settings Global

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER access_based_share_enum
    Only enumerate files and folders the requesting user has access to.

.PARAMETER audit_fileshare
    Specify level of file share audit events to log.
    Valid inputs: all,success,failure,none

.PARAMETER audit_global_sacl
    Specifies a list of permissions to audit.

.PARAMETER audit_logon
    Specify the level of logon audit events to log.
    Valid inputs: all,success,failure,none

.PARAMETER dot_snap_accessible_child
    Allow access to .snapshot directories in share subdirectories.

.PARAMETER dot_snap_accessible_root
    Allow access to the .snapshot directory in the root of the share.

.PARAMETER dot_snap_visible_child
    Show .snapshot directories in share subdirectories.

.PARAMETER dot_snap_visible_root
    Show the .snapshot directory in the root of a share.

.PARAMETER enable_security_signatures
    Indicates whether the server supports signed SMB packets.

.PARAMETER guest_user
    Specifies the fully-qualified user to use for guest access.

.PARAMETER ignore_eas
    Specify whether to ignore EAs on files.

.PARAMETER onefs_cpu_multiplier
    Specify the number of OneFS driver worker threads per CPU.

.PARAMETER onefs_num_workers
    Set the maximum number of OneFS driver worker threads.

.PARAMETER require_security_signatures
    Indicates whether the server requires signed SMB packets.

.PARAMETER server_side_copy
    Enable Server Side Copy.

.PARAMETER server_string
    Provides a description of the server.

.PARAMETER service
    Specify whether service is enabled.

.PARAMETER srv_cpu_multiplier
    Specify the number of SRV service worker threads per CPU.

.PARAMETER srv_num_workers
    Set the maximum number of SRV service worker threads.

.PARAMETER support_multichannel
    Support multichannel.

.PARAMETER support_netbios
    Support NetBIOS.

.PARAMETER support_smb2
    Support the SMB2 protocol on the server.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$access_based_share_enum,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('all','success','failure','none')][string]$audit_fileshare,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$audit_global_sacl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateSet('all','success','failure','none')][string]$audit_logon,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$dot_snap_accessible_child,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$dot_snap_accessible_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$dot_snap_visible_child,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$dot_snap_visible_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$enable_security_signatures,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$guest_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$ignore_eas,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$onefs_cpu_multiplier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$onefs_num_workers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$require_security_signatures,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][bool]$server_side_copy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$server_string,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$srv_cpu_multiplier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][int]$srv_num_workers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$support_multichannel,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$support_netbios,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][bool]$support_smb2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=22)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSettingsGlobalv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/smb/settings/global" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSettingsGlobalv3

function Set-isiSmbSettingsSharev1{
<#
.SYNOPSIS
    Set Smb Settings Share

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER access_based_enumeration
    Only enumerate files and folders the requesting user has access to.

.PARAMETER access_based_enumeration_root_only
    Access-based enumeration on only the root directory of the share.

.PARAMETER allow_delete_readonly
    Allow deletion of read-only files in the share.

.PARAMETER allow_execute_always
    Allows users to execute files they have read rights for.

.PARAMETER change_notify
    Specify level of change notification alerts on the share.
    Valid inputs: all,norecurse,none

.PARAMETER create_permissions
    Set the create permissions for new files and directories in share.
    Valid inputs: default acl,inherit mode bits,use create mask and mode

.PARAMETER csc_policy
    Client-side caching policy for the shares.
    Valid inputs: manual,documents,programs,none

.PARAMETER directory_create_mask
    Unix umask or mode bits.

.PARAMETER directory_create_mode
    Unix umask or mode bits.

.PARAMETER file_create_mask
    Unix umask or mode bits.

.PARAMETER file_create_mode
    Unix umask or mode bits.

.PARAMETER hide_dot_files
    Hide files and directories that begin with a period '.'.

.PARAMETER host_acl
    An ACL expressing which hosts are allowed access. A deny clause must be the final entry.

.PARAMETER impersonate_guest
    Specify the condition in which user access is done as the guest account.
    Valid inputs: always,bad user,never

.PARAMETER impersonate_user
    User account to be used as guest account.

.PARAMETER mangle_byte_start
    Specifies the wchar_t starting point for automatic byte mangling.

.PARAMETER mangle_map
    Character mangle map.

.PARAMETER ntfs_acl_support
    Support NTFS ACLs on files and directories.

.PARAMETER oplocks
    Allow oplock requests.

.PARAMETER strict_flush
    Handle SMB flush operations.

.PARAMETER strict_locking
    Specifies whether byte range locks contend against SMB I/O.

.PARAMETER zone
    Name of the access zone in which to update settings

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Zone which contains these share settings.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$access_based_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$access_based_enumeration_root_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$allow_delete_readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$allow_execute_always,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateSet('all','norecurse','none')][string]$change_notify,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('default acl','inherit mode bits','use create mask and mode')][string]$create_permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('manual','documents','programs','none')][string]$csc_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][int]$directory_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$directory_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$file_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$file_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$hide_dot_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][array]$host_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][ValidateSet('always','bad user','never')][string]$impersonate_guest,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$impersonate_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$mangle_byte_start,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][array]$mangle_map,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$ntfs_acl_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$oplocks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][bool]$strict_flush,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$strict_locking,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=22)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSettingsSharev1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/protocols/smb/settings/share" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSettingsSharev1
Set-Alias Set-isiSmbSettingsShare -Value Set-isiSmbSettingsSharev1
Export-ModuleMember -Alias Set-isiSmbSettingsShare

function Set-isiSmbSettingsSharev3{
<#
.SYNOPSIS
    Set Protocols Smb Settings Share

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER access_based_enumeration
    Only enumerate files and folders the requesting user has access to.

.PARAMETER access_based_enumeration_root_only
    Access-based enumeration on only the root directory of the share.

.PARAMETER allow_delete_readonly
    Allow deletion of read-only files in the share.

.PARAMETER allow_execute_always
    Allows users to execute files they have read rights for.

.PARAMETER ca_timeout
    Persistent open timeout for the share.

.PARAMETER ca_write_integrity
    Specify the level of write-integrity on continuously available shares.
    Valid inputs: none,write-read-coherent,full

.PARAMETER change_notify
    Specify level of change notification alerts on the share.
    Valid inputs: all,norecurse,none

.PARAMETER create_permissions
    Set the create permissions for new files and directories in share.
    Valid inputs: default acl,inherit mode bits,use create mask and mode

.PARAMETER csc_policy
    Client-side caching policy for the shares.
    Valid inputs: manual,documents,programs,none

.PARAMETER directory_create_mask
    Unix umask or mode bits.

.PARAMETER directory_create_mode
    Unix umask or mode bits.

.PARAMETER file_create_mask
    Unix umask or mode bits.

.PARAMETER file_create_mode
    Unix umask or mode bits.

.PARAMETER file_filtering_enabled
    Enables file filtering on the share.

.PARAMETER file_filter_extensions
    Specifies the list of file extensions.

.PARAMETER file_filter_type
    Specifies if filter list is for deny or allow. Default is deny.
    Valid inputs: deny,allow

.PARAMETER hide_dot_files
    Hide files and directories that begin with a period '.'.

.PARAMETER host_acl
    An ACL expressing which hosts are allowed access. A deny clause must be the final entry.

.PARAMETER impersonate_guest
    Specify the condition in which user access is done as the guest account.
    Valid inputs: always,bad user,never

.PARAMETER impersonate_user
    User account to be used as guest account.

.PARAMETER mangle_byte_start
    Specifies the wchar_t starting point for automatic byte mangling.

.PARAMETER mangle_map
    Character mangle map.

.PARAMETER ntfs_acl_support
    Support NTFS ACLs on files and directories.

.PARAMETER oplocks
    Allow oplock requests.

.PARAMETER strict_ca_lockout
    Specifies if persistent opens would do strict lockout on the share.

.PARAMETER strict_flush
    Handle SMB flush operations.

.PARAMETER strict_locking
    Specifies whether byte range locks contend against SMB I/O.

.PARAMETER zone
    Name of the access zone in which to update settings

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Zone which contains these share settings.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$access_based_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$access_based_enumeration_root_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$allow_delete_readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$allow_execute_always,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$ca_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('none','write-read-coherent','full')][string]$ca_write_integrity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('all','norecurse','none')][string]$change_notify,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('default acl','inherit mode bits','use create mask and mode')][string]$create_permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateSet('manual','documents','programs','none')][string]$csc_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$directory_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$directory_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$file_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$file_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$file_filtering_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][array]$file_filter_extensions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][ValidateSet('deny','allow')][string]$file_filter_type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$hide_dot_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][array]$host_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][ValidateSet('always','bad user','never')][string]$impersonate_guest,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][string]$impersonate_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][int]$mangle_byte_start,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][array]$mangle_map,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][bool]$ntfs_acl_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$oplocks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$strict_ca_lockout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$strict_flush,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$strict_locking,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=28)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSettingsSharev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/protocols/smb/settings/share" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSettingsSharev3

function Set-isiSmbSharev1{
<#
.SYNOPSIS
    Set Smb Share

.DESCRIPTION
    Modify share. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Share id

.PARAMETER name
    Share name

.PARAMETER access_based_enumeration
    Only enumerate files and folders the requesting user has access to.

.PARAMETER access_based_enumeration_root_only
    Access-based enumeration on only the root directory of the share.

.PARAMETER allow_delete_readonly
    Allow deletion of read-only files in the share.

.PARAMETER allow_execute_always
    Allows users to execute files they have read rights for.

.PARAMETER allow_variable_expansion
    Allow automatic expansion of variables for home directories.

.PARAMETER auto_create_directory
    Automatically create home directories.

.PARAMETER browsable
    Share is visible in net view and the browse list.

.PARAMETER change_notify
    Level of change notification alerts on the share.
    Valid inputs: all,norecurse,none

.PARAMETER create_permissions
    Create permissions for new files and directories in share.
    Valid inputs: default acl,inherit mode bits,use create mask and mode

.PARAMETER csc_policy
    Client-side caching policy for the shares.
    Valid inputs: manual,documents,programs,none

.PARAMETER description
    Description for this SMB share.

.PARAMETER directory_create_mask
    Directory create mask bits.

.PARAMETER directory_create_mode
    Directory create mode bits.

.PARAMETER file_create_mask
    File create mask bits.

.PARAMETER file_create_mode
    File create mode bits.

.PARAMETER hide_dot_files
    Hide files and directories that begin with a period '.'.

.PARAMETER host_acl
    An ACL expressing which hosts are allowed access. A deny clause must be the final entry.

.PARAMETER impersonate_guest
    Specify the condition in which user access is done as the guest account.
    Valid inputs: always,bad user,never

.PARAMETER impersonate_user
    User account to be used as guest account.

.PARAMETER inheritable_path_acl
    Set the inheritable ACL on the share path.

.PARAMETER mangle_byte_start
    Specifies the wchar_t starting point for automatic byte mangling.

.PARAMETER mangle_map
    Character mangle map.

.PARAMETER new_name
    Share name.

.PARAMETER ntfs_acl_support
    Support NTFS ACLs on files and directories.

.PARAMETER oplocks
    Support oplocks.

.PARAMETER path
    Path of share within /ifs.

.PARAMETER permissions
    Specifies an ordered list of permission modifications.

.PARAMETER run_as_root
    Allow account to run as root.

.PARAMETER strict_flush
    Handle SMB flush operations.

.PARAMETER strict_locking
    Specifies whether byte range locks contend against SMB I/O.

.PARAMETER zone
    Name of the access zone to which to move this SMB share

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Zone which contains this share.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$access_based_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$access_based_enumeration_root_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$allow_delete_readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$allow_execute_always,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$allow_variable_expansion,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$auto_create_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$browsable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateSet('all','norecurse','none')][string]$change_notify,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateSet('default acl','inherit mode bits','use create mask and mode')][string]$create_permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateSet('manual','documents','programs','none')][string]$csc_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][int]$directory_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][int]$directory_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][int]$file_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$file_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][bool]$hide_dot_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][array]$host_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][ValidateSet('always','bad user','never')][string]$impersonate_guest,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][string]$impersonate_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$inheritable_path_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$mangle_byte_start,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][array]$mangle_map,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$ntfs_acl_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$oplocks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][array]$run_as_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$strict_flush,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][bool]$strict_locking,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=32)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSharev1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/1/protocols/smb/shares/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSharev1
Set-Alias Set-isiSmbShare -Value Set-isiSmbSharev1
Export-ModuleMember -Alias Set-isiSmbShare

function Set-isiSmbSharev3{
<#
.SYNOPSIS
    Set Protocols Smb Share

.DESCRIPTION
    Modify share. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Share id

.PARAMETER name
    Share name

.PARAMETER access_based_enumeration
    Only enumerate files and folders the requesting user has access to.

.PARAMETER access_based_enumeration_root_only
    Access-based enumeration on only the root directory of the share.

.PARAMETER allow_delete_readonly
    Allow deletion of read-only files in the share.

.PARAMETER allow_execute_always
    Allows users to execute files they have read rights for.

.PARAMETER allow_variable_expansion
    Allow automatic expansion of variables for home directories.

.PARAMETER auto_create_directory
    Automatically create home directories.

.PARAMETER browsable
    Share is visible in net view and the browse list.

.PARAMETER ca_timeout
    Persistent open timeout for the share.

.PARAMETER ca_write_integrity
    Specify the level of write-integrity on continuously available shares.
    Valid inputs: none,write-read-coherent,full

.PARAMETER change_notify
    Level of change notification alerts on the share.
    Valid inputs: all,norecurse,none

.PARAMETER create_permissions
    Create permissions for new files and directories in share.
    Valid inputs: default acl,inherit mode bits,use create mask and mode

.PARAMETER csc_policy
    Client-side caching policy for the shares.
    Valid inputs: manual,documents,programs,none

.PARAMETER description
    Description for this SMB share.

.PARAMETER directory_create_mask
    Directory create mask bits.

.PARAMETER directory_create_mode
    Directory create mode bits.

.PARAMETER file_create_mask
    File create mask bits.

.PARAMETER file_create_mode
    File create mode bits.

.PARAMETER file_filtering_enabled
    Enables file filtering on this zone.

.PARAMETER file_filter_extensions
    Specifies the list of file extensions.

.PARAMETER file_filter_type
    Specifies if filter list is for deny or allow. Default is deny.
    Valid inputs: deny,allow

.PARAMETER hide_dot_files
    Hide files and directories that begin with a period '.'.

.PARAMETER host_acl
    An ACL expressing which hosts are allowed access. A deny clause must be the final entry.

.PARAMETER impersonate_guest
    Specify the condition in which user access is done as the guest account.
    Valid inputs: always,bad user,never

.PARAMETER impersonate_user
    User account to be used as guest account.

.PARAMETER inheritable_path_acl
    Set the inheritable ACL on the share path.

.PARAMETER mangle_byte_start
    Specifies the wchar_t starting point for automatic byte mangling.

.PARAMETER mangle_map
    Character mangle map.

.PARAMETER new_name
    Share name.

.PARAMETER ntfs_acl_support
    Support NTFS ACLs on files and directories.

.PARAMETER oplocks
    Support oplocks.

.PARAMETER path
    Path of share within /ifs.

.PARAMETER permissions
    Specifies an ordered list of permission modifications.

.PARAMETER run_as_root
    Allow account to run as root.

.PARAMETER strict_ca_lockout
    Specifies if persistent opens would do strict lockout on the share.

.PARAMETER strict_flush
    Handle SMB flush operations.

.PARAMETER strict_locking
    Specifies whether byte range locks contend against SMB I/O.

.PARAMETER zone
    Name of the access zone to which to move this SMB share

.PARAMETER Force
    Force update of object without prompt

.PARAMETER access_zone
    Zone which contains this share.

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$access_based_enumeration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$access_based_enumeration_root_only,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$allow_delete_readonly,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$allow_execute_always,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$allow_variable_expansion,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$auto_create_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$browsable,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][int]$ca_timeout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateSet('none','write-read-coherent','full')][string]$ca_write_integrity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateSet('all','norecurse','none')][string]$change_notify,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateSet('default acl','inherit mode bits','use create mask and mode')][string]$create_permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateSet('manual','documents','programs','none')][string]$csc_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][int]$directory_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][int]$directory_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$file_create_mask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][int]$file_create_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$file_filtering_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$file_filter_extensions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][ValidateSet('deny','allow')][string]$file_filter_type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][bool]$hide_dot_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][array]$host_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][ValidateSet('always','bad user','never')][string]$impersonate_guest,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][string]$impersonate_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][bool]$inheritable_path_acl,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][int]$mangle_byte_start,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][array]$mangle_map,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$ntfs_acl_support,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][bool]$oplocks,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][array]$permissions,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][array]$run_as_root,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][bool]$strict_ca_lockout,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][bool]$strict_flush,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][bool]$strict_locking,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=38)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateNotNullOrEmpty()][string]$access_zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            $queryArguments = @()
            if ($access_zone){
                $queryArguments += 'zone=' + $access_zone
                $BoundParameters.Remove('access_zone') | out-null
            }
            if ($queryArguments) {
                $queryArguments = '?' + [String]::Join('&',$queryArguments)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSmbSharev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource ("/platform/3/protocols/smb/shares/$parameter1" + "$queryArguments") -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSmbSharev3

function Set-isiSnmpSettings{
<#
.SYNOPSIS
    Set Protocols Snmp Settings

.DESCRIPTION
    Modify the SNMO settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER read_only_community
    The read-only community name. @DEFAULT reverts this field to its default value.

.PARAMETER service
    Whether the SNMP service is enabled.

.PARAMETER snmp_v1_v2c_access
    Whether SNMP v1 and v2c protocols are enabled. @DEFAULT reverts this field to its default value.

.PARAMETER snmp_v3_access
    Whether SNMP v3 is enabled. @DEFAULT reverts this field to its default value.

.PARAMETER snmp_v3_password
    This field allows a client to change the SNMP v3 password. There is always a password set. @DEFAULT reverts this field to its default value.

.PARAMETER snmp_v3_read_only_user
    The read-only user for SNMP v3 read requests. @DEFAULT reverts this field to its default value.

.PARAMETER system_contact
    Contact information for the system owner. This must be a valid email address. @DEFAULT reverts this field to its default value.

.PARAMETER system_location
    A location name for the SNMP system. @DEFAULT reverts this field to its default value.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$read_only_community,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$snmp_v1_v2c_access,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$snmp_v3_access,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$snmp_v3_password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$snmp_v3_read_only_user,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$system_contact,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$system_location,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnmpSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/snmp/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnmpSettings

function Set-isiSwiftAccount{
<#
.SYNOPSIS
    Set Protocols Swift Account

.DESCRIPTION
    Modify a Swift account
 
.PARAMETER id
    Account id

.PARAMETER name
    Account name

.PARAMETER new_id
    Unique id of swift account

.PARAMETER new_name
    Name of Swift account

.PARAMETER swiftgroup
    Group with filesystem ownership of this account

.PARAMETER swiftuser
    User with filesystem ownership of this account

.PARAMETER users
    Users who are allowed to access Swift account

.PARAMETER zone
    Name of access zone for account

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$swiftgroup,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$swiftuser,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][array]$users,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$zone,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_id){
                $BoundParameters.Remove('new_id') | out-null
                $BoundParameters.Add('id',$new_id)
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSwiftAccount')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/protocols/swift/accounts/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSwiftAccount

function Set-isiQuota{
<#
.SYNOPSIS
    Set Quota

.DESCRIPTION
    Modify quota. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Quota id

.PARAMETER name
    Quota name

.PARAMETER container
    If true, SMB shares using the quota directory see the quota thresholds as share size.

.PARAMETER enforced
    True if the quota provides enforcement, otherwise a accounting quota.

.PARAMETER linked
    If false and the quota is linked, attempt to unlink.

.PARAMETER thresholds
    

.PARAMETER thresholds_include_overhead
    If true, thresholds apply to data plus filesystem overhead required to store the data (i.e. 'physical' usage).

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$container,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enforced,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$linked,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$thresholds,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$thresholds_include_overhead,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuota')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/quotas/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuota

function Set-isiQuotaNotifications{
<#
.SYNOPSIS
    Set Quota Notifications

.DESCRIPTION
    This method creates an empty set of rules so that the global rules are not used. The input must be an empty JSON object.
 
.PARAMETER quota_id
    Quota quota_id

.PARAMETER quota_name
    Quota quota_name

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$quota_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$quota_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('quota_id')){
                $parameter1 = $quota_id
                $BoundParameters.Remove('quota_id') | out-null
            } else {
                $parameter1 = $quota_name
                $BoundParameters.Remove('quota_name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuotaNotifications')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/quotas/$parameter1/notifications" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuotaNotifications

function Set-isiQuotaNotification{
<#
.SYNOPSIS
    Set Quota Notification

.DESCRIPTION
    Modify notification rule. All input fields are optional, but one or more must be supplied.
 
.PARAMETER quota_id
    Quota quota_id

.PARAMETER quota_name
    Quota quota_name

.PARAMETER id
     id

.PARAMETER name
     name

.PARAMETER action_alert
    Send alert when rule matches.

.PARAMETER action_email_address
    Email a specific email address when rule matches.

.PARAMETER action_email_owner
    Email quota domain owner when rule matches.

.PARAMETER email_template
    Path of optional /ifs template file used for email actions.

.PARAMETER holdoff
    Time to wait between detections for rules triggered by user actions.

.PARAMETER schedule
    Schedule for rules that repeatedly notify.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$quota_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$quota_name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$action_alert,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$action_email_address,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$action_email_owner,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$email_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$holdoff,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('quota_id')){
                $parameter1 = $quota_id
                $BoundParameters.Remove('quota_id') | out-null
            } else {
                $parameter1 = $quota_name
                $BoundParameters.Remove('quota_name') | out-null
            }
            if ($psBoundParameters.ContainsKey('id')){
                $parameter2 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter2 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuotaNotification')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/quotas/$parameter1/notifications/$parameter2" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuotaNotification

function Set-isiQuotaSettingsMapping{
<#
.SYNOPSIS
    Set Quota Settings Mapping

.DESCRIPTION
    Modify the mapping.
 
.PARAMETER id
    Quota id

.PARAMETER name
    Quota name

.PARAMETER mapping
    The FQDN of destination domain to map to.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$mapping,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuotaSettingsMapping')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/settings/mappings/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuotaSettingsMapping

function Set-isiQuotaSettingsNotification{
<#
.SYNOPSIS
    Set Quota Settings Notification

.DESCRIPTION
    Modify notification rule. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Notification id

.PARAMETER name
    Notification name

.PARAMETER action_alert
    Send alert when rule matches.

.PARAMETER action_email_address
    Email a specific email address when rule matches.

.PARAMETER action_email_owner
    Email quota domain owner when rule matches.

.PARAMETER email_template
    Path of optional /ifs template file used for email actions.

.PARAMETER holdoff
    Time to wait between detections for rules triggered by user actions.

.PARAMETER schedule
    Schedule for rules that repeatedly notify.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$action_alert,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$action_email_address,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$action_email_owner,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$email_template,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$holdoff,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuotaSettingsNotification')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/settings/notifications/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuotaSettingsNotification

function Set-isiQuotaSettingsReports{
<#
.SYNOPSIS
    Set Quota Settings Reports

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER live_dir
    The directory on /ifs where manual or live reports will be placed.

.PARAMETER live_retain
    The number of manual reports to keep.

.PARAMETER schedule
    The isidate schedule used to generate reports.

.PARAMETER scheduled_dir
    The directory on /ifs where schedule reports will be placed.

.PARAMETER scheduled_retain
    The number of scheduled reports to keep.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][string]$live_dir,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$live_retain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$scheduled_dir,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$scheduled_retain,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiQuotaSettingsReports')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/quota/settings/reports" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiQuotaSettingsReports

function Set-isiRemoteSupport{
<#
.SYNOPSIS
    Set Remote Support

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER email_customer_on_failure
    Email the customer if all transmission methods fail.

.PARAMETER enabled
    Enable ConnectEMC.

.PARAMETER gateway_access_pools
    List of network pools that are able to connect to the ESRS gateway. Necessary to enable ConnectEMC.

.PARAMETER primary_esrs_gateway
    Primary ESRS Gateway. Necessary to enable ConnectEMC.

.PARAMETER secondary_esrs_gateway
    Secondary ESRS Gateway. Used if Primary is unavailable.

.PARAMETER use_smtp_failover
    Use SMPT if primary and secondary gateways are unavailable.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$email_customer_on_failure,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$gateway_access_pools,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$primary_esrs_gateway,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$secondary_esrs_gateway,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$use_smtp_failover,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiRemoteSupport')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/remotesupport/connectemc" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiRemoteSupport

function Set-isiSnapshotAlias{
<#
.SYNOPSIS
    Set Snapshot Aliase

.DESCRIPTION
    Modify snapshot alias. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Snapshot id

.PARAMETER name
    Snapshot name

.PARAMETER new_name
    The user or system supplied snapshot alias name.

.PARAMETER target
    Target snapshot for this snapshot alias.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$target,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnapshotAlias')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/snapshot/aliases/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnapshotAlias

function Set-isiSnapshotSchedule{
<#
.SYNOPSIS
    Set Snapshot Schedule

.DESCRIPTION
    Modify the schedule. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Snapshot id

.PARAMETER name
    Snapshot name

.PARAMETER alias
    Alias name to create for each snapshot.

.PARAMETER duration
    Time in seconds added to creation time to construction expiration time.

.PARAMETER new_name
    The schedule name.

.PARAMETER path
    The /ifs path snapshotted.

.PARAMETER pattern
    Pattern expanded with strftime to create snapshot names.

.PARAMETER schedule
    The isidate compatible natural language description of the schedule.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][object]$alias,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][object]$duration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=7)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnapshotSchedule')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/snapshot/schedules/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnapshotSchedule

function Set-isiSnapshotSettings{
<#
.SYNOPSIS
    Set Snapshot Settings

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER autocreate
    True if the scheduled snapshot creation services is on.

.PARAMETER autodelete
    True if the scheduled snapshot deletion services is on.

.PARAMETER global_visible_accessible
    Global switch for other accessible and visible settings.

.PARAMETER local_root_accessible
    True if root .snapshot directory is accessible locally.

.PARAMETER local_root_visible
    True if root .snapshot directory is visible locally.

.PARAMETER local_subdir_accessible
    True if sub-directory .snapshot directory is accessible locally.

.PARAMETER nfs_root_accessible
    True if root .snapshot directory is accessible over NFS.

.PARAMETER nfs_root_visible
    True if root .snapshot directory is visible over NFS.

.PARAMETER nfs_subdir_accessible
    True if sub-directory .snapshot directory is accessible over NFS.

.PARAMETER reserve
    Percentage of space to reserve for snapshots.

.PARAMETER service
    True if the system allows snapshot creation.

.PARAMETER smb_root_accessible
    True if root .snapshot directory is accessible over SMB.

.PARAMETER smb_root_visible
    True if root .snapshot directory is visible over SMB.

.PARAMETER smb_subdir_accessible
    True if sub-directory .snapshot directory is accessible over SMB.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][bool]$autocreate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$autodelete,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$global_visible_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$local_root_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$local_root_visible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$local_subdir_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$nfs_root_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$nfs_root_visible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$nfs_subdir_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][object]$reserve,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$smb_root_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$smb_root_visible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$smb_subdir_accessible,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=14)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnapshotSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/snapshot/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnapshotSettings

function Set-isiSnapshot{
<#
.SYNOPSIS
    Set Snapshot

.DESCRIPTION
    Modify snapshot. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Snapshot id

.PARAMETER name
    Snapshot name

.PARAMETER alias
    Alias name to create for this snapshot. If null, remove any alias.

.PARAMETER expires
    The Unix Epoch time the snapshot will expire and be eligible for automatic deletion.

.PARAMETER new_name
    The user or system supplied snapshot name. This will be null for snapshots pending delete.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$alias,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$expires,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnapshot')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/snapshot/snapshots/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnapshot

function Set-isiSnapshotLock{
<#
.SYNOPSIS
    Set Snapshot Lock

.DESCRIPTION
    Modify lock. All input fields are optional, but one or more must be supplied.
 
.PARAMETER snapshot_id
    Snapshot snapshot_id

.PARAMETER snapshot_name
    Snapshot snapshot_name

.PARAMETER id
     id

.PARAMETER name
     name

.PARAMETER expires
    The Unix Epoch time the snapshot lock will expire and be eligible for automatic deletion.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$snapshot_id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$snapshot_name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=1,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][object]$expires,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('snapshot_id')){
                $parameter1 = $snapshot_id
                $BoundParameters.Remove('snapshot_id') | out-null
            } else {
                $parameter1 = $snapshot_name
                $BoundParameters.Remove('snapshot_name') | out-null
            }
            if ($psBoundParameters.ContainsKey('id')){
                $parameter2 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter2 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSnapshotLock')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/snapshot/snapshots/$parameter1/locks/$parameter2" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSnapshotLock

function Set-isiStoragepoolCompatibilitiesSSDActivev3{
<#
.SYNOPSIS
    Set Storagepool Compatibilities Ssd Active

.DESCRIPTION
    Modify an ssd compatibility by id
 
.PARAMETER id
    Id id

.PARAMETER name
    Id name

.PARAMETER assess
    Do not delete ssd compatibility, only assess if deletion is possible.

.PARAMETER count
    Are we enabling or disabling count

.PARAMETER id_2
    The optional id of the second ssd compatibility.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$assess,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$id_2,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=4)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiStoragepoolCompatibilitiesSSDActivev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/storagepool/compatibilities/ssd/active/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiStoragepoolCompatibilitiesSSDActivev3

function Set-isiStoragepoolNodepoolv1{
<#
.SYNOPSIS
    Set Storagepool Nodepool

.DESCRIPTION
    Modify node pool. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Nodepool id

.PARAMETER name
    Nodepool name

.PARAMETER l3
    Use SSDs in this node pool for L3 cache.

.PARAMETER lnns
    The nodes that are part of this node pool.

.PARAMETER new_name
    The node pool name.

.PARAMETER protection_policy
    The node pool protection policy.

.PARAMETER tier
    The name or ID of the node pool's tier, if it is in a tier.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$l3,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$lnns,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$protection_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$tier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiStoragepoolNodepoolv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/storagepool/nodepools/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiStoragepoolNodepoolv1
Set-Alias Set-isiStoragepoolNodepool -Value Set-isiStoragepoolNodepoolv1
Export-ModuleMember -Alias Set-isiStoragepoolNodepool

function Set-isiStoragepoolNodepoolv3{
<#
.SYNOPSIS
    Set Storagepool Nodepool

.DESCRIPTION
    Modify node pool. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Nid id

.PARAMETER name
    Nid name

.PARAMETER l3
    Use SSDs in this node pool for L3 cache.

.PARAMETER lnns
    The nodes that are part of this node pool.

.PARAMETER new_name
    The node pool name.

.PARAMETER protection_policy
    The node pool protection policy.

.PARAMETER tier
    The name or ID of the node pool's tier, if it is in a tier.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$l3,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$lnns,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][string]$protection_policy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][string]$tier,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=6)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiStoragepoolNodepoolv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/storagepool/nodepools/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiStoragepoolNodepoolv3

function Set-isiStoragepoolSettings{
<#
.SYNOPSIS
    Set Storagepool Settings

.DESCRIPTION
    Modify one or more settings.
 
.PARAMETER automatically_manage_io_optimization
    Automatically manage IO optimization settings on files.
    Valid inputs: all,files_at_default,none

.PARAMETER automatically_manage_protection
    Automatically manage protection settings on files.
    Valid inputs: all,files_at_default,none

.PARAMETER global_namespace_acceleration_enabled
    Optimize namespace operations by storing metadata on SSDs.

.PARAMETER protect_directories_one_level_higher
    Automatically add additional protection level to all directories.

.PARAMETER spillover_enabled
    Spill writes into other pools as needed.

.PARAMETER spillover_target
    Target pool for spilled writes.

.PARAMETER ssd_l3_cache_default_enabled
    The L3 Cache default enabled state. This specifies whether L3 Cache should be enabled on new node pools

.PARAMETER virtual_hot_spare_deny_writes
    Deny writes into reserved virtual hot spare space.

.PARAMETER virtual_hot_spare_hide_spare
    Hide reserved virtual hot spare space from free space counts.

.PARAMETER virtual_hot_spare_limit_drives
    The number of drives to reserve for the virtual hot spare, from 0-4.

.PARAMETER virtual_hot_spare_limit_percent
    The percent space to reserve for the virtual hot spare, from 0-20.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][ValidateSet('all','files_at_default','none')][string]$automatically_manage_io_optimization,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('all','files_at_default','none')][string]$automatically_manage_protection,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$global_namespace_acceleration_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$protect_directories_one_level_higher,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$spillover_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][object]$spillover_target,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$ssd_l3_cache_default_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$virtual_hot_spare_deny_writes,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$virtual_hot_spare_hide_spare,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][int]$virtual_hot_spare_limit_drives,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$virtual_hot_spare_limit_percent,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=11)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiStoragepoolSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/storagepool/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiStoragepoolSettings

function Set-isiStoragepoolTier{
<#
.SYNOPSIS
    Set Storagepool Tier

.DESCRIPTION
    Modify tier. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Tier id

.PARAMETER name
    Tier name

.PARAMETER children
    The names or IDs of the tier's children.

.PARAMETER new_name
    The tier name.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][array]$children,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=3)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiStoragepoolTier')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/storagepool/tiers/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiStoragepoolTier

function Set-isiSyncJobv1{
<#
.SYNOPSIS
    Set Sync Job

.DESCRIPTION
    Perform an action (pause, cancel, etc...) on a single job.
 
.PARAMETER id
    Job id

.PARAMETER name
    Job name

.PARAMETER state
    The state of the job.
    Valid inputs: canceled,running,paused

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('canceled','running','paused')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncJobv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/sync/jobs/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncJobv1
Set-Alias Set-isiSyncJob -Value Set-isiSyncJobv1
Export-ModuleMember -Alias Set-isiSyncJob

function Set-isiSyncJobv3{
<#
.SYNOPSIS
    Set Sync Job

.DESCRIPTION
    Perform an action (pause, cancel, etc...) on a single job.
 
.PARAMETER id
    Job id

.PARAMETER name
    Job name

.PARAMETER state
    The state of the job.
    Valid inputs: canceled,running,paused

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('canceled','running','paused')][string]$state,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=2)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncJobv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/sync/jobs/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncJobv3

function Set-isiSyncPolicyv1{
<#
.SYNOPSIS
    Set Sync Policy

.DESCRIPTION
    Modify a single SyncIQ policy.
 
.PARAMETER id
    Policy id

.PARAMETER name
    Policy name

.PARAMETER action
    If 'copy', source files will be copied to the target cluster. If 'sync', the target directory will be made an image of the source directory: Files and directories that have been deleted on the source, have been moved within the target directory, or no longer match the selection criteria will be deleted from the target directory.
    Valid inputs: copy,sync

.PARAMETER burst_mode
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable UDP-based data transfer.

.PARAMETER changelist
    If true, retain previous source snapshot and incremental repstate, both of which are required for changelist creation.

.PARAMETER check_integrity
    If true, the sync target performs cyclic redundancy checks (CRC) on the data as it is received.

.PARAMETER conflicted
    NOTE: This field should not be changed without the help of Isilon support. If true, the most recent run of this policy encountered an error and this policy will not start any more scheduled jobs until this field is manually set back to 'false'.
    Valid inputs: False

.PARAMETER description
    User-assigned description of this sync policy.

.PARAMETER disable_file_split
    NOTE: This field should not be changed without the help of Isilon support. If true, the 7.2+ file splitting capability will be disabled.

.PARAMETER disable_fofb
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable sync failover/failback.

.PARAMETER disable_stf
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable the 6.5+ STF based data transfer and uses only treewalk.

.PARAMETER enabled
    If true, jobs will be automatically run based on this policy, according to its schedule.

.PARAMETER expected_dataloss
    NOTE: This field should not be changed without the help of Isilon support. Continue sending files even with the corrupted filesystem.

.PARAMETER file_matching_pattern
    A file matching pattern, organized as an OR'ed set of AND'ed file criteria, for example ((a AND b) OR (x AND y)) used to define a set of files with specific properties. Policies of type 'sync' cannot use 'path' or time criteria in their matching patterns, but policies of type 'copy' can use all listed criteria.

.PARAMETER force_interface
    NOTE: This field should not be changed without the help of Isilon support. Determines whether data is sent only through the subnet and pool specified in the "source_network" field. This option can be useful if there are multiple interfaces for the given source subnet. If you enable this option, the net.inet.ip.choose_ifa_by_ipsrc sysctl should be set.

.PARAMETER log_level
    Severity an event must reach before it is logged.
    Valid inputs: fatal,error,notice,info,copy,debug,trace

.PARAMETER log_removed_files
    If true, the system will log any files or directories that are deleted due to a sync.

.PARAMETER new_name
    User-assigned name of this sync policy.

.PARAMETER password
    The password for the target cluster. This field is not readable.

.PARAMETER report_max_age
    Length of time (in seconds) a policy report will be stored.

.PARAMETER report_max_count
    Maximum number of policy reports that will be stored on the system.

.PARAMETER restrict_target_network
    If you specify true, and you specify a SmartConnect zone in the "target_host" field, replication policies will connect only to nodes in the specified SmartConnect zone. If you specify false, replication policies are not restricted to specific nodes on the target cluster.

.PARAMETER schedule
    The schedule on which new jobs will be run for this policy.

.PARAMETER source_exclude_directories
    Directories that will be excluded from the sync. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_include_directories
    Directories that will be included in the sync. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_network
    Restricts replication policies on the local cluster to running on the specified subnet and pool.

.PARAMETER source_root_path
    The root directory on the source cluster the files will be synced from. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_snapshot_archive
    If true, archival snapshots of the source data will be taken on the source cluster before a sync.

.PARAMETER source_snapshot_expiration
    The length of time in seconds to keep snapshots on the source cluster.

.PARAMETER source_snapshot_pattern
    The name pattern for snapshots taken on the source cluster before a sync.

.PARAMETER target_compare_initial_sync
    If true, the target creates diffs against the original sync.

.PARAMETER target_detect_modifications
    If true, target cluster will detect if files have been changed on the target by legacy tree walk syncs.

.PARAMETER target_host
    Hostname or IP address of sync target cluster. Modifying the target cluster host can result in the policy being unrunnable if the new target does not match the current target association.

.PARAMETER target_path
    Absolute filesystem path on the target cluster for the sync destination.

.PARAMETER target_snapshot_alias
    The alias of the snapshot taken on the target cluster after the sync completes. A value of @DEFAULT will reset this field to the default creation value.

.PARAMETER target_snapshot_archive
    If true, archival snapshots of the target data will be taken on the target cluster after successful sync completions.

.PARAMETER target_snapshot_expiration
    The length of time in seconds to keep snapshots on the target cluster.

.PARAMETER target_snapshot_pattern
    The name pattern for snapshots taken on the target cluster after the sync completes. A value of @DEFAULT will reset this field to the default creation value.

.PARAMETER workers_per_node
    The number of worker threads on a node performing a sync.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][ValidateSet('copy','sync')][string]$action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$burst_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$changelist,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$check_integrity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][ValidateSet('False')][bool]$conflicted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$disable_file_split,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][bool]$disable_fofb,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$disable_stf,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$expected_dataloss,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][object]$file_matching_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$force_interface,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][ValidateSet('fatal','error','notice','info','copy','debug','trace')][string]$log_level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$log_removed_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][int]$report_max_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][int]$report_max_count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$restrict_target_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][array]$source_exclude_directories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][array]$source_include_directories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][object]$source_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][string]$source_root_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][bool]$source_snapshot_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][int]$source_snapshot_expiration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][string]$source_snapshot_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$target_compare_initial_sync,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][bool]$target_detect_modifications,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][string]$target_host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][string]$target_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][string]$target_snapshot_alias,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][bool]$target_snapshot_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][int]$target_snapshot_expiration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][string]$target_snapshot_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][int]$workers_per_node,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=38)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncPolicyv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/sync/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncPolicyv1
Set-Alias Set-isiSyncPolicy -Value Set-isiSyncPolicyv1
Export-ModuleMember -Alias Set-isiSyncPolicy

function Set-isiSyncPolicyv3{
<#
.SYNOPSIS
    Set Sync Policy

.DESCRIPTION
    Modify a single SyncIQ policy.
 
.PARAMETER id
    Policy id

.PARAMETER name
    Policy name

.PARAMETER accelerated_failback
    If set to true, SyncIQ will perform failback configuration tasks during the next job run, rather than waiting to perform those tasks during the failback process. Performing these tasks ahead of time will increase the speed of failback operations.

.PARAMETER action
    If 'copy', source files will be copied to the target cluster. If 'sync', the target directory will be made an image of the source directory: Files and directories that have been deleted on the source, have been moved within the target directory, or no longer match the selection criteria will be deleted from the target directory.
    Valid inputs: copy,sync

.PARAMETER burst_mode
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable UDP-based data transfer.

.PARAMETER changelist
    If true, retain previous source snapshot and incremental repstate, both of which are required for changelist creation.

.PARAMETER check_integrity
    If true, the sync target performs cyclic redundancy checks (CRC) on the data as it is received.

.PARAMETER cloud_deep_copy
    If set to deny, replicates all CloudPools smartlinks to the target cluster as smartlinks; if the target cluster does not support the smartlinks, the job will fail. If set to force, replicates all smartlinks to the target cluster as regular files. If set to allow, SyncIQ will attempt to replicate smartlinks to the target cluster as smartlinks; if the target cluster does not support the smartlinks, SyncIQ will replicate the smartlinks as regular files.
    Valid inputs: deny,allow,force

.PARAMETER conflicted
    NOTE: This field should not be changed without the help of Isilon support. If true, the most recent run of this policy encountered an error and this policy will not start any more scheduled jobs until this field is manually set back to 'false'.
    Valid inputs: False

.PARAMETER description
    User-assigned description of this sync policy.

.PARAMETER disable_file_split
    NOTE: This field should not be changed without the help of Isilon support. If true, the 7.2+ file splitting capability will be disabled.

.PARAMETER disable_fofb
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable sync failover/failback.

.PARAMETER disable_stf
    NOTE: This field should not be changed without the help of Isilon support. Enable/disable the 6.5+ STF based data transfer and uses only treewalk.

.PARAMETER enabled
    If true, jobs will be automatically run based on this policy, according to its schedule.

.PARAMETER expected_dataloss
    NOTE: This field should not be changed without the help of Isilon support. Continue sending files even with the corrupted filesystem.

.PARAMETER file_matching_pattern
    A file matching pattern, organized as an OR'ed set of AND'ed file criteria, for example ((a AND b) OR (x AND y)) used to define a set of files with specific properties. Policies of type 'sync' cannot use 'path' or time criteria in their matching patterns, but policies of type 'copy' can use all listed criteria.

.PARAMETER force_interface
    NOTE: This field should not be changed without the help of Isilon support. Determines whether data is sent only through the subnet and pool specified in the "source_network" field. This option can be useful if there are multiple interfaces for the given source subnet. If you enable this option, the net.inet.ip.choose_ifa_by_ipsrc sysctl should be set.

.PARAMETER job_delay
    If --schedule is set to When-Source-Modified, the duration to wait after a modification is made before starting a job (default is 0 seconds).

.PARAMETER log_level
    Severity an event must reach before it is logged.
    Valid inputs: fatal,error,notice,info,copy,debug,trace

.PARAMETER log_removed_files
    If true, the system will log any files or directories that are deleted due to a sync.

.PARAMETER new_name
    User-assigned name of this sync policy.

.PARAMETER password
    The password for the target cluster. This field is not readable.

.PARAMETER priority
    Determines the priority level of a policy. Policies with higher priority will have precedence to run over lower priority policies. Valid range is [0, 1]. Default is 0.

.PARAMETER report_max_age
    Length of time (in seconds) a policy report will be stored.

.PARAMETER report_max_count
    Maximum number of policy reports that will be stored on the system.

.PARAMETER restrict_target_network
    If you specify true, and you specify a SmartConnect zone in the "target_host" field, replication policies will connect only to nodes in the specified SmartConnect zone. If you specify false, replication policies are not restricted to specific nodes on the target cluster.

.PARAMETER rpo_alert
    If --schedule is set to a time/date, an alert is created if the specified RPO for this policy is exceeded. The default value is 0, which will not generate RPO alerts.

.PARAMETER schedule
    The schedule on which new jobs will be run for this policy.

.PARAMETER skip_lookup
    Skip DNS lookup of target IPs.

.PARAMETER skip_when_source_unmodified
    If true and --schedule is set to a time/date, the policy will not run if no changes have been made to the contents of the source directory since the last job successfully completed.

.PARAMETER snapshot_sync_existing
    If true, snapshot-triggered syncs will include snapshots taken before policy creation time (requires --schedule when-snapshot-taken).

.PARAMETER snapshot_sync_pattern
    The naming pattern that a snapshot must match to trigger a sync when the schedule is when-snapshot-taken (default is "*").

.PARAMETER source_exclude_directories
    Directories that will be excluded from the sync. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_include_directories
    Directories that will be included in the sync. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_network
    Restricts replication policies on the local cluster to running on the specified subnet and pool.

.PARAMETER source_root_path
    The root directory on the source cluster the files will be synced from. Modifying this field will result in a full synchronization of all data.

.PARAMETER source_snapshot_archive
    If true, archival snapshots of the source data will be taken on the source cluster before a sync.

.PARAMETER source_snapshot_expiration
    The length of time in seconds to keep snapshots on the source cluster.

.PARAMETER source_snapshot_pattern
    The name pattern for snapshots taken on the source cluster before a sync.

.PARAMETER target_compare_initial_sync
    If true, the target creates diffs against the original sync.

.PARAMETER target_detect_modifications
    If true, target cluster will detect if files have been changed on the target by legacy tree walk syncs.

.PARAMETER target_host
    Hostname or IP address of sync target cluster. Modifying the target cluster host can result in the policy being unrunnable if the new target does not match the current target association.

.PARAMETER target_path
    Absolute filesystem path on the target cluster for the sync destination.

.PARAMETER target_snapshot_alias
    The alias of the snapshot taken on the target cluster after the sync completes. A value of @DEFAULT will reset this field to the default creation value.

.PARAMETER target_snapshot_archive
    If true, archival snapshots of the target data will be taken on the target cluster after successful sync completions.

.PARAMETER target_snapshot_expiration
    The length of time in seconds to keep snapshots on the target cluster.

.PARAMETER target_snapshot_pattern
    The name pattern for snapshots taken on the target cluster after the sync completes. A value of @DEFAULT will reset this field to the default creation value.

.PARAMETER workers_per_node
    The number of worker threads on a node performing a sync.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$accelerated_failback,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateSet('copy','sync')][string]$action,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][bool]$burst_mode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$changelist,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$check_integrity,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('deny','allow','force')][string]$cloud_deep_copy,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('False')][bool]$conflicted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][bool]$disable_file_split,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][bool]$disable_fofb,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][bool]$disable_stf,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][bool]$expected_dataloss,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][object]$file_matching_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][bool]$force_interface,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][int]$job_delay,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][ValidateSet('fatal','error','notice','info','copy','debug','trace')][string]$log_level,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][bool]$log_removed_files,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][string]$password,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][int]$priority,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][int]$report_max_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][int]$report_max_count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=24)][bool]$restrict_target_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][int]$rpo_alert,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=26)][string]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=27)][bool]$skip_lookup,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=28)][bool]$skip_when_source_unmodified,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=29)][bool]$snapshot_sync_existing,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=30)][string]$snapshot_sync_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=31)][array]$source_exclude_directories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=32)][array]$source_include_directories,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=33)][object]$source_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=34)][string]$source_root_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=35)][bool]$source_snapshot_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=36)][int]$source_snapshot_expiration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=37)][string]$source_snapshot_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=38)][bool]$target_compare_initial_sync,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=39)][bool]$target_detect_modifications,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=40)][string]$target_host,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=41)][string]$target_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=42)][string]$target_snapshot_alias,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=43)][bool]$target_snapshot_archive,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=44)][int]$target_snapshot_expiration,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=45)][string]$target_snapshot_pattern,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=46)][int]$workers_per_node,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=47)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=48)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncPolicyv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/sync/policies/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncPolicyv3

function Set-isiSyncRulev1{
<#
.SYNOPSIS
    Set Sync Rule

.DESCRIPTION
    Modify a single SyncIQ performance rule.
 
.PARAMETER id
    Rule id

.PARAMETER name
    Rule name

.PARAMETER description
    User-entered description of this performance rule.

.PARAMETER enabled
    Whether this performance rule is currently in effect during its specified intervals.

.PARAMETER limit
    Amount the specified system resource type is limited by this rule. Units are kb/s for bandwidth, files/s for file-count, or processing percentage used for cpu.

.PARAMETER schedule
    A schedule defining when during a week this performance rule is in effect. If unspecified or null, the schedule will always be in effect.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncRulev1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/sync/rules/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncRulev1
Set-Alias Set-isiSyncRule -Value Set-isiSyncRulev1
Export-ModuleMember -Alias Set-isiSyncRule

function Set-isiSyncRulev3{
<#
.SYNOPSIS
    Set Sync Rule

.DESCRIPTION
    Modify a single SyncIQ performance rule.
 
.PARAMETER id
    Rule id

.PARAMETER name
    Rule name

.PARAMETER description
    User-entered description of this performance rule.

.PARAMETER enabled
    Whether this performance rule is currently in effect during its specified intervals.

.PARAMETER limit
    Amount the specified system resource type is limited by this rule. Units are kb/s for bandwidth, files/s for file-count, processing percentage used for cpu, or percentage of maximum available workers.

.PARAMETER schedule
    A schedule defining when during a week this performance rule is in effect. If unspecified or null, the schedule will always be in effect.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$description,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$limit,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][object]$schedule,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=5)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncRulev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/sync/rules/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncRulev3

function Set-isiSyncSettingsv1{
<#
.SYNOPSIS
    Set Sync Settings

.DESCRIPTION
    Modify the global SyncIQ settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER burst_memory_constraint
    The per-worker burst socket memory constraint, in bytes.

.PARAMETER burst_socket_buffer_size
    The per-worker burst socket buffer coalesced data, in bytes.

.PARAMETER force_interface
    NOTE: This field should not be changed without the help of Isilon support. Default for the "force_interface" property that will be applied to each new sync policy unless otherwise specified at the time of policy creation. Determines whether data is sent only through the subnet and pool specified in the "source_network" field. This option can be useful if there are multiple interfaces for the given source subnet.

.PARAMETER report_email
    Email sync reports to these addresses.

.PARAMETER report_max_age
    The default length of time (in seconds) a policy report will be stored.

.PARAMETER report_max_count
    The default maximum number of reports to retain for a policy.

.PARAMETER restrict_target_network
    Default for the "restrict_target_network" property that will be applied to each new sync policy unless otherwise specified at the time of policy creation. If you specify true, and you specify a SmartConnect zone in the "target_host" field, replication policies will connect only to nodes in the specified SmartConnect zone. If you specify false, replication policies are not restricted to specific nodes on the target cluster.

.PARAMETER service
    Specifies if the SyncIQ service currently on, paused, or off. If paused, all sync jobs will be paused. If turned off, all jobs will be canceled.
    Valid inputs: on,off,paused

.PARAMETER source_network
    Restricts replication policies on the local cluster to running on the specified subnet and pool.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$burst_memory_constraint,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$burst_socket_buffer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$force_interface,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$report_email,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$report_max_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$report_max_count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$restrict_target_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('on','off','paused')][string]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][object]$source_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=9)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncSettingsv1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/sync/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncSettingsv1
Set-Alias Set-isiSyncSettings -Value Set-isiSyncSettingsv1
Export-ModuleMember -Alias Set-isiSyncSettings

function Set-isiSyncSettingsv3{
<#
.SYNOPSIS
    Set Sync Settings

.DESCRIPTION
    Modify the global SyncIQ settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER burst_memory_constraint
    The per-worker burst socket memory constraint, in bytes.

.PARAMETER burst_socket_buffer_size
    The per-worker burst socket buffer coalesced data, in bytes.

.PARAMETER force_interface
    NOTE: This field should not be changed without the help of Isilon support. Default for the "force_interface" property that will be applied to each new sync policy unless otherwise specified at the time of policy creation. Determines whether data is sent only through the subnet and pool specified in the "source_network" field. This option can be useful if there are multiple interfaces for the given source subnet.

.PARAMETER report_email
    Email sync reports to these addresses.

.PARAMETER report_max_age
    The default length of time (in seconds) a policy report will be stored.

.PARAMETER report_max_count
    The default maximum number of reports to retain for a policy.

.PARAMETER restrict_target_network
    Default for the "restrict_target_network" property that will be applied to each new sync policy unless otherwise specified at the time of policy creation. If you specify true, and you specify a SmartConnect zone in the "target_host" field, replication policies will connect only to nodes in the specified SmartConnect zone. If you specify false, replication policies are not restricted to specific nodes on the target cluster.

.PARAMETER rpo_alerts
    If disabled, no RPO alerts will be generated.

.PARAMETER service
    Specifies if the SyncIQ service currently on, paused, or off. If paused, all sync jobs will be paused. If turned off, all jobs will be canceled.
    Valid inputs: on,off,paused

.PARAMETER source_network
    Restricts replication policies on the local cluster to running on the specified subnet and pool.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][int]$burst_memory_constraint,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$burst_socket_buffer_size,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][bool]$force_interface,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$report_email,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$report_max_age,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$report_max_count,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$restrict_target_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][bool]$rpo_alerts,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][ValidateSet('on','off','paused')][string]$service,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][object]$source_network,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=10)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiSyncSettingsv3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/sync/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiSyncSettingsv3

function Set-isiUpgradeClusterUpgrade{
<#
.SYNOPSIS
    Set Upgrade Cluster Upgrade

.DESCRIPTION
    Add nodes to a running upgrade.
 
.PARAMETER nodes_to_rolling_upgrade
    The nodes (to be) scheduled for an existing upgrade ordered by queue position number. [<lnn-1>, <lnn-2>, ... ], 'All', null

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][array]$nodes_to_rolling_upgrade,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiUpgradeClusterUpgrade')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/upgrade/cluster/upgrade" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiUpgradeClusterUpgrade

function Set-isiWormDomain{
<#
.SYNOPSIS
    Set Worm Domain

.DESCRIPTION
    Modify a single WORM domain.
 
.PARAMETER id
    Domain id

.PARAMETER name
    Domain name

.PARAMETER autocommit_offset
    Specifies the autocommit time period for the domain in seconds. After a file is in the domain without being modified for the specified time period, the file is automatically committed. If this parameter is set to null, there is no autocommit time, and files must be committed manually.

.PARAMETER default_retention
    Specifies the default amount of time, in seconds, that a file in this domain will be protected for. The default retention period is applied if no retention date is manually set on the file. This parameter can also be set to 'forever', 'use_min' (which applies the 'min_retention' option), or 'use_max' (which applies the 'max_retention' option).

.PARAMETER max_retention
    Specifies the maximum amount of time, in seconds, that a file in this domain will be protected. This setting will override the retention period of any file committed with a longer retention period. If this parameter is set to null, an infinite length retention period is set.

.PARAMETER min_retention
    Specifies the minimum amount of time, in seconds, that a file in this domain will be protected. This setting will override the retention period of any file committed with a shorter retention period. If this parameter is set to null, this minimum value is not enforced. This parameter can also be set to 'forever'.

.PARAMETER override_date
    Specifies the override retention date for the domain. If this date is later than the retention date for any committed file, the file will remain protected until the override retention date.

.PARAMETER privileged_delete
    When this value is set to 'on', files in this domain can be deleted through the privileged delete feature. If this value is set to 'disabled', privileged file deletes are permanently disabled and cannot be turned on again.
    Valid inputs: on,off,disabled

.PARAMETER type
    Specifies whether the domain is an enterprise domain or a compliance domain. Compliance domains can not be created on enterprise clusters. Enterprise and compliance domains can be created on compliance clusters.
    Valid inputs: enterprise,compliance,compliance (legacy)

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][int]$autocommit_offset,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][int]$default_retention,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$max_retention,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][int]$min_retention,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][int]$override_date,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][ValidateSet('on','off','disabled')][string]$privileged_delete,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][ValidateSet('enterprise','compliance','compliance (legacy)')][string]$type,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=8)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiWormDomain')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/worm/domains/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiWormDomain

function Set-isiWormSettings{
<#
.SYNOPSIS
    Set Worm Settings

.DESCRIPTION
    Modify the global WORM settings. All input fields are optional, but one or more must be supplied.
 
.PARAMETER cdate
    To set the compliance clock to the current system time, PUT to this resource with an empty JSON object {} for the cdate value. This cluster must be in compliance mode to set the compliance clock.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
        param (
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=0)][object]$cdate,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=1)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiWormSettings')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/worm/settings" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiWormSettings

function Set-isiZonev1{
<#
.SYNOPSIS
    Set Zone

.DESCRIPTION
    Modify the access zone. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Zone id

.PARAMETER name
    Zone name

.PARAMETER all_auth_providers
    Enables all available authentication providers.

.PARAMETER alternate_system_provider
    Specifies an alternate system provider.

.PARAMETER audit_failure
    Specifies a list of failed operations to audit.

.PARAMETER audit_success
    Specifies a list of successful operations to audit.

.PARAMETER auth_providers
    Specifies the list of authentication providers available on this access zone.

.PARAMETER create_path
    Determines if a path is created when a path does not exist.

.PARAMETER hdfs_ambari_namenode
    Specifies the SmartConnect name of the cluster that will be used for the HDFS service.

.PARAMETER hdfs_ambari_server
    Specifies the valid hostname, FQDN, IPv4, or IPv6 string of the Ambari server.

.PARAMETER hdfs_authentication
    Specifies the authentication type for HDFS protocol.
    Valid inputs: all,simple_only,kerberos_only

.PARAMETER hdfs_root_directory
    Specifies the root directory for the HDFS protocol.

.PARAMETER home_directory_umask
    Specifies the permissions set on automatically created user home directories.

.PARAMETER ifs_restricted
    Specifies a list of users and groups that have read and write access to /ifs.

.PARAMETER map_untrusted
    Maps untrusted domains to this NetBIOS domain during authentication.

.PARAMETER new_name
    Specifies the access zone name.

.PARAMETER netbios_name
    Specifies the NetBIOS name.

.PARAMETER path
    Specifies the access zone base directory path.

.PARAMETER protocol_audit_enabled
    Determines if I/O auditing is enabled on this access zone.

.PARAMETER skeleton_directory
    Specifies the skeleton directory that is used for user home directories.

.PARAMETER syslog_audit_events
    Specifies a list of audit operations to forward to the syslog.

.PARAMETER syslog_forwarding_enabled
    Determines if access zone events are forwarded to the syslog.

.PARAMETER system_provider
    Specifies the system provider for the access zone.

.PARAMETER user_mapping_rules
    Specifies the current ID mapping rules.

.PARAMETER webhdfs_enabled
    True if WebHDFS is enabled on this access zone.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][bool]$all_auth_providers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][string]$alternate_system_provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][array]$audit_failure,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][array]$audit_success,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][array]$auth_providers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][bool]$create_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][string]$hdfs_ambari_namenode,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$hdfs_ambari_server,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][ValidateSet('all','simple_only','kerberos_only')][string]$hdfs_authentication,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][string]$hdfs_root_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][int]$home_directory_umask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][array]$ifs_restricted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$map_untrusted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][string]$netbios_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=16)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][bool]$protocol_audit_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=18)][string]$skeleton_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=19)][array]$syslog_audit_events,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=20)][bool]$syslog_forwarding_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=21)][string]$system_provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=22)][array]$user_mapping_rules,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=23)][bool]$webhdfs_enabled,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=24)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=25)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiZonev1')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/1/zones/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiZonev1
Set-Alias Set-isiZone -Value Set-isiZonev1
Export-ModuleMember -Alias Set-isiZone

function Set-isiZonev3{
<#
.SYNOPSIS
    Set Zone

.DESCRIPTION
    Modify the access zone. All input fields are optional, but one or more must be supplied.
 
.PARAMETER id
    Zone id

.PARAMETER name
    Zone name

.PARAMETER alternate_system_provider
    Specifies an alternate system provider.

.PARAMETER auth_providers
    Specifies the list of authentication providers available on this access zone.

.PARAMETER cache_entry_expiry
    Specifies amount of time in seconds to cache a user/group.

.PARAMETER create_path
    Determines if a path is created when a path does not exist.

.PARAMETER force_overlap
    Allow for overlapping base path.

.PARAMETER home_directory_umask
    Specifies the permissions set on automatically created user home directories.

.PARAMETER ifs_restricted
    Specifies a list of users and groups that have read and write access to /ifs.

.PARAMETER map_untrusted
    Maps untrusted domains to this NetBIOS domain during authentication.

.PARAMETER new_name
    Specifies the access zone name.

.PARAMETER negative_cache_entry_expiry
    Specifies number of seconds the negative cache entry is valid.

.PARAMETER netbios_name
    Specifies the NetBIOS name.

.PARAMETER path
    Specifies the access zone base directory path.

.PARAMETER skeleton_directory
    Specifies the skeleton directory that is used for user home directories.

.PARAMETER system_provider
    Specifies the system provider for the access zone.

.PARAMETER user_mapping_rules
    Specifies the current ID mapping rules.

.PARAMETER Force
    Force update of object without prompt

.PARAMETER Cluster
    Name of Isilon Cluster
 
.NOTES

#>

    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High',DefaultParametersetName='ByID')]
        param (
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByID')][ValidateNotNullOrEmpty()][string]$id,
        [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$True,Position=0,ParameterSetName='ByName')][ValidateNotNullOrEmpty()][string]$name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=1)][string]$alternate_system_provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=2)][array]$auth_providers,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=3)][int]$cache_entry_expiry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=4)][bool]$create_path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=5)][bool]$force_overlap,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=6)][int]$home_directory_umask,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=7)][array]$ifs_restricted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=8)][string]$map_untrusted,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=9)][string]$new_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=10)][int]$negative_cache_entry_expiry,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=11)][string]$netbios_name,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=12)][string]$path,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=13)][string]$skeleton_directory,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=14)][string]$system_provider,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=15)][array]$user_mapping_rules,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$False,ValueFromPipeline=$False,Position=16)][switch]$Force,
        [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$True,ValueFromPipeline=$False,Position=17)][ValidateNotNullOrEmpty()][string]$Cluster
        )
    Begin{
    }
    Process{
            $BoundParameters = $PSBoundParameters | SanitizeBoundParameters
            if ($psBoundParameters.ContainsKey('id')){
                $parameter1 = $id
                $BoundParameters.Remove('id') | out-null
            } else {
                $parameter1 = $name
                $BoundParameters.Remove('name') | out-null
            }
            if ($new_name){
                $BoundParameters.Remove('new_name') | out-null
                $BoundParameters.Add('name',$new_name)
            }
            if ($Force -or $PSCmdlet.ShouldProcess("$parameter1",'Set-isiZonev3')){
                $ISIObject = Send-isiAPI -Method PUT -Resource "/platform/3/zones/$parameter1" -body (convertto-json -depth 40 $BoundParameters) -Cluster $Cluster
            }
            return $ISIObject
    }
    End{
    }
}

Export-ModuleMember -Function Set-isiZonev3