将参数传递给脚本

时间:2014-11-20 19:08:51

标签: parameters powershell-v3.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(" ")

            $out=@()
            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'
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Normal 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

因为所有参数都成为脚本范围内可用的变量。

在此示例中,如果在没有脚本的情况下调用脚本,$ server将获取默认值,如果省略-username参数,则脚本将停止,如果省略-password则请求终端输入。

更新:你不妨想传递一个"标志" PowerShell脚本(布尔值true / false参数)。例如,您的脚本可能会接受“#34; force"当不使用force时,脚本以更小心的模式运行。

关键字是[switch]参数类型:

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

在脚本内部,您可以像这样使用它:

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

现在,在调用脚本时,您可以像这样设置switch / flag参数:

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

如果您明确要声明未设置该标志,则该

有一种特殊语法
.\yourscript.ps1 -server "http://otherserver" -force:$false