Data questa funzione di base:parametro vuoto non è nullo in funzione
Function TestFunction {
Param ([int]$Par1, [string]$Par2, [string]$Par3)
If ($Par1 -ne $Null) { Write-Output "Par1 = $Par1" }
If ($Par2 -ne $Null -or $Par2 -ne '') { Write-Output "Par2 = $Par2" }
If ($Par3 -ne $Null) { Write-Output "Par3 = $Par3" }
}
TestFunction -Par1 1 -Par3 'par3'
... l'output è:
Par1 = 1
Par2 =
Par3 = par3
Anche se non ho passare nulla nella variabile $Par2
, si ancora non è Nullo o vuoto. Cosa è successo e come posso riscrivere l'istruzione in modo che la seconda istruzione If valuti come False e il blocco di script non venga eseguito?
(ho aggiunto il -or $Par2 -ne ''
solo per prova, si comporta lo stesso con e senza di essa.)
E 'stato veloce. Ma cosa è IN '$ Par2'? Se passo un valore in esso, '$ Par2 -ne $ Null' sarà vero. Ma se non ci passo niente $ $ Par2 -ne $ Null' dovrebbe essere falso e non dovrebbe essere eseguito, giusto? Eppure, lo fa ... – Mark
Vedere la mia modifica. '$ Par2' sarà sempre una stringa perché l'hai inserita in una lista di argomenti della funzione. Inoltre, per il futuro, puoi ottenere il tipo di qualsiasi variabile usando il metodo 'GetType':' $ Par2.GetType() '. Ciò sarà di grande aiuto nel debugging. – iCodez
Quindi, poiché l'ho lanciato nel blocco parametri, esisterà sempre e quindi non sarà mai nullo? Anche se dovessi cambiare il valore predefinito in null ('[stringa] $ Par2 = $ Null')? E un intero sarà sempre 0? Quindi se dovessi passare nulla in '$ par1', allora' If ($ Par1) 'sarà vero perché contiene 0? Quindi, nel cercare di scrivere uno script migliore lanciando i tipi di variabile, in realtà l'ho reso più difficile per me stesso. – Mark