强类型检查函数参数中声明的不存在的文件

时间:2015-11-04 11:36:48

标签: powershell

我正在编写一个对文件执行某些操作的PowerShell函数,该文件的路径作为参数传递给该函数。我是强类型和参数验证的粉丝所以不要只是将文件路径作为System.String传递,而是像我这样定义参数:

[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[System.Management.Automation.PathInfo]$PathInfo

通常我会在调用代码中使用Resolve-Path来获取我可以传递给此参数的System.Management.Automation.PathInfo类型的对象,但是在这种情况下,该文件尚不存在是合法的,因此Resolve-Path会抛出错误。

是否可以为不存在的文件实例化System.Management.Automation.PathInfo的实例?如果是这样,怎么样?如果没有,您是否建议我如何将不存在的文件路径传递给函数并仍然进行强类型检查。

1 个答案:

答案 0 :(得分:2)

尽管在这种情况下使用[System.IO.FileInfo]类型可能是最好的解决方案(对文件执行某些操作),但如果给出了路径,则可能会遇到问题到文件夹,因为在这种情况下.Exists会返回 False 。您想要使用[System.IO.DirectoryInfo]而不是......

一般来说,你可以使用验证脚本,尤其是。调用某种测试函数的函数,例如,以下内容应允许$null或有效[System.Management.Automation.PathInfo]类型的参数。

function Test-Parameter {
  param($PathInfo)

  if([System.String]::IsNullOrEmpty($PathInfo)) {
    return $true

  } elseif($PathInfo -is [System.Management.Automation.PathInfo]) {
    return $true

  } else {
    return $false
  }
}

然后你使用[ValidateScript({...})]检查你的参数是否满足那些(任意)条件:

function Do-Something {
  param(
    [Parameter()]
      [ValidateScript({Test-Parameter $_})]
      $PathInfo
  )

  ....
}