使用自定义参数调用cmdlet

时间:2013-06-13 18:18:47

标签: powershell cmdlets

我有一个PowerShell脚本,某些用户可以调用它。该脚本以一些提升的权限运行,因此我需要确保它们不能使用它来绕过预期的行为。脚本的一个参数是一个字符串,它充当另一个cmdlet的参数。

因此,用户可能会提供字符串'-Day 4 -Year 1989 -Month 3'

然后在我的剧本中,我想要跑:Get-Date -Day 4 -Year 1989 -Month 3

现在我知道我可以通过Invoke-Expression执行此操作,但这会让我容易受到PowerShell注入(即:用户可以传入'-day 4; do-bad-stuff')

或者,我可以为Get-Date编写一个包装器,但这似乎很多工作,因为我实际调用的cmdlet(它不是Get-Date)有很多不同的参数,它看起来像很多努力将它们全部包装起来。他们无法调用该cmdlet可能会造成伤害(因为它是Get-xxx cmdlet)。

任何人都知道如何使用字符串作为参数来调用特定的cmdlet吗?

1 个答案:

答案 0 :(得分:1)

使用参数验证:

Function Foo 
{ 
    Param( 
        [ValidateRange(1,31)] 
        [String] 
        $day 
    , 
        [ValidateRange(1900,2013)] 
        [Int] 
        $Year 
    , 
        [ValidateRange(1,12)] 
        [string] 
        $Month 
    ) 
    Process 
    { 
         Get-Date -Day $day -Year $year -Month $month 
    } 
}

阅读herehere以了解改进验证