Powershell 函数参数中声明的不存在文件的强类型检查
我正在编写一个PowerShell函数,该函数对文件执行某些操作,文件的路径作为参数传递给函数。我喜欢强类型和参数验证,因此我不只是将文件路径作为Powershell 函数参数中声明的不存在文件的强类型检查,powershell,Powershell,我正在编写一个PowerShell函数,该函数对文件执行某些操作,文件的路径作为参数传递给函数。我喜欢强类型和参数验证,因此我不只是将文件路径作为System.String传递,而是将参数定义为: [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [System.Management.Automation.PathInfo]$PathInfo 通常,我会在调用代码中使用Resolve Path来获取类型为System.Managem
System.String
传递,而是将参数定义为:
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[System.Management.Automation.PathInfo]$PathInfo
通常,我会在调用代码中使用Resolve Path
来获取类型为System.Management.Automation.PathInfo
的对象,我可以将该对象传递到此参数,但是在这种情况下,文件不存在是合法的,因此Resolve Path
将抛出错误
是否可以为不存在的文件实例化
System.Management.Automation.PathInfo
的实例?如果是,怎么做?如果没有,您是否建议我如何将不存在的文件路径传递给函数,并且仍然进行强类型检查。尽管在这种情况下,使用[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
)
....
}
那么
FileInfo
呢?FileInfo
实例可以指向不存在的目录/文件($pathInfo=New Object IO.FileInfo C:\non-existence.txt
)DOH!太容易了。谢谢您,先生。@jamiet您也可以直接在FileInfo
对象上检查文件是否存在:([System.IO.FileInfo]“C:\noexist.ext”).exists
很好,谢谢@MathiasR.Jessen