2014-11-20 221 views
0

所以我創建了一個函數,它按照建議的指導原則工作。但是,我有一個腳本問題。我有一個參數在函數之後的函數。但我想有這些參數在代碼塊上面的腳本的第一件事情,就像這個例子:將參數傳遞給腳本

param(statement) 
body of script 

但是當我把我上面的代碼沒有任何參數發生了:

Function proper { 
    param([switch]$allcaps,[string]$title="") 
    if($allcaps) { 
     $title.ToUpper() 
    } else { 
     Foreach($string in $Title) { 
      $splitstr=$string.Split(" ") 

      [email protected]() 
      Foreach($word in $splitstr) { 

       $out+="{0}{1}" -f $word.Substring(0,1).ToUpper(),$word.substring(1).ToLower() 
       if($out -ne 1) { 
        $out = $out -replace 'A','a' 
        $out = $out -replace 'THE','the' 
        $out = $out -replace 'BUT','but' 
        $out = $out -replace 'OR','or' 

        $out = $out -replace 'AT' , 'at' 
        $out = $out -replace 'OF','of' 
        $out = $out -replace'TO','to' 
        $out = $out -replace'WITH','with' 
        $out = $out -replace'IN','in' 

        $out[0] = $out[0] -replace 'a','A' 
        $out[0] = $out[0] -replace 'the','The' 
        $out[0] = $out[0] -replace 'but', 'But' 
        $out[0] = $out[0] -replace'or','Or' 
        $out[0] = $out[0] -replace'at','At' 
        $out[0] = $out[0] -replace'of','Of' 
        $out[0] = $out[0] -replace'to','To' 
        $out[0] = $out[0] -replace'with','With' 
        $out[0] = $out[0] -replace'in','In' 
       } 
      } 
     } 
    } 
} 

回答

0

普通PowerShell腳本具有參數開始 - ,如:

script.ps1 -server http://devserver 

然後你處理它們在文件的開頭部分PARAM(參見教程:http://devcentral.f5.com/weblogs/Joe/archive/2009/01/13/powershell-abcs---p-is-for-parameters.aspx

您也可以默認值分配給您的參數,可以如果不能從控制檯讀取它們或停止執行腳本:因爲所有

param (
    [string]$server = "http://defaultserver", 
    [string]$username = $(throw "-username is required."), 
    [string]$password = $(Read-Host "Input password, please") 
) 

腳本可以在裏面只是

write-output $server 

參數成爲腳本範圍中可用的變量。

在這個例子中,$服務器獲取默認值,如果調用腳本時沒有它,如果你省略-username參數腳本停止並要求端子輸入如果省略-password。

更新:您可能也想通過一個「標誌」(一個true/false參數)到PowerShell腳本。例如,當不使用力時,腳本可能會接受腳本以更謹慎的模式運行的「強制」。

該關鍵字是[轉]參數類型:

param (
    [string]$server = "http://defaultserver", 
    [string]$password = $(Read-Host "Input password, please"), 
    [switch]$force = $false 
) 

劇本里面,那麼你會用它的工作是這樣的:

if ($force) { 
    //deletes a file or does something "bad" 
} 

現在,調用腳本的時候,你會設置開關/標誌參數,如下所示:

.\yourscript.ps1 -server "http://otherserver" -force 

如果您明確要聲明fl公司沒有設置,存在對

.\yourscript.ps1 -server "http://otherserver" -force:$false 
的特殊語法