2015-05-12 16 views
6

Ho un problema in uno script PowerShell:Passando tabella hash come argomento di una funzione in PS

Quando voglio passare un Hashtable a una funzione, questa tabella hash non è riconosciuto come una tabella hash.

function getLength(){ 
    param(
     [hashtable]$input 
    ) 

    $input.Length| Write-Output 
} 

$table = @{}; 

$obj = New-Object PSObject;$obj | Add-Member NoteProperty Size 2895 | Add-Member NoteProperty Count 5124587 
$table["Test"] = $obj 



$table.GetType() | Write-Output ` Hashtable 
$tx_table = getLength $table `Unable to convert System.Collections.ArrayList+ArrayListEnumeratorSimple in System.Collections.Hashtable 

Perché?

risposta

12

$Input è un automatic variable che enumera l'input fornito.

scegliere qualsiasi altro nome della variabile e che funzionerà - anche se non necessariamente come ci si potrebbe aspettare - per ottenere il numero di voci in una tabella hash è necessario controllare la proprietà Count:

function Get-Length { 
    param(
     [hashtable]$Table 
    ) 

    $Table.Count 
} 

Write-Output è implicito quando lasci il $Table.Count così com'è.

Inoltre, il () suffisso il nome della funzione non è necessaria zucchero sintattico di significato zero quando si dichiara i parametri in linea con Param() - cadere

+0

OMG. Grazie per la soluzione e i consigli. – Alsatian

Problemi correlati