use*_*541 20 parameters powershell function windows-7
有没有办法在PowerShell函数中创建一个参数,你必须调用它才能考虑它?
由命令行开关给出的示例(粗体是我想要做的):
Invoke-Command -computername Server01 -Scriptblock {...}
这是我想要对该功能做什么的一个例子
Function DoStuff($computername, -arg2, -domain $domain)
Test-parameter(-domain) if (-domain -eq $true) {
use $domain
}
Else {
$domain = "Domain1"
}
test-parameter($arg2) {
if ($arg2 -eq $true) {
Do something
}
else {
Do the opposite
}
}
Run Code Online (Sandbox Code Playgroud)
总结如下:
如果存在"-arg2",我希望在脚本中发生一些事情.如果"-Domain"存在并且有一个参数,我希望使用它而不是set参数.
lat*_*kin 29
Powershell为常见的参数场景提供了大量内置支持,包括强制参数,可选参数,"switch"(aka flag)参数和"参数集".
默认情况下,所有参数都是可选的.最基本的方法是简单地检查每一个$null,然后从那里实现你想要的任何逻辑.这基本上就是您在示例代码中显示的内容.
如果您想了解Powershell可以为您提供的所有特殊支持,请查看以下链接:
about_Functions_Advanced_Parameters
nim*_*zen 17
我认为你的问题不是很清楚,这段代码假设如果你要包含-domain参数,它总是'命名'(即dostuff computername arg2 -domain domain); 这也使computername参数成为必需参数.
Function DoStuff(){
param(
[Parameter(Mandatory=$true)][string]$computername,
[Parameter(Mandatory=$false)][string]$arg2,
[Parameter(Mandatory=$false)][string]$domain
)
if(!($domain)){
$domain = 'domain1'
}
write-host $domain
if($arg2){
write-host "arg2 present... executing script block"
}
else{
write-host "arg2 missing... exiting or whatever"
}
}
Run Code Online (Sandbox Code Playgroud)
不确定我是否正确理解了这个问题.
从我收集的内容中,您希望能够为Domain分配值(如果它为null)以及检查是否提供了$ args2并根据该值执行某个代码?
我更改了代码以重新组合上面的假设.
Function DoStuff($computername, $arg2, $domain)
{
if($domain -ne $null)
{
$domain = "Domain1"
}
if($arg2 -eq $null)
{
}
else
{
}
}
DoStuff -computername "Test" -arg2 "" -domain "Domain2"
DoStuff -computername "Test" -arg2 "Test" -domain ""
DoStuff -computername "Test" -domain "Domain2"
DoStuff -computername "Test" -arg2 "Domain2"
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?