2013-02-15 15 views
5

Paramizi alan ve işlevleri kullanan bir powershell komut dosyası yazmak istiyorum. Params * ve * işlevlerine sahip Powershell komut dosyası

bu çalıştı:

param 
(
    $arg 
) 

Func $arg; 


function Func($arg) 
{ 
    Write-Output $arg; 
} 

ama bu var:

The term 'Func' is not recognized as the name 
of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again. 
At func.ps1:6 char:5 
+ Func <<<< $arg; 
    + CategoryInfo   : ObjectNotFound: (Func:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

İnce, diye düşündüm.

function Func($arg) 
{ 
    Write-Output $arg; 
} 


param 
(
    $arg 
) 

Func $arg; 

Ama sonra, bu var: Bunun yerine bu çalışacağım

The term 'param' is not recognized as the name 
of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again. 
At C:\Users\akina\Documents\Work\ADDC\func.ps1:7 char:10 
+  param <<<< 
    + CategoryInfo   : ObjectNotFound: (param:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

Ben yapılabilir için soruyorum var mı? Yoksa isteğimle mantıksız mıyım?

+2

Bir powershell komut dosyasının sırası genellikle, 1) Params, 2) İşlevler 3) İşlev çağrıları/yürütme için cmdlet'ler. –

+0

Christopher Ranney, bu yararlı bir özetleme. Bunu bir soru olarak göndermiş olsaydınız, onu oylardım. –

+0

Kalbiniz çok arzulanırsa yorumları oylayabilirsiniz. :) –

cevap

19

Bir komut dosyasındaki param bloğu, ilk yorumsuz kod olmalıdır. Bundan sonra onu çağırmak için önce işlevini tanımlamak gerekir ör .:

param 
(
    $arg 
) 

function Func($arg) 
{ 
    $arg 
} 

Func $arg 

varsayılan davranış çıktı akımına çıkış nesnelere olduğundan Yaz-Çıktı sizin örnekte gereksizdir.

+0

Ve eğer bu fonksiyon tanımını bir Modüle taşıyoruz ve bunu makinemize aktarırsak, o zaman Otejayi'nin yapmaya çalıştığı gibi diyoruz? –

+0

@FarrukhWaheed Aynı şey bir modül için de geçerlidir. Muhtemelen tipik bir durum olmasa da, bir PSM1, parametreleri tanımlayabilir ve normal bir betik dosyası gibi (sadece fucnctions tanımlamakla kalmaz) kodu çalıştırabilir. –

-2

Sen

şey böyle .. işlevi içinde param etiketini koyabilirsiniz:

function func($avg) 
{ 
    param 
    (
     $avg 
    ) 
} 
3

Tüm Emin PARAM senaryonuzun ilk dize yapmak için IUS gerekir.

İlgili konular