我努力将我的论点传递给我的定制函数。
这很好用:
Delete-OldFiles -Target $Target -OlderThanDays $OlderThanDays -LogName Auto_Clean.log
这些根本不起作用:
# (using -ScriptBlock ${Function:Delete-OldFiles} for all calls)
Invoke-Command -ArgumentList ( ".$Target", ".$OlderThanDays", ".$LogName Auto_Clean.log")
Invoke-Command -ArgumentList @("$Target", "$OlderThanDays", "Auto_Clean.log")
Invoke-Command -ArgumentList @({-OlderThanDays "10", -Target "E:\Share\Dir1", -LogName "Auto_Clean.log"})
Invoke-Command -ArgumentList (,@('$Target','$OlderThanDays','Auto_Clean.log'))
您能否帮助我正确传递以下参数:
Param(
[Parameter(Mandatory=$False,Position=1)]
[String]$Server,
[Parameter(Mandatory=$True,Position=2)]
[ValidateScript({Test-Path $_})]
[String]$Target,
[Parameter(Mandatory=$True,Position=3)]
[Int]$OlderThanDays,
[Parameter(Mandatory=$True,Position=4)]
[String]$LogName,
[switch]$CleanFolders
)
答案 0 :(得分:4)
使用Invoke-Command -ArgumentList
时,会将参数作为位置参数传递给脚本块。看着你param()
块:它的设计并没有考虑位置参数......首先是可选参数,后面是必需参数意味着你总是需要提供可选参数,或者对所有必需参数使用命名参数。 / p>
换句话说:在第一个位置使用可选参数将阻止您以Invoke-Command
的方式运行此代码。
要在本地测试您的代码,您应该尝试这种方式:
Delete-OldFiles $Target $OlderThanDays "Auto_Clean.log"
我希望它会提示您LogName
参数。