【发布时间】:2011-11-10 14:16:49
【问题描述】:
我有一个类似这样的功能:
function A-Function{
[CmdletBinding(SupportsShouldProcess=$True)]
param (
[Parameter(Position=0, HelpMessage="A Test string", Mandatory=$true)]
[string]$Path,
[Parameter(Position=1, HelpMessage="The list of file names to download.", ValueFromPipeline=$True)]
[string[]]$testVar,
[Parameter(HelpMessage= "The username")]
[string]$User,
[Parameter(HelpMessage= "The password")]
[string]$Password,
[Parameter(HelpMessage= "The credentials used.")]
[Net.NetworkCredential]$Credential = (New-Object Net.NetworkCredential("Anonymous", ""))
)
Begin {
$Path = "TEST_" + $Path
if ($User) {
if ($Password) {
$Credential = New-Object Net.NetworkCredential($User, $Password)
}
}
}
Process {
$Path
$Credential
}
End {
}
}
如果我运行“A-Function test -User test -Password -test”,我会得到输出:
TEST_test
用户名密码 SecurePassword 域
-------- -------- -------------- ------
测试测试 System.Security.SecureString
这是我预期的输出。但是,如果我改为运行此命令:
“测试”| A-功能测试-用户测试-密码-测试
我得到了这个输出:
TEST_test
用户名密码 SecurePassword 域
-------- -------- -------------- ------
匿名 System.Security.SecureString
换句话说,在第二种情况下,它没有改变 Begin 部分中的 Credential 参数的值,但在第一种情况下,它改变了。我不明白这是为什么,有人可以解释一下吗?
问候
【问题讨论】:
标签: function powershell arguments