Public/Get-TsmFilespace.ps1

<#
.Synopsis
   Gets the TSM Filespaces that exist on a server.
.DESCRIPTION
   This cmdlet gets the TSM Filespaces that exist on a server.
   If you use the SchedName parameter, you must also pass the
   policy domain parameter.
.EXAMPLE
   Get-TsmFilespace
.EXAMPLE
   Get-TsmFilespace -PolicyDomain POLICYDOMAIN -SchedName SCHEDNAME
.EXAMPLE
   Get-TsmFilespace -PolicyDomain POLICYDOMAIN
.EXAMPLE
   Get-TsmFilespace POLICYDOMAIN SCHEDNAME
.EXAMPLE
   Get-TsmFilespace POLICYDOMAIN
.OUTPUTS
   PSCustomObject
#>

function Get-TsmFilespace
{
    [CmdletBinding(DefaultParametersetName='None')] 
    param( 
        [String]$UserName,
        [String]$Password,
        [String]$TCPServerAddress,
        [int]$TCPPort,
        [Parameter(ParameterSetName='Node',Mandatory=$true,Position=0)][string]$NodeName,
        [Parameter(ParameterSetName='Node',Mandatory=$false,Position=1)][string]$FilespaceName
    )

    Begin
    {
        $Nodes = @()
    }
    Process
    {

        #The parameterset above makes sure there is a policydomain, if there is a schedname
        #But you can have a policydomain without a schedname
        $TsmFilespaceCommand = "Query Filespace"
        If($NodeName) {
            if($FilespaceName) {
                $TsmFilespaceCommand = $TsmFilespaceCommand + " $NodeName" + " $FilespaceName"  + " nametype=unicode"
            }
            else {
                $TsmFilespaceCommand = $TsmFilespaceCommand + " $NodeName"
            }
        }

        
        try{
            $executeTSM = Invoke-TsmCommand -Command $TsmFilespaceCommand @psboundparameters
            $TsmFilespaces = ConvertFrom-Csv -Delimiter "`t" -InputObject $executeTSM -Header "NodeName", "FileSpaceName", "FSID" ,"Platform","Filespace Type","Unicode?","Capacity","PctUtil"

            Write-Output $TsmFilespaces
            
        }
        catch {
            Write-Error $_
        }

    }
    End
    {
    }
}