Functions/Report/Get-SONasShares.psm1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#region: Get-SONasShares
<#
    .Synopsis
    Lists all NAS Stores from your StoreOnce system(s).
 
    .Description
    Lists all NAS Stores from your StoreOnce system(s).
 
    .Example
    Get-SONasShares
 
#Requires PS -Version 4.0
#>

function Get-SONasShares {
    [CmdletBinding()]
    param (
    
    )
    Process {
        if (!$Global:SOConnections) {throw "No StoreOnce Appliance(s) connected! Use 'Connect-SOAppliance'"}
        $SONasShares =  @()
        
        ForEach ($SOConnection in $($Global:SOConnections)) {
            if (Test-IP -IP $($SOConnection.Server)) {
                $SIDCall = @{uri = "https://$($SOConnection.Server)/storeonceservices/cluster/servicesets/";
                            Method = 'GET';
                            Headers = @{Authorization = 'Basic ' + $($SOConnection.EncodedPassword);
                                        Accept = 'text/xml'
                            } 
                        } 
                
                $SIDsResponse = Invoke-RestMethod @SIDCall
                $SIDCount = ($SIDsResponse.document.servicesets.serviceset).count
                if ($SIDCount -eq $null) {$SIDCount = 1}
                
                for ($x = 1; $x -le $SIDCount; $x++ ){
                    $ShareInf = @{uri = "https://$($SOConnection.Server)/storeonceservices/cluster/servicesets/$x/services/nas/shares/";
                                Method = 'GET';
                                Headers = @{Authorization = 'Basic ' + $($SOConnection.EncodedPassword);
                                            Accept = 'text/xml'
                                } 
                            } 
                    
                    $ShareInfResponse = Invoke-RestMethod @ShareInf
                    [Array] $Name = $ShareInfResponse.document.shares.share.properties.name
                    [Array] $ID = $ShareInfResponse.document.shares.share.properties.id
                    [Array] $AccessProtocol = $ShareInfResponse.document.shares.share.properties.accessProtocol
                    [Array] $SSID = $ShareInfResponse.document.shares.share.properties.ssid
                    [Array] $UserDataStored = $ShareInfResponse.document.shares.share.properties.userdatastored
                    [Array] $SizeOnDisk = $ShareInfResponse.document.shares.share.properties.sizeondisk
                    [Array] $DDRate = $ShareInfResponse.document.shares.share.properties.deduperatio
                    $ShareCount = ($Name).count
                
                    for ($i = 0; $i -lt $ShareCount; $i++ ){        
                        $row = [PSCustomObject] @{
                            System = $($SOConnection.Server)
                            SIDCount = [String] $SIDCount
                            SSID = $SSID[$i]
                            Name = $Name[$i]
                            ID = $ID[$i]
                            AccessProtocol = $AccessProtocol[$i]
                            "SizeOnDisk(GB)" = ([math]::Round(($SizeOnDisk[$i]),2))
                            "UserDataStored(GB)" = ([math]::Round(($UserDataStored[$i]),2))
                            DedupeRatio = $DDRate[$i]
                        }
                        $SONasShares += $row
                    }
                }
            }
        } 
            
    Return $SONasShares
    }
}
#endregion