Functions/Generic/Filelinks.ps1

function Get-AvmFilelinkListPath {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmFilelinkListPath
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmFilelinkListPath
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1#GetFilelinkListPath"
        UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
        XmlResponse = "GetFilelinkListPathResponse"
    }

    Connect-AvmDevice @splatParameters
}

function Get-AvmFilelinkNumberOfEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmFilelinkNumberOfEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmFilelinkNumberOfEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1#GetNumberOfFilelinkEntries"
        UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
        XmlResponse = "GetNumberOfFilelinkEntriesResponse"
    }

    Connect-AvmDevice @splatParameters
}

function Get-AvmGenericFilelinkEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmGenericFilelinkEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmGenericFilelinkEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$NewIndex
    )

    $avmWebrequestBody = [AvmBody]::new()
    $avmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1"
    $avmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
    $avmWebrequestBody.Action = "GetGenericFilelinkEntry"
    $avmWebrequestBody.InnerBody = "<s:NewIndex>{0}</s:NewIndex>" -f $NewIndex

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $avmWebrequestBody.GenerateBody()
        SoapAction = $avmWebrequestBody.GenerateSoapAction()
        UrlPath = $avmWebrequestBody.UrlPath
        XmlResponse = $avmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @splatParameters
}

function Get-AvmSpecificFilelinkEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmSpecificFilelinkEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Get-AvmSpecificFilelinkEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewID
    )

    $avmWebrequestBody = [AvmBody]::new()
    $avmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1"
    $avmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
    $avmWebrequestBody.Action = "GetSpecificFilelinkEntry"
    $avmWebrequestBody.InnerBody = "<s:NewID>{0}</s:NewID>" -f $NewID

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $avmWebrequestBody.GenerateBody()
        SoapAction = $avmWebrequestBody.GenerateSoapAction()
        UrlPath = $avmWebrequestBody.UrlPath
        XmlResponse = $avmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @splatParameters
}

function New-AvmFilelinkEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/New-AvmFilelinkEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/New-AvmFilelinkEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewPath,

        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$NewAccessCountLimit,

        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$NewExpire
    )

    $avmWebrequestBody = [AvmBody]::new()
    $avmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1"
    $avmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
    $avmWebrequestBody.Action = "NewFilelinkEntry"
    $avmWebrequestBody.InnerBody = @"
<s:NewPath>{0}</s:NewPath>
<s:NewAccessCountLimit>{1}</s:NewAccessCountLimit>
<s:NewExpire>{2}</s:NewExpire>
"@
 -f $NewPath, $NewAccessCountLimit, $NewExpire

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $avmWebrequestBody.GenerateBody()
        SoapAction = $avmWebrequestBody.GenerateSoapAction()
        UrlPath = $avmWebrequestBody.UrlPath
        XmlResponse = $avmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @splatParameters
}

function Remove-AvmFilelinkEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Remove-AvmFilelinkEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Remove-AvmFilelinkEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewID
    )

    $avmWebrequestBody = [AvmBody]::new()
    $avmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1"
    $avmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
    $avmWebrequestBody.Action = "DeleteFilelinkEntry"
    $avmWebrequestBody.InnerBody = "<s:NewID>{0}</s:NewID>"-f $NewID
 
    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $avmWebrequestBody.GenerateBody()
        SoapAction = $avmWebrequestBody.GenerateSoapAction()
        UrlPath = $avmWebrequestBody.UrlPath
        XmlResponse = $avmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @splatParameters
}

function Set-AvmFilelinkEntry {
    <#
        .SYNOPSIS
            Wiki: https://github.com/Gincules/avmtools/wiki/Set-AvmFilelinkEntry
        .DESCRIPTION
            Wiki: https://github.com/Gincules/avmtools/wiki/Set-AvmFilelinkEntry
        .NOTES
            Author: Gincules
            Website: https://github.com/Gincules/avmtools
            License: https://github.com/Gincules/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/Gincules/avmtools
            https://github.com/Gincules/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.String]$NewID,

        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$NewAccessCountLimit,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.UInt16]$NewExpire
    )

    $avmWebrequestBody = [AvmBody]::new()
    $avmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_Filelinks:1"
    $avmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_filelinks"
    $avmWebrequestBody.Action = "SetFilelinkEntry"
    $avmWebrequestBody.InnerBody = @"
<s:NewID>{0}</s:NewID>
<s:NewAccessCountLimit>{1}</s:NewAccessCountLimit>
<s:NewExpire>{2}</s:NewExpire>
"@
 -f $NewID, $NewAccessCountLimit, $NewExpire

    [System.Collections.Hashtable]$splatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $avmWebrequestBody.GenerateBody()
        SoapAction = $avmWebrequestBody.GenerateSoapAction()
        UrlPath = $avmWebrequestBody.UrlPath
        XmlResponse = $avmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @splatParameters
}