Если вы сделаете
trace-command parameterbinding {"Test" | A-Function test -User test -Password test} -pshost
, вы увидите, что $ credential, поскольку он не передается в качестве аргумента функции, он связывается со значением по умолчанию каждый раз во время process
.Path, с другой стороны, привязывается только один раз, поскольку вы передаете его функции, и, следовательно, изменения, которые вы делаете в начале, доступны в процессе.
Это определенно ошибка / что-то не совсем оптимальное, так какэто не воспроизводится в Powershell v3.В v3 вы получаете желаемый результат проверки учетных данных, а не анонимных.
Пока вы можете это исправить, конечно, используя локальную переменную в начале или определяя существующие с помощью $script:Path
и т. Д .:
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 {
$script:Path = "TEST_" + $Path
if ($User) {
if ($Password) {
$script:Credential = New-Object Net.NetworkCredential($User, $Password)
}
}
}
Process {
$script:Path
$script:Credential
}
End {
}
}
"Test" | A-Function test -User test -Password test