2016-03-22 14 views
0

Ben bir array kelimelerden birini bir string olup olmadığını varsa gösterir aşağıdaki fonksiyonu:Powershell işlevi beklendiği gibi yürütme değil

function AnyOf ([string] $line, [string[]] $list) 
{ 
    Write-Output "AnyOf!" 
    foreach($item in $list) 
    { 
     if($line.Contains($item)) 
     { 
      Write-Output "Found: $item" 
      return $true 
     } 
    } 
    return $false 
} 

Ve bu test etmek:

function main 
{ 
    [string[]]$a = @("user1", "user2") 
    $str = "user1 and user2" 
    $res = AnyOf($str, $a) 
} 

Bastırılmak üzere user1 ve user2 görüntülerini görmesini beklerim ancak hiçbir şey yazdırılmaz. Write-Output "AnyOf!" hiçbir zaman çalıştırılmadığı için işlev çağrılmadığı anlaşılıyor. Ben neyim ... Ben işlevi denir görebilirsiniz

$res = AnyOf($str, $a) 

ancak yineleme gerçekleşmesi görünmüyor:

AnyOf($str, $a) 

yerine: Ancak

, ben yürüttüğünüzde yanlış mı yapıyorsun? , Powershell işlevleri standart kongre İkincisi $<<nameOfFunction>> <<param1>> <<param2>>

olduğunu

AnyOf $str $a

olarak işlevini çağırır () kullanılarak adlandırılır değil tüm

cevap

4

Birkaç şey,

Birincisi, çıkışınız $res'da yakalanır ve bu nedenle $res eklerseniz ekrana yazdırılmaz. main function’unuz çıktı verecektir.

Yani ana işlevi haline gelir:

function main 
{ 
    [string[]]$a = @("user1", "user2") 
    $str = "user1 and user2" 
    $res = $AnyOf $str $a 
    $res #or just don't assign it to $res.. 
} 


#to call main: 
main 

Output: 

AnyOf! 
Found: user1 
True 

o fonksiyonun dışarı çıkarken, bir eşleşme bulursa kez bir return $true kullandıkları için bunu User2 bulur asla yukarıdaki çıktıda görebileceğiniz gibi.

Unutulmaması gereken başka bir şey de return $false veya $true bu aslında beklenmedik davranışlara yol açabilir olarak istediğini olmayabilir çıktı akımının bir parçası olunca.

İlgili konular