Functions/Create/New-SOCatStore.psm1

#region: New-SOCatStore
<#
    .Synopsis
    Create a single StoreOnce Catalyst store on your StoreOnce system.
 
    .Description
    Create a single StoreOnce Catalyst store on a given Service Set on your StoreOnce system.
     
    .Parameter Server
    IP Address oder DNS Name of your StoreOnce system like defined via Connect-SOAppliance (check Get-SOConnections).
 
    .Parameter SSID
    Target Service Set for the new Store on your StoreOnce system.
 
    .Parameter SOCatStoreName
    Name for the new Store on your StoreOnce system.
 
    .Parameter SOCatStoreDesc
    Description for the new Store on your StoreOnce system.
 
    .Parameter Timeout
    Timeout for the Store creation process (Default is 30 Seconds).
 
    .Example
    New-SOCatStore -Server 192.168.2.1 -SSID 1 -SOCatStoreName MyNewStore
 
#Requires PS -Version 4.0
#>

function New-SOCatStore {
    [CmdletBinding()]
    param (
        [parameter(Mandatory=$true, Position=0)]
        [ValidateNotNullOrEmpty()]
            [String]$Server,
        [parameter(Mandatory=$true, Position=1)]
        [ValidateNotNullOrEmpty()]
            [String]$SSID,
        [parameter(Mandatory=$true, Position=2)]
        [ValidateNotNullOrEmpty()]
            [String]$SOCatStoreName,
        [parameter(Mandatory=$false, Position=3)]
            [String]$SOCatStoreDesc = $SOCatStoreName,
        [parameter(Mandatory=$false, Position=4)]
            [Int]$Timeout = 30
            
    )
    Process {
        if (!$Global:SOConnections) {throw "No StoreOnce Appliance(s) connected! Use 'Connect-SOAppliance'"}
        if ($Server.count -gt 1) {throw "This Command only Supports one D2D System."}
        $Connection = $Global:SOConnections | Where {$_.Server -eq $Server}
        if (!$Connection) {throw "No D2D System found, check Get-SOConnections."}
        if ($Connection.count -gt 1) {throw "This Command only Supports one D2D System. Multiple Matches for $Server found..."}

        if (Test-IP -IP $($Connection.Server)) {
            if (Get-SOCatStores | where {$_.Name -eq $SOCatStoreName -and $_.System -eq $($Connection.Server)}) {throw "Store $SOCatStoreName already Exists."}
            $StoreCall = @{uri = "https://$($Connection.Server)/storeonceservices/cluster/servicesets/$SSID/services/cat/stores/";
                            Method = 'POST';
                            Headers = @{Authorization = 'Basic ' + $($Connection.EncodedPassword);
                                        Accept = 'text/xml';
                                        'Content-Type' = 'application/x-www-form-urlencoded'
                            }
                            Body = @{name = $SOCatStoreName;
                                    description = $SOCatStoreDesc;
                                    primaryTransferPolicy = '0';
                                    secondaryTransferPolicy = '1';
                                    userDataSizeLimitBytes = '0';
                                    dedupedDataSizeOnDiskLimitBytes = '0';
                                    dataJobRetentionDays = '90';
                                    inboundCopyJobRetentionDays = '90';
                                    outboundCopyJobRetentionDays = '90';
                                    encryption = 'false'
                            } 
                        } 
            
            $StoreResponse = Invoke-RestMethod @StoreCall
            
            $i = 0
            while(!(Get-SOCatStores | where {$_.Name -eq $SOCatStoreName -and $_.System -eq $($Connection.Server) -and $_.Status -eq "Online"})){
                $i++
                Start-Sleep 1
            if($i -gt $Timeout) { Write-Error "Creating Store Failed."; break}
                Write-Progress -Activity "Creating Store" -Status "Wait for Store become Online..."
            }
        }

        Return (Get-SOCatStores | where {$_.Name -eq $SOCatStoreName -and $_.System -eq $($Connection.Server)} | ft * -AutoSize)
    }
}
#endregion