PureFBModule.psm1

<#
    ===========================================================================
    Created by: aj@purestorage.com
    Organization: Pure Storage, Inc.
    Filename: PureFBModule.psd1
    Copyright: (c) 2021 Pure Storage, Inc.
    Module Name: PureFBModule
    Description: PowerShell Script Module (.psm1)
    -------------------------------------------------------------------------
    Disclaimer
     The sample script and documentation are provided AS IS and are not supported by
    the author or the author’s employer, unless otherwise agreed in writing. You bear
    all risk relating to the use or performance of the sample script and documentation.
    The author and the author’s employer disclaim all express or implied warranties
    (including, without limitation, any warranties of merchantability, title, infringement
    or fitness for a particular purpose). In no event shall the author, the author’s employer
    or anyone else involved in the creation, production, or delivery of the scripts be liable
    for any damages whatsoever arising out of the use or performance of the sample script and
    documentation (including, without limitation, damages for loss of business profits,
    business interruption, loss of business information, or other pecuniary loss), even if
    such person has been advised of the possibility of such damages.
    ===========================================================================
 
Cmdlets:
 Get-Pfb
 Add-Pfb
 Update-Pfb
 Delete-Pfb
 
 Functions with Internal in the name are not Exported e..g Get-InternalPfbJSON
 
 Default variables for FlashBlade, APITOKEN, APIVers and SkipCertificateCheck are read from the file controlled by the $JSON_FILE variable below.
 If you want to override these, you can specify -FlashBlade and -APIToken when running a cmdlet. APIVers is defaulted below, but can also be over-ridden if you comment that variable out.
 
 To Do:
 FIX Get-NOPfbLogs
 Update Help and add more examples.
 Testing, more testing.
 
 Supports all versions to 1.12
 
 Author:
 aj@purestorage.com
 
----------------------------------------------------------------------------
#>


#Requires -Version 6.0
$AUTH_TOKEN = $null;
$DEBUG = 1;
$APIVers = 1.8;
$JSON_FILE = 'FlashBlade.JSON';

# .ExternalHelp PureFBModule-help.xml
 

function Get-PfbDateSinceEpoc() 
{

[CmdletBinding()]
Param(
[Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $MyDate = $null
);
    $Epocseconds = get-date (get-date -Date $MyDate).ToUniversalTime() -UFormat %s;
    $Epocmilliseconds = [timespan]::FromSeconds($Epocseconds).TotalMilliseconds;
    return @($Epocmilliseconds)
    
}

function Get-InternalPfbJson() 
{


        $json = Get-Content -Raw ($JSON_FILE) | out-string | ConvertFrom-Json;
        #$json = Get-Content -Raw FlashBlade.JSON | out-string | ConvertFrom-Json;
    $json | ForEach-Object { 
            $FlashBlade = $_.FlashBlade
            $ApiToken = $_.APIToken
                        $ApiVers = $_.APIvers
                        $SkipCertificateCheck = $_.SkipCertificateCheck
        }
    if ($DEBUG) { write-host "Get-InternalPfbJson IP = $FlashBlade " } ; 
    
    return @($FlashBlade,$ApiToken,$ApiVers,$SkipCertificateCheck)
}

function Get-InternalPfbAuthToken() 
{

        if ($DEBUG) { write-host "Get-InternalPfbAuthToken IP = $FlashBlade" } ; 
        if ($DEBUG) { write-host "ApiToken = $ApiToken" } ; 
        
        $Token = $null;
        if ( $null -ne $AUTH_TOKEN ) {
                $Token = $AUTH_TOKEN;
        } else {
                $url = "/api/login";
                $link = "https://$FlashBlade$url";
                $headers = @{"api-token" = "$ApiToken"};
                try {
                        $obj = Invoke-RestMethod -SkipCertificateCheck -Method POST -Headers $headers -Uri $link -RHV 'Headers' 
                        $Token = $Headers.'x-auth-token';
                        if ($DEBUG) { Write-Host "TOKEN: $Token" }
                        return $Token;
                } 
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "

                        If ($_.Exception.Response.StatusCode.value__) {
                                $myMessage = ($_.Exception.Response.StatusCode.value__ ).ToString().Trim();
                                Write-Output $myMessage;
                            }
                         If  ($_.Exception.Message) {
                                $myMessage = ($_.Exception.Message).ToString().Trim();
                                Write-Output $myMessage;
                        }

                        break;
                     }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                    
                        $myMessage = ($_.Exception.Message).ToString().Trim();
                        Write-Output $myMessage;

                        break;
                }
        }
}

function Get-InternalPfbAuthTokenLogout( $Token )
{

        $url = "/api/logout";
        $link = "https://$FlashBlade$url";
        $headers = @{"x-auth-token" = "$Token"};

        try { 
                $obj = Invoke-RestMethod -SkipCertificateCheck -Method POST -Headers $headers -Uri $link -RHV 'Headers'
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "

                If ($_.Exception.Response.StatusCode.value__) {
                        $myMessage = ($_.Exception.Response.StatusCode.value__ ).ToString().Trim();
                        Write-Output $myMessage;
                    }
                 If  ($_.Exception.Message) {
                        $myMessage = ($_.Exception.Message).ToString().Trim();
                        Write-Output $myMessage;
                }

                break;
             }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
            
                $myMessage = ($_.Exception.Message).ToString().Trim();
                Write-Output $myMessage;

                break;
        }

}

function Get-InternalHTTPError ()
{
        If ($_.Exception.Response.StatusCode.value__) {
                $myMessage = ($_.Exception.Response.StatusCode.value__ ).ToString().Trim();
                Write-Output $myMessage;
                }
                If  ($_.Exception.Message) {
                        $myMessage = ($_.Exception.Message).ToString().Trim();
                        Write-Output $myMessage;
                }
                write-host $_.ErrorDetails.Message
                break;
}

function Get-InternalCatchallError () 
{                 
        $myMessage = ($_.Exception.Message).ToString().Trim();
        Write-Output $myMessage;
        break;
}


function Test-APIVersion ($APIVers, $MinAPIVers) 
{                 
        if ($APIVers -lt $MinAPIVers) {
                Write-Output "Sorry minimum API Version should be $MinAPIVers - you are using $APIVers"
                break;
        }
       
}

function Get-PfbAPIVers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$False)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/api_version";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.versions;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }        
}

function Get-PfbActiveDirectory()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test 

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
if ($Test) {        
        $url = "/api/$ApiVers/active-directory/test";
}  else {
        $url = "/api/$ApiVers/active-directory";
}

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbActiveDirectory()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $JoinExistingAccount = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/active-directory";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($JoinExistingAccount) {
                $uri.Add('join_existing_account', $JoinExistingAccount)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbActiveDirectory()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/active-directory";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbActiveDirectory()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $LocalOnly = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/active-directory";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }
        if ($LocalOnly) {
                $uri.Add('local_only', $LocalOnly)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbAlert()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32]  $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/alerts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {$
                $uri.Add('token' , $Token)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbAlert()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/alerts";                               
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
 
function Get-PfbAlertWatcher()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test 

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
if ($Test) {        
        $url = "/api/$ApiVers/alert-watchers/test";
}  else {
        $url = "/api/$ApiVers/alert-watchers";
}

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbAlertWatcher()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Level = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        $body = @{minimum_notification_severity = $Level};
        $url = "/api/$ApiVers/alert-watchers";                
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbAlertWatcher()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Enabled = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/alert-watchers";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        $body = @{enabled = $Enabled};

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbAlertWatcher()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/alert-watchers";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbAPIClients()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/api-clients";


        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbAPIClients()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/api-clients";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbAPIClients()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/api-clients";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbAPIClients()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/api-clients";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArray()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Boolean] $Banner,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

If ($Banner) { 
        $url = "/api/login-banner";
} Else {
        $url = "/api/$ApiVers/arrays"
}
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbArray()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Name = $null,
  [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string] $NTPServers = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/arrays";
        $link = "https://$FlashBlade$url";    
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)    
        
        #$body = @{'ntp_servers' = $NTPServers}

        $body = @{
                'ntp_servers' = @(
                        $NTPServers
                        )
        }
        
        if ($Name) {
                $body.Add('name', $Name)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArraySpace()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Type
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/arrays/space"; 
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Type) {
                $uri.Add('type' , $Type)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Protocol = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][bool] $Replication,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Type = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Replication -eq 'true') {
        $url = "/api/$ApiVers/arrays/performance/replication"; 
} else {
        $url = "/api/$ApiVers/arrays/performance";
}

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($Resolution) {
                $uri.Add('Resolution' , $Resolution)
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Type) {
                $uri.Add('type' , $Type)
        }
        if ($Protocol) {
                $uri.Add('protocol' , $Protocol)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayClientPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/arrays/clients/performance";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Sort) {$
                $uri.Add('sort' , $Sort)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayHttpSpecificPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Type = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/arrays/http-specific-performance";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Type) {
                $uri.Add('Type' , $Type)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayS3SpecificPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Type = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/arrays/s3-specific-performance";             
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($Type) {$
                Body.Add('Type' , $Type)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayConnections()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/array-connections";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbArrayConnections()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $InputFile,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/array-connections";
        $link = "https://$FlashBlade$url";    
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)    
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbArrayConnections()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $InputFile,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/array-connections";
        $link = "https://$FlashBlade$url";    
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)    
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbArrayConnections()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/array-connections";
        $link = "https://$FlashBlade$url";    
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)    
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayConnectionsConnectionKey()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/array-connections/connection-key";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbArrayConnectionsConnectionKey()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/array-connections/connection-key";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayConnectionsPath()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/array-connections/path";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbArrayConnectionsPerformanceReplication()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string]  $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string]  $StartTime ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][bool] $Total_Only ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Type = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/array-connections/performance/replication";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($Type) {
                $uri.Add('type' , $Type)
        }
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}


function Get-PfbAudits()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/audits";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbBucket()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $TotalOnly 
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5; 
                write-host "Limit set to max of 5 due to API policy";}
        
        $url = "/api/$ApiVers/buckets";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        if ($TotalOnly) {
                $uri.Add('total_only' , $TotalOnly)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbBucket()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Account = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);

if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}


$body = @{
        'account' = @{ 
                'name'=$Account
        }
}    

        $url = "/api/$ApiVers/buckets";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbBucket()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/buckets";       
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name' , $Names)
        }
        if ($Ids) {
                $uri.Add('ids' , $Ids)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbBucket()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/buckets";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbBucketPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = 5,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $TotalOnly
);
        if (!$FlashBlade) {
                $myreturn = $(Get-InternalPfbJson);
                $FlashBlade = $myreturn[0]
                $ApiToken = $myreturn[1]
                $ApiVers = $myreturn[2]
                $SkipCertificateCheck = $myreturn[3]
        }
        
        if ($SkipCertificateCheck -eq 'true') {
                $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
                if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
                $skipcert=$True
        }

    if ($Limit -gt 5)  { $Limit = 5; 
            write-host "Limit set to max of 5 due to API policy";}

                $headers = @{};
                $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
                $url = "/api/$ApiVers/buckets/performance";

                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }
                if ($EndTime) {
                        $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
                }
                if ($StartTime) {
                        $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
                }
        if ($Resolution) {
                        $uri.Add('resolution' , $Resolution)
                } 
                if ($TotalOnly) {
                        $uri.Add('total_only' , $TotalOnly)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbBucketReplicaLinks()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/bucket-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($Local_Bucket_Ids) {
                $uri.Add('local_bucket_ids' , $Local_Bucket_Ids)
        }
        if ($Local_Bucket_Names) {
                $uri.Add('local_bucket_names' , $Local_Bucket_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbBucketReplicaLinks()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Credentials_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Credentials_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/bucket-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        
        if ($Local_Bucket_Ids) {
                $uri.Add('local_bucket_ids' , $Local_Bucket_Ids)
        }
        if ($Local_Bucket_Names) {
                $uri.Add('local_bucket_names' , $Local_Bucket_Names)
        }
        if ($Remote_Bucket_Names) {
                $uri.Add('remote_bucket_names' , $Remote_Bucket_Names)
        }
        if ($Remote_Credentials_Ids) {
                $uri.Add('remote_credentials_ids' , $Remote_Credentials_Ids)
        }
        if ($Remote_Credentials_Names) {
                $uri.Add('remote_credentials_names' , $Remote_Credentials_Names)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbBucketReplicaLinks()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/bucket-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)


        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Local_Bucket_Ids) {
                $uri.Add('local_bucket_ids' , $Local_Bucket_Ids)
        }
        if ($Local_Bucket_Names) {
                $uri.Add('local_bucket_names' , $Local_Bucket_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }
        if ($Remote_Bucket_Names) {
                $uri.Add('remote_bucket_names' , $Remote_Bucket_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbBucketReplicaLinks()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Bucket_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/bucket-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)


        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Local_Bucket_Ids) {
                $uri.Add('local_bucket_ids' , $Local_Bucket_Ids)
        }
        if ($Local_Bucket_Names) {
                $uri.Add('local_bucket_names' , $Local_Bucket_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }
        if ($Remote_Bucket_Names) {
                $uri.Add('remote_bucket_names' , $Remote_Bucket_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbBucketS3SpecificPerformance()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = 5,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $TotalOnly
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}


if ($Limit -gt 5)  { $Limit = 5; 
                write-host "Limit set to max of 5 due to API policy";}

        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        $url = "/api/$ApiVers/buckets/performance";

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        } 
        if ($TotalOnly) {
                $uri.Add('total_only' , $TotalOnly)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbCertificate()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);

        if ($Names) {
                $uri.Add('names', $Names)
        };
        if ($Ids) {
                $uri.Add('ids', $Ids)
        };
        if ($Filter) {
                $uri.Add('filter', $Filter)
        };
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        };
        if ($Start) {
                $uri.Add('start' , $Start)
        };
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        };
        if ($Token) {
                $uri.Add('token' , $Token)
        };

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbCertificate()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

#$body = @{
# certificate=$Certificate
#}

        $url = "/api/$ApiVers/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);

        if ($Names) {
                $uri.Add('names', $Names)
        };

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbCertificate()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);

        if ($Names) {
                $uri.Add('names', $Names)
        };
        if ($Ids) {
                $uri.Add('names', $Ids)
        };

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbCertificate()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);

        if ($Names) {
                $uri.Add('names', $Names)
        };
        if ($Ids) {
                $uri.Add('names', $Ids)
        };

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbCertificatesUse()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates/uses";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbCertificateGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates/certificate-groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $Certificate_Names)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbCertificateGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates/certificate-groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $CertificateNames)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbCertificateGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificates/certificate-groups";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $CertificateNames)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbCertificateGroupCertificate()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificate-groups/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $CertificateNames)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbCertificateGroupCertificate()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificate-groups/certificates";
       $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $CertificateNames)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbCertificateGroupCertificate()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $CertificateGroupNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificate-groups/certificates";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($CertificateIds) {
                $uri.Add('certificate_ids' , $CertificateIds)
        }
        if ($CertificateGroupIds) {
                $uri.Add('certificate_group_ids' , $CertificateGroupIds)
        }
        if ($CertificateNames) {
                $uri.Add('certificate_names' , $CertificateNames)
        }
        if ($CertificateGroupNames) {
                $uri.Add('certificate_group_names' , $CertificateGroupNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbCertificateGroupsUse()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null, 
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Limit ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/certificate-groups/uses";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids){ 
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbDirectoryService()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        if ($Test) { 
                $url = "/api/$ApiVers/directory-services/test";
        } else {
                $url = "/api/$ApiVers/directory-services";
        }

        #$url = "/api/$ApiVers/directory-services";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbDirectoryService()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
               
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/directory-services";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Limit) {$
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbDirectoryServiceRole()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/directory-services/roles";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbDirectoryServiceRole()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
        $url = "/api/$ApiVers/directory-services/roles";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $body = ConvertFrom-Json $Attributes -AsHashtable;

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-Pfbtemsnaptem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Destroyed,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-systems";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($Destroyed) {
                $uri.Add('destroyed' , $Destroyed)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbFilesystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Overwrite = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Discard = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/file-systems";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Overwrite) {
                $uri.Add('overwrite', $Overwrite)
        }
        if ($Discard) {
                $uri.Add('discard_non_snapshot_data', $Discard)
        }
        # $body = @{ name = $Names };

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbFilesystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $IgnoreUsage,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $DeleteLinkOnEradication,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $DeleteNonSnapshottedData
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
        
        $url = "/api/$ApiVers/file-systems";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name' , $Names)
        }
        if ($Ids) {
                $uri.Add('ids' , $Ids)
        }
        if ($IgnoreUsage) {
                $uri.Add('ignore_usage' , $IgnoreUsage)
        }
        if ($DeleteLinkOnEradication) {
                $uri.Add('delete_link_on_eradication' , $DeleteLinkOnEradication)
        }
        if ($DeleteNonSnapshottedData) {
                $uri.Add('delete_non_snapshotted_data' , $DeleteNonSnapshottedData)
        }
        #$body = ConvertFrom-Json $Attributes -AsHashtable;

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbFilesystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-systems";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFilesystemPerformance()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][long] $StartTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Protocol = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = 5,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Resolution = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Total_Only
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

    if ($Limit -gt 5)  { $Limit = 5; 
            write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/file-systems/performance";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Protocol) {
                $uri.Add('protocol', $Protocol)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }
        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        } 
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFilesystemUserPerformance()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $File_System_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $File_System_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = 5,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Total_Only,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $User_Names = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

    if ($Limit -gt 5)  { $Limit = 5; 
            write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/file-systems/users/performance";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($File_System_Names) {
                $uri.Add('file_system_names', $File_System_Names)
        }
        if ($File_System_Ids) {
                $uri.Add('file_system_ids', $File_System_Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($User_Names) {
                $uri.Add('user_names', $User_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
function Get-PfbFilesystemPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Lmit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/file-systems/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($MemberNames) {
                $uri.Add('member_names' , $MemberNames)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names' , $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids' , $PolicyIDs)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids' , $MemberIDs)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbFilesystemPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/file-systems/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names' , $MemberNames)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names' , $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids' , $Policy_ids)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids' , $MemberIDs)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbFilesystemPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
                $url = "/api/$ApiVers/file-systems/policies";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($MemberNames) {
                        $uri.Add('member_names' , $MemberNames)
                }
                if ($PolicyNames) {
                        $uri.Add('policy_names' , $PolicyNames)
                }
                if ($PolicyIDs) {
                        $uri.Add('policy_ids' , $Policy_ids)
                }
                if ($MemberIDs) {
                        $uri.Add('member_ids' , $MemberIDs)
                }
                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'DELETE' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbFileSystemReplicaLinks()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_FS_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_FS_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_FS_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_FS_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($Local_FS_Ids) {
                $uri.Add('local_file_system_ids' , $Local_FS_Ids)
        }
        if ($Local_FS_Names) {
                $uri.Add('local_file_system_names' , $Local_FS_Names)
        }
        if ($Remote_FS_Ids) {
                $uri.Add('remote_file_system_ids' , $remote_FS_Ids)
        }
        if ($remote_FS_Names) {
                $uri.Add('remote_file_system_names' , $remote_FS_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbFileSystemReplicaLinks()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_FS_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Local_FS_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_FS_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_FS_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        
        if ($Local_FS_Ids) {
                $uri.Add('local_file_system_ids' , $Local_FS_Ids)
        }
        if ($Local_FSames) {
                $uri.Add('local_file_system_names' , $Local_FS_Names)
        }
        if ($Remote_FS_Ids) {
                $uri.Add('remote_file_system_ids' , $Remote_FS_Ids)
        }
        if ($Remote_FS_Names) {
                $uri.Add('remote_file_system_names' , $Remote_FS_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids' , $Remote_Ids)
        }
        if ($Remote_Credentials_Names) {
                $uri.Add('remote_names' , $Remote_Names)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFileSystemReplicaLinksPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Member_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Member_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-replica-links/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Member_Ids) {
                $uri.Add('member_ids', $Member_Ids)
        }
        if ($Polciy_Ids) {
                $uri.Add('policy_ids', $Policy_Ids)
        }
        if ($Policy_Names) {
                $uri.Add('policy_names', $Policy_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids', $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names', $Remote_Names)
        }
        if ($Remote_Member_Ids) {
                $uri.Add('remote_member_ids', $Remote_Member_Ids)
        }
        if ($Remote_Member_Names) {
                $uri.Add('remote_member_names', $Remote_Member_Names)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }

        if ($Token) {
                $uri.Add('token' , $Token)
        }


        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbFileSystemReplicaLinksPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-replica-links/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Member_Ids) {
                $uri.Add('member_ids', $Member_Ids)
        }
        if ($Member_Namess) {
                $uri.Add('member_names', $Member_Names)
        }
        if ($Polciy_Ids) {
                $uri.Add('policy_ids', $Policy_Ids)
        }
        if ($Policy_Names) {
                $uri.Add('policy_names', $Policy_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids', $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names', $Remote_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbFileSystemReplicaLinksPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Remote_Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-replica-links/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Member_Ids) {
                $uri.Add('member_ids', $Member_Ids)
        }
        if ($Member_Names) {
                $uri.Add('member_names', $Member_Names)
        }
        if ($Polciy_Ids) {
                $uri.Add('policy_ids', $Policy_Ids)
        }
        if ($Policy_Names) {
                $uri.Add('policy_names', $Policy_Names)
        }
        if ($Remote_Ids) {
                $uri.Add('remote_ids', $Remote_Ids)
        }
        if ($Remote_Names) {
                $uri.Add('remote_names', $Remote_Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFilesystemSnapshot()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Lmit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names_or_Sources = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Transfer 
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        if ($Transfer -eq 'true') {
                $url = "/api/$ApiVers/file-system-snapshots/transfer";
        } else {  
                $url = "/api/$ApiVers/file-system-snapshots";
        }
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Names_or_Sources) {
                $uri.Add('names_or_sources' , $Names_or_Sources)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFilesystemSnapshotPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32]  $Lmit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Member_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Policy_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32]  $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-snapshots/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Member_Ids) {
                $uri.Add('member_ids', $Member_Ids)
        }
        if ($Member_Names) {
                $uri.Add('member_names', $Member_Names)
        }
        if ($Polciy_Ids) {
                $uri.Add('policy_ids', $Policy_Ids)
        }
        if ($Policy_Names) {
                $uri.Add('policy_names', $Policy_Names)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Names_or_Sources) {
                $uri.Add('names_or_sources' , $Names_or_Sources)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbFilesystemSnapshot()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Source_Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Source_Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sources = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Targets = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Suffix = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Send 

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-snapshots";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty);

        if ($Sources) {
                $uri.Add('sources', $Sources)
        }

        if ($Source_Ids) {
                $uri.Add('source_ids', $Source_Ids)
        }

        if ($Source_Names) {
                $uri.Add('source_names', $Source_Names)
        }

        if ($Targets) {
                $uri.Add('targets', $Targets)
        }

        if ($Send) {
                $uri.Add('send', $Send)
        }

        if ($Suffix) {
                $body =  @{ 'suffix' = $Suffix } ;
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbFilesystemSnapshot()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][bool] $Latest_Replica,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Name = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Destroyed = $FALSE
);
if (!$FlashBlade) {
$myreturn = $(Get-InternalPfbJson);
$FlashBlade = $myreturn[0]
$ApiToken = $myreturn[1]
$ApiVers = $myreturn[2]
$SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/file-system-snapshots";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name' , $Names)
        }
        if ($Ids) {
                $uri.Add('ids' , $Ids)
        }
        if ($Name) {
                $body =  @{ 'name' = $Name } ;
        }
        if ($Destroyed) {
                $body =  @{ 'destroyed' = $Destroyed } ;
        }


        $body = ConvertFrom-Json $Attributes -AsHashtable;

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbFilesystemSnapshot()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        if ($Transfer -eq 'true') {
                $url = "/api/$ApiVers/file-system-snapshots/transfer";
        } else {
                $url = "/api/$ApiVers/file-system-snapshots";
        }
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name', $Names)
        }
        if ($Ids) {
                $uri.Add('ids' , $Ids)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbFilesystemSnapshotPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/file-system-snapshots/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($MemberNames) {
                $uri.Add('member_names' , $MemberNames)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names' , $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids' , $PolicyIds)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids' , $MemberIDs)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}



function Get-PfbBlades()
{
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/blades";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
 
function Get-PfbHardware()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/hardware"; 
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
function Update-PfbHardware()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        
        $url = "/api/$ApiVers/hardware"; 
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $body = (ConvertFrom-Json $Attributes -AsHashtable)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbHardwareConnector()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $uri = "/api/$ApiVers/hardware-connectors";

        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        $link = "https://$FlashBlade$uri";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbHardwareConnector()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][int32] $LaneSpeed = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][int32] $PortCount = $null

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $uri = "/api/$ApiVers/hardware-connectors";

        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        $link = "https://$FlashBlade$uri";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $body = @{ 'lane_speed' = $LaneSpeed } , @{ 'port_count' = $PortCount } 

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbKeytabs()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Limit =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64] $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Download,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $KeyTabNames =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $KeyTabIds =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/keytabs";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Limit) {
                $uri.Add('limit', $Limit)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Sort) {
                $uri.Add('sort', $Sort)
        }
        if ($Start) {
                $uri.Add('start', $Start)
        }
        if ($Token) {
                $uri.Add('token', $Token)
        }
        if ($KeyTabIds) {
                $uri.Add('keytab_ids', $KeyTabIds)
        }
        if ($KeyTabNames) {
                $uri.Add('keytab_names', $KeyTabNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbKeytabs()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/keytabs";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        

        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
 
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-NOPfbKeytabs()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $KeytabFile =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $NamePrefixes =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/keytabs";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        

        if ($NamePrefixes) {
                $uri.Add('name_prefixes', $NamePrefixes)
        }
 
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbLifeCycleRules()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int32] $Limit =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64] $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $BucketNames =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $BucketIds =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/lifecycle-rules";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Limit) {
                $uri.Add('limit', $Limit)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Sort) {
                $uri.Add('sort', $Sort)
        }
        if ($Start) {
                $uri.Add('start', $Start)
        }
        if ($Token) {
                $uri.Add('token', $Token)
        }
        if ($BucketIds) {
                $uri.Add('bucket_ids', $BucketIds)
        }
        if ($BucketNames) {
                $uri.Add('bucket_names', $BucketNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbLifeCycleRules()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/lifecycle-rules";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
 
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbLifeCycleRules()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $uri = "/api/$ApiVers/lifecycle-rules";
        $body = (ConvertFrom-Json $Attributes -AsHashtable);

        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        $link = "https://$FlashBlade$uri";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbLifeCycleRules()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $BucketNames =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $BucketIds =$null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $uri = "/api/$ApiVers/lifecycle-rules";

        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        $link = "https://$FlashBlade$uri";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($BucketIds) {
                $uri.Add('bucket_ids', $BucketIds)
        }
        if ($BucketNames) {
                $uri.Add('bucket_names', $BucketNames)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
function Get-NOPfbLogs()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileName =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][Int64] $EndTime = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][Int64] $StartTime = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
                $url = "/api/$ApiVers/logs";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($StartTime) {
                        $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
                }
                if ($EndTime) {
                        $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken) 
                        ContentType = 'application/octet-stream'} 
                        Uri = $request.Uri
                        #Body = (ConvertTo-JSON $body)
                        Body = " " 
                        #ContentType = 'application/octet-stream'
                        #OutFile = $FileName
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params -Verbose -PreserveAuthorizationOnRedirect 
                                #$Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                #Set-Content -Path $FileName -Value $obj.Content -AsByteStream
                                #return $obj;
                                #return $Items;

                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbDns()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/dns";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbDns()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
        $url = "/api/$ApiVers/dns";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbLag()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
                $url = "/api/$ApiVers/link-aggregation-groups";
                $headers = @{};
                $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Add-PfbLag()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
        $url = "/api/$ApiVers/link-aggregation-groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }  

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbLag()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
        $url = "/api/$ApiVers/link-aggregation-groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbLag()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/link-aggregation-groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}


function Get-PfbNetworkInterface()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

                $url = "/api/$ApiVers/network-interfaces"; 
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Add-PfbNetworkInterface()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/network-interfaces"; 
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbNetworkInterface()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/network-interfaces";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }

                $body = @{'address' = $Address}

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()

                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'PATCH' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Remove-PfbNetworkInterface()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/network-interfaces";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbSmtp()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/smtp";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbSmtp()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}


                $url = "/api/$ApiVers/smtp";
                $link = "https://$FlashBlade$url";
               $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'PATCH' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbSnmpAgents()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Mib ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        if ($Mib -eq 'true') {        
                $url = "/api/$ApiVers/snmp-agents/mib";
        } else {
                $url = "/api/$ApiVers/snmp-agents";
        }
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)      
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        if ($Mib) { 
                        write-host $Items 
                        return $Items;
                        } else {
                                return $Items;
                        }
                        
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbSnmpAgents()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null

)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
        $url = "/api/$ApiVers/snmp-agents";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbSnmpManagers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Test =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        if ($Test -eq 'true') {
                $url = "/api/$ApiVers/snmp-managers/test";
        } else { 
                $url = "/api/$ApiVers/snmp-managers";
        }
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Names) {
                $uri.Add('names' , $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Add-PfbSnmpManagers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/snmp-managers";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names' , $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbSnmpManagers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/snmp-managers";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Ids) {
                $uri.Add('ids' , $Ids)
        }
        if ($Names) {
                $uri.Add('names' , $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbSubnet()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
                $url = "/api/$ApiVers/subnets";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {$
                        Body.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Add-PfbSubnet()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/subnets";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'POST' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Update-PfbSubnet()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/subnets";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'PATCH' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Remove-PfbSubnet()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
                $url = "/api/$ApiVers/subnets";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'DELETE' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbSyslogServers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Test) {
        $url = "/api/$ApiVers/syslog-servers/test";
} Else {
        $url = "/api/$ApiVers/syslog-servers";
}

                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {$
                        Body.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbSyslogServersSettings()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
        $url = "/api/$ApiVers/syslog-servers/settings";


                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {$
                        Body.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}
function Add-PfbSyslogServers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/syslog-servers";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'POST' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Update-PfbSyslogServers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/syslog-servers";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($IDs) {
                        $uri.Add('ids', $IDs)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'PATCH' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Update-PfbSyslogServersSettings()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

                $url = "/api/$ApiVers/syslog-servers/settings";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($IDs) {
                        $uri.Add('ids', $IDs)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'PATCH' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}
function Remove-PfbSyslogServers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
                $url = "/api/$ApiVers/syslog-servers";
                $link = "https://$FlashBlade$url";
                $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($IDs) {
                        $uri.Add('ids', $IDs)
                }
                if ($Names) {
                        $uri.Add('names', $Names)
                }

                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'DELETE' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbObjectStoreAccessKey()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Total_Only 
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                        
                $url = "/api/$ApiVers/object-store-access-keys";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                } 
        if ($Total_Only) {
                        $uri.Add('total_only' , $Total_Only)
                } 
                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Add-PfbObjectStoreAccessKey()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Name = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

    $body = @{
        'user' = @{ 
            'name'=$Name
        }
    }    
        
        $url = "/api/$ApiVers/object-store-access-keys";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbObjectStoreAccessKey()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-access-keys";        
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('name' , $Names)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbObjectStoreAccessKey()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5;
        write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/object-store-access-keys";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Get-PfbObjectStoreAccessPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                        
                $url = "/api/$ApiVers/object-store-access-policies";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($Names) {
                        $uri.Add('names', $Names)
                }
                if ($Ids) {
                        $uri.Add('ids', $Ids)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                } 
                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbObjectStoreAccessPoliciesUsers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                        
                $url = "/api/$ApiVers/object-store-access-policies/object-store-users";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($MemberNames) {
                        $uri.Add('member_names', $MemberNames)
                }
                if ($MemberIds) {
                        $uri.Add('member_ids', $MemberIds)
                }
                if ($PolicyNames) {
                        $uri.Add('policy_names', $PolicyNames)
                }
                if ($PolicyIds) {
                        $uri.Add('policy_ids', $PolicyIds)
                }
                if ($Filter) {
                        $uri.Add('filter', $Filter)
                }
                if ($Sort) {
                        $uri.Add('sort' , $Sort)
                }
                if ($Start) {
                        $uri.Add('start' , $Start)
                }
                if ($Limit) {
                        $uri.Add('limit' , $Limit)
                }
                if ($Token) {
                        $uri.Add('token' , $Token)
                } 
                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'GET' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Add-PfbObjectStoreAccessPoliciesUsers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                        
                $url = "/api/$ApiVers/object-store-access-policies/object-store-users";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($MemberNames) {
                        $uri.Add('member_names', $MemberNames)
                }
                if ($MemberIds) {
                        $uri.Add('member_ids', $MemberIds)
                }
                if ($PolicyNames) {
                        $uri.Add('policy_names', $PolicyNames)
                }
                if ($PolicyIds) {
                        $uri.Add('policy_ids', $PolicyIds)
                }

                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'POST' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Remove-PfbObjectStoreAccessPoliciesUsers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIds = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                        
                $url = "/api/$ApiVers/object-store-access-policies/object-store-users";
                $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

                if ($MemberNames) {
                        $uri.Add('member_names', $MemberNames)
                }
                if ($MemberIds) {
                        $uri.Add('member_ids', $MemberIds)
                }
                if ($PolicyNames) {
                        $uri.Add('policy_names', $PolicyNames)
                }
                if ($PolicyIds) {
                        $uri.Add('policy_ids', $PolicyIds)
                }

                
                $request = [System.UriBuilder]$link
                $request.Query = $uri.ToString()
        
                $params = @{
                        SkipCertificateCheck = $skipcert
                        Method  = 'DELETE' 
                        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                        Uri = $request.Uri
                        Body = (ConvertTo-JSON $body) 
                        ContentType = 'application/json'       
                } 
                
                        if ($DEBUG) { write-host $request.Uri };
                        if ($DEBUG) { write-host @params };
                
                        try {
                                $obj = Invoke-RestMethod @params
                                $Items = $obj.items;
                                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                                return $Items;
                        }
                        catch [System.Net.Http.HttpRequestException] {
                                $Request = $_.Exception
                                Write-host "Error trying to connect to $FlashBlade "
                                Get-InternalHTTPError;
                        }
                        catch {
                                $Request = $_.Exception
                                Write-host "Catchall Exception caught: $Request"
                                Get-InternalCatchAllError;
                        }
                        Finally { 
                                $Token = $(Get-InternalPfbAuthToken);
                                Get-InternalPfbAuthTokenLogout $Token;
                        }
}

function Get-PfbObjectStoreAccount()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Total_Only 
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5; 
        write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/object-store-accounts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Add-PfbObjectStoreAccount()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-accounts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };

                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbObjectStoreAccount()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-accounts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbObjectStoreUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Total_Only 
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5; 
        write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/object-store-users";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Add-PfbObjectStoreUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/object-store-users";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbObjectStoreUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-users";   
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbObjectStoreVirtualHosts()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5; 
        write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/object-store-virtual-hosts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Add-PfbObjectVirtualHosts()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/object-store-virtual-hosts";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbObjectStoreVirtualHosts()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-virtual-hosts";   
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
function Get-PfbObjectStoreRC()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($Limit -gt 5)  { $Limit = 5; 
        write-host "Limit set to max of 5 due to API policy";}
                
        $url = "/api/$ApiVers/object-store-remote-credientials";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 

        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Add-PfbObjectStoreRC()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/object-store-remote-credentials";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Update-PfbObjectStoreRC()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/object-store-remote-credentials";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Remove-PfbObjectStoreRC()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/object-store-remote-credentials";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}
function Get-PfbPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }    
}

function Add-PfbPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);

if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()


$params = @{
        SkipCertificateCheck = $skipcert
        Method  = 'POST' 
        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
        Uri = $request.Uri
        Body = (ConvertTo-JSON $body) 
        ContentType = 'application/json'       
} 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Update-PfbPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $Names = $null
);

if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

$params = @{
        SkipCertificateCheck = $skipcert
        Method  = 'PATCH' 
        Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
        Uri = $request.Uri
        Body = (ConvertTo-JSON $body) 
        ContentType = 'application/json'       
} 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Remove-PfbPolicies()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Get-PfbPoliciesFileSystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies/file-systems";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names', $MemberNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Add-PfbPoliciesFileSystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null
);

if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/policies/file-systems";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names', $MemberNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Remove-PfbPoliciesFileSystem()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/policies/file-systems";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));
        
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names', $MemberNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Get-PfbPoliciesFileSystemReplicaLinks()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies/file-system-replica-links"
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($LocalFSIDs) {
                $uri.Add('local_file_system_ids' , $LocalFSIDs)
        }
        if ($LocalFSNames) {
                $uri.Add('local_file_system_names' , $LocalFSNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($RemoteIDs) {
                $uri.Add('remote_ids', $RemoteIDs)
        }
        if ($RemoteNames) {
                $uri.Add('remote_names', $RemoteNames)
        }
        if ($RemoteFSIDs) {
                $uri.Add('remote_file_system_ids', $RemoteFSIDs)
        }
        if ($RemoteFSNames) {
                $uri.Add('remote_file_system_names', $RemoteFSNames)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }

        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Add-PfbPoliciesFileSystemReplicaLinks()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/policies/file-system-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($LocalFSIDs) {
                $uri.Add('local_file_system_ids' , $LocalFSIDs)
        }
        if ($LocalFSNames) {
                $uri.Add('local_file_system_names' , $LocalFSNames)
        }
        if ($RemoteIDs) {
                $uri.Add('remote_ids', $RemoteIDs)
        }
        if ($RemoteNames) {
                $uri.Add('remote_names', $RemoteNames)
        }
        if ($RemoteFSIDs) {
                $uri.Add('remote_file_system_ids', $RemoteFSIDs)
        }
        if ($RemoteFSNames) {
                $uri.Add('remote_file_system_names', $RemoteFSNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Remove-PfbPoliciesFileSystemReplicaLinks()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $LocalFSNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $RemoteFSNames = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

        $url = "/api/$ApiVers/policies/file-system-replica-links";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($LocalFSIDs) {
                $uri.Add('local_file_system_ids' , $LocalFSIDs)
        }
        if ($LocalFSNames) {
                $uri.Add('local_file_system_names' , $LocalFSNames)
        }
        if ($RemoteIDs) {
                $uri.Add('remote_ids', $RemoteIDs)
        }
        if ($RemoteNames) {
                $uri.Add('remote_names', $RemoteNames)
        }
        if ($RemoteFSIDs) {
                $uri.Add('remote_file_system_ids', $RemoteFSIDs)
        }
        if ($RemoteFSNames) {
                $uri.Add('remote_file_system_names', $RemoteFSNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbPoliciesFileSystemSnapshot()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies/file-system-snapshots";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names', $MemberNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Get-PfbPoliciesMember()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $MemberIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $PolicyIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/policies/members";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($MemberNames) {
                $uri.Add('member_names', $MemberNames)
        }
        if ($MemberIDs) {
                $uri.Add('member_ids', $MemberIDs)
        }
        if ($PolicyNames) {
                $uri.Add('policy_names', $PolicyNames)
        }
        if ($PolicyIDs) {
                $uri.Add('policy_ids', $PolicyIDs)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbQuotaGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/quotas/groups";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()
      
        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }        
}

function Add-PfbQuotaGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemName = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupName = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

$body = " { 'quota': $Quota } " ;         

        $url = "/api/$ApiVers/quotas/groups";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemName) {
                $uri.Add('file_system_names', $FileSystemName)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($GroupName) {
                $uri.Add('group_names', $GroupName)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Update-PfbQuotaGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

$body = " { 'quota': $Quota } " ;         

        $url = "/api/$ApiVers/quotas/groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Remove-PfbQuotaGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}    

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

        $url = "/api/$ApiVers/quotas/groups";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbQuotaUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}
        
if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

        $url = "/api/$ApiVers/quotas/users";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($UserNames) {
                $uri.Add('user_names', $UserNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Add-PfbQuotaUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$body = " { 'quota': $Quota } " ;

        $url = "/api/$ApiVers/quotas/users";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($UserNames) {
                $uri.Add('user_names', $UserNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Update-PfbQuotaUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$body = " { 'quota': $Quota } " ;

        $url = "/api/$ApiVers/quotas/users";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($UserNames) {
                $uri.Add('user_names', $UserNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Remove-PfbQuotaUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FileSystemName = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Quota = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}          

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

        $url = "/api/$ApiVers/quotas/users";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemName) {
                $uri.Add('file_system_names', $FileSystemName)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($UserNames) {
                $uri.Add('user_names', $UserNames)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbRoles()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32]  $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $IDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32]  $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/roles";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($IDs) {
                $uri.Add('ids', $IDs)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbUsageGroup()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/usage/groups";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbUsageUser()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 
        
$url = "/api/$ApiVers/usage/users";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($UIDs) {
                $uri.Add('uids', $UIDs)
        }
        if ($UserNames) {
                $uri.Add('user_names', $UserNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Get-PfbAdmin()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Expose ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 
                
$url = "/api/$ApiVers/admins";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Expose) {
                $uri.Add('expose', $Expose)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Update-PfbAdmin()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Admin = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $ApiTokenTimout = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $CreateApiToken ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $DeleteApiToken ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][securestring] $OldPassword = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][securestring] $Password = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
$url = "/api/$ApiVers/admins";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Admins) {
                $uri.Add('admins', $Admins)
        }
      
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbAdminCache()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Refresh = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/admins/cache";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Expose) {
                $uri.Add('expose', $Expose)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Remove-PfbAdminCache()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/admins/cache";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbSupport()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $TestType = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][boolean] $Test
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

if ($Test) {
        $url = "/api/$ApiVers/support/test";
} Else {
        $url = "/api/$ApiVers/support";
}

$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($TestType) {
                $uri.Add('test_type' , $TestType)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Update-PfbSupport()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null
);

if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}      

if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
}        else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}
                
$url = "/api/$ApiVers/support";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
  
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()
               
        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'Patch' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }
}

function Get-PfbTargets()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Refresh = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/targets";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Expose) {
                $uri.Add('expose', $Expose)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Add-PfbTargets()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

$url = "/api/$ApiVers/targets";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
       
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'POST' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Update-PfbTargets()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Attributes = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $InputFile = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 
if ($InputFile) { 
        $body = Get-Content -Raw $InputFile | out-string | ConvertFrom-Json -AsHashtable;
} else {
        $body = (ConvertFrom-Json $Attributes -AsHashtable);
}

$url = "/api/$ApiVers/targets";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
       
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Remove-PfbTargets()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 


$url = "/api/$ApiVers/targets";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
       
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'DELETE' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

function Get-PfbUsageGroups()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GroupNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $GIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/usage/groups";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()
      
        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }        
}

function Get-PfbUsageUsers()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Limit = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][string] $FileSystemNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UserNames = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $UIIDs = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int32] $Start = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}
                
        $url = "/api/$ApiVers/usage/users";
        $headers = @{};
        $headers.Add("x-auth-token", $(Get-InternalPfbAuthToken));

        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($FileSystemNames) {
                $uri.Add('file_system_names', $FileSystemNames)
        }
        if ($GIDs) {
                $uri.Add('gids', $GIDs)
        }
        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($GroupNames) {
                $uri.Add('group_names', $GroupNames)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        } 
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()
      
        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
        }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }        
}

function Get-PfbTargetsPerformanceReplication()
{

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,  
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $EndTime,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Filter = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Ids = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Names = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64]  $Limit,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][int64] $Resolution,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Sort = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][Int64]  $Start ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string]  $StartTime ,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Token = $null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][bool] $Total_Only 
)
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
};

$MinAPIVers = 1.9
Test-APIVersion ($ApiVers, $MinAPIVers)

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
}

        $url = "/api/$ApiVers/target/performance/replication";
        $link = "https://$FlashBlade$url";
        $uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Names) {
                $uri.Add('names', $Names)
        }
        if ($Ids) {
                $uri.Add('ids', $Ids)
        }
        if ($Filter) {
                $uri.Add('filter', $Filter)
        }
        if ($Sort) {
                $uri.Add('sort' , $Sort)
        }
        if ($Start) {
                $uri.Add('start' , $Start)
        }
        if ($Limit) {
                $uri.Add('limit' , $Limit)
        }
        if ($Token) {
                $uri.Add('token' , $Token)
        }
        if ($Total_Only) {
                $uri.Add('total_only' , $Total_Only)
        }
        if ($EndTime) {
                $uri.Add('end_time' , (Get-PfbDateSinceEpoc -MyDate ($EndTime)))
        }
        if ($StartTime) {
                $uri.Add('start_time' , (Get-PfbDateSinceEpoc -MyDate ($StartTime)))
        }

        if ($Resolution) {
                $uri.Add('resolution' , $Resolution)
        }

        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 
        
                if ($DEBUG) { write-host $request.Uri };
                if ($DEBUG) { write-host @params };
        
                try {
                        $obj = Invoke-RestMethod @params
                        $Items = $obj.items;
                        if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                        if ($DEBUG) {Write-Host '---------------------------------------------------'};
                        return $Items;
                }
                catch [System.Net.Http.HttpRequestException] {
                        $Request = $_.Exception
                        Write-host "Error trying to connect to $FlashBlade "
                        Get-InternalHTTPError;
                }
                catch {
                        $Request = $_.Exception
                        Write-host "Catchall Exception caught: $Request"
                        Get-InternalCatchAllError;
                }
                Finally { 
                        $Token = $(Get-InternalPfbAuthToken);
                        Get-InternalPfbAuthTokenLogout $Token;
                }
}

function Get-PfbZTP()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $Name = $null
);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/setup/validation";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)

        if ($Name) {
                $uri.Add('names', $Name)
        }
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'GET' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                if ($DEBUG) {Write-Host 'Logout'};
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}


function Update-PfbZTP()
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $FlashBlade,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $ApiToken,
  [Parameter(Mandatory=$FALSE)][ValidateNotNullOrEmpty()][string] $SkipCertificateCheck =$null,
  [Parameter(Mandatory=$TRUE)][ValidateNotNullOrEmpty()][boolean] $Complete

);
if (!$FlashBlade) {
        $myreturn = $(Get-InternalPfbJson);
        $FlashBlade = $myreturn[0]
        $ApiToken = $myreturn[1]
        $ApiVers = $myreturn[2]
        $SkipCertificateCheck = $myreturn[3]
}

if ($SkipCertificateCheck -eq 'true') {
        $PSDefaultParameterValues=@("Invoke-RestMethod:SkipCertificateCheck",$true)
        if ($DEBUG) {write-host "Skipping the Certificate Check $SkipCertificateCheck"}
        $skipcert=$True
} 

$url = "/api/$ApiVers/setup/finalization";
$link = "https://$FlashBlade$url";
$uri = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
        
        $request = [System.UriBuilder]$link
        $request.Query = $uri.ToString()

        $body = @{setup_completed = "True"};
        $params = @{
                SkipCertificateCheck = $skipcert
                Method  = 'PATCH' 
                Headers = @{ 'x-auth-token' = $(Get-InternalPfbAuthToken)} 
                Uri = $request.Uri
                Body = (ConvertTo-JSON $body) 
                ContentType = 'application/json'       
        } 

        if ($DEBUG) { write-host $request.Uri };
        if ($DEBUG) { write-host @params };

        try {
                $obj = Invoke-RestMethod @params
                $Items = $obj.items;
                if ($DEBUG) {Write-Host ("Running function: {0} " -f $MyInvocation.MyCommand)};
                if ($DEBUG) {Write-Host '---------------------------------------------------'};
                return $Items;
        }
        catch [System.Net.Http.HttpRequestException] {
                $Request = $_.Exception
                Write-host "Error trying to connect to $FlashBlade "
                Get-InternalHTTPError;
                }
        catch {
                $Request = $_.Exception
                Write-host "Catchall Exception caught: $Request"
                Get-InternalCatchAllError;
        }
        Finally { 
                $Token = $(Get-InternalPfbAuthToken);
                Get-InternalPfbAuthTokenLogout $Token;
        }    
}

#==================================================================================================================

#New-Alias -Name Get-PfbArrayCPR -Value Get-PfbArrayConnectionsPerformanceReplication
#New-Alias -Name Get-PfbTargetPR -Value Get-PfbTargetPerformanceReplication
Export-ModuleMember -Function Start-Pfb* -Alias *
Export-ModuleMember -Function Get-Pfb* -Alias *
Export-ModuleMember -Function Add-Pfb* -Alias *
Export-ModuleMember -Function Update-Pfb* -Alias *
Export-ModuleMember -Function Remove-Pfb* -Alias *