Quite often I find it usefull to have a file as parameter to a PowerShell function. And most times I want to make sure the file exists when the function is called. In a PowerShell advanced function this can be done quick and short by a validation. More precisely by a ValidationScript attribute to the parameter.
A example on a function with a file as parameter with validation on existance could be something like
function Write-LogFile {
<#
.DESCRIPTION
#>
[CmdletBinding()]
[OutputType([void])]
Param(
[Parameter(Mandatory=$true, ValueFromPipeLine=$true, HelpMessage='...')]
[ValidateScript({$_.Exists})]
[System.IO.FileInfo]$LogFile,
Running a call to the function with a file object that does not exist
[System.IO.FileInfo]$theLogFile = "$PSScriptRoot\log.txt" Write-LogFile -LogFile $theLogFile
… will generate an error like
PS C:\Scripts> .\FileParameter.ps1
Write-LogFile: C:\Scripts\FileParameter.ps1:26
Line |
26 | Write-LogFile -LogFile $theLogFile …
| ~~~~~~~~~~~
| Cannot validate argument on parameter 'LogFile'. The "$_.Exists" validation script for the argument with value
| "C:\Scripts\log.txt" did not return a result of True. Determine why
| the validation script failed, and then try the command again.
There are many other ways to validate if a file exists, but I like to use a FileInfo object as it give the functionality without much custom code.
No comments:
Post a Comment