PowerShell Invoke-Command Argumentlist

时间:2014-05-26 13:45:03

标签: powershell arguments

我努力将我的论点传递给我的定制函数。

这很好用:

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
)

1 个答案:

答案 0 :(得分:4)

使用Invoke-Command -ArgumentList时,会将参数作为位置参数传递给脚本块。看着你param()块:它的设计并没有考虑位置参数......首先是可选参数,后面是必需参数意味着你总是需要提供可选参数,或者对所有必需参数使用命名参数。 / p>

换句话说:在第一个位置使用可选参数将阻止您以Invoke-Command的方式运行此代码。

要在本地测试您的代码,您应该尝试这种方式:

Delete-OldFiles $Target $OlderThanDays "Auto_Clean.log"

我希望它会提示您LogName参数。