Powershell验证范围参数错误

时间:2018-09-27 16:07:40

标签: powershell powershell-v2.0

我有一个脚本可以自动执行Windows USMT备份,但是我遇到了Powershell 2.0的问题。基本上,我有一个脚本参数,它需要一个正整数,并且验证在Powershell 3.0+中有效,而在Windows 7中附带的2.0中则无效。

参数代码:

[CmdletBinding()]
Param (
    [ValidateScript({
        if( -Not ($_ | Test-Path) ){
            throw "File or folder does not exist"
        }
        if($_ | Test-Path -PathType Leaf){
            throw "The Path argument must be a folder. file paths are not allowed."
        }
        if( -not (($_ | Get-ChildItem | Measure-Object).Count -eq 0) ) {
            throw "The Folder '$_' Has Content/Files! USMT will not run against a non-empty backup folder!!"
        }
        return $true
    })]
    [System.IO.FileInfo]$BackupPath,

    [switch]$OfflineUSBDock,

    [ValidateRange(1, [int]::MaxValue)][int]$UEL
)

错误:enter image description here

所以我的问题是如何解决此问题以使其在Powershell 2.0中正常工作?我们的目标是使$ UEL参数仅接受一个正整数。

Full Script

1 个答案:

答案 0 :(得分:0)

这里有2条评论的解决方法(感谢@TheIncorrigible 建议):

[ValidateScript({
    if ($_ -eq 0) {
        throw "UEL requires a positive integer greater then 0!"
    }
    return $true
})]    
[uint32]$UEL

 [ValidateRange(1, 2147483647)][int]$UEL

虽然不如使用[int]::MaxValue干净,但是可以完成工作。