所以我创建了一个函数,它按照建议的指导方针工作。但是,我的脚本有一个问题。我有一个函数,其中参数在函数之后。但我想让参数成为代码块上方脚本中的第一件事,就像在这个例子中一样:
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'
}
}
}
}
}
答案 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