Search code examples
arrayspowershellnetapp

Unable to Return output from function


function Get-NaLUNbyMap {
<#
.DESCRIPTION
Gets Lun Information for a particular initiatorgroup name & lunid
.EXAMPLE
Get-Inventory -computername server-r2
.EXAMPLE
Import-Module NaLUNbyMap
Get-NaLUNbyMap -igroup "IA" -lunid 1
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[string[]]$igroup,
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[string[]]$lunid
)
Process 
{ 

$info = (Get-NaLun |Select @{Name="LUN";Expression={$_.path}},@{Name="Size";Expression={[math]::Round([decimal]$_.size/1gb,0)}},@{Name="OnlineStatus";Expression={$_.online}},@{Name="Group";Expression={([string]::Join(",",(Get-NaLun $_.path | get-nalunmap | select -ExpandProperty initiatorgroupname)))}},@{Name="LunID";Expression={Get-NaLun $_.path | get-nalunmap | select -ExpandProperty lunid}} | ?{$_.group -eq $igroup -and $_.lunid -eq $lunid})
return $info
}
}

Hi Im unable to return output from this function, can some one please help me out!


Solution

  • That is some ugly code. :(

    Here is a cleaned up version. I think I found your problem. Your parameters are arrays, when they should be single values based on how you are using them.

    function Get-NaLUNbyMap {
        <#
        .DESCRIPTION
        Gets Lun Information for a particular initiatorgroup name & lunid
        .EXAMPLE
        Get-Inventory -computername server-r2
        .EXAMPLE
        Import-Module NaLUNbyMap
        Get-NaLUNbyMap -igroup "IA" -lunid 1
        #>
        [CmdletBinding()]
        param(
            [Parameter(Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
            [string]$igroup
            ,
            [Parameter(Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
            [string]$lunid
        )
    
        process { 
            $Luns = foreach ($Lun in Get-NaLun) {
                $LunMap = Get-NaLunMap $_.Path
    
                New-Object PSObject -Property @{
                    "LUN"= $_.Path
                    "Size" = [Math]::Round([Decimal]$_.Size / 1gb, 0)
                    "OnlineStatus" = $_.Online
                    "Group" = $LunMap | Select-Object -ExpandProperty InitiatorGroupName
                    "LunId" = $LunMap | Select-Object -ExpandProperty LunId
                }
            }
            $Luns | Where-Object {$_.Group -eq $igroup -and $_.LunId -eq $lunid}
        }
    }