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