Я не могу заставить мою функцию пропускать несуществующую папку и продолжает проверять другие.
Я создал небольшую функцию, которая измеряет папки.Это работает, но если путь к папке неправильный, вся функция останавливается, хотя все остальное в порядке.
Я пробовал несколько вещей с try и catch, $ ErrorActionPreference и errorAction, но безрезультатно.Кажется, я либо помещаю их в неправильное место, либо ошибка вызвана ValidateScriptParameter, который останавливает цикл, если путь не существует.
Я был бы рад любым советам, как лучше всего решить эту проблему :)Если я увижу, что мой код работает так, как я планировал, это очень помогло бы мне понять обработку ошибок в PS.
function get-folder {
[cmdletbinding()]
param (
[ValidateScript({
if( -not ($_ | Test-Path) ){
throw "PATH DOESN'T EXIST!" }
return $true
})]
[parameter(valueFromPipeline=$true)]
[string[]]$path)
begin {}
process
{
foreach ($p in $path){
try {
Get-ChildItem -path $p -Recurse -File | Measure-Object -Property Length
-Sum
}
catch
{Write-Warning "The path: $p doesn't exist"
}
}
}
end{}
}
Сообщение об ошибке, которое я получаю, когда один из путей неверен:
PS C:\powershell\Moje_nowe> get-folder "C:\powershell",
"c:\!dump","c:\hostt"
get-folder : Cannot validate argument on parameter 'path'. PATH DOESN'T
EXIST!
At line:1 char:12
+ get-folder "C:\powershell", "c:\!dump","c:\hostt"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [get-folder],
ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,get-folder