iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: function f ([Parameter(Mandatory)][ValidateNotNullOrEmpty()][string] $Path) { if (Test-Path -Path $Path) { $Path } else { $Lines = $Path.Split('\', [StringSplitOptions]::RemoveEmptyEntries) $NewPath = $Path.Replace('\' + $Lines[-1], '') if ([string]::IsNullOrEmpty($NewPath) -or $NewPath -eq '\') { return } f -Path $NewPath } } @( 'C:\Windows\System32\drivers\etc' 'C:\Users\VasiliyIvanovich\Error\Path\Typo' 'HKCU:\Software\Microsoft\Siuf\Rules' '\\vmware-host\Shared Folders\pub\powershell' '\\vmware-host\Shared Folders\pub\powershell-' '\\vmware-host\Shared Folders\pub-\powershell' '\\vmware-host\Shared Folders-\pub\powershell' 'C:' 'HKCU:' '\\vmware-host' )|%{"'{0}' ==> '{1}'"-f$_,(f $_)} | Если оставлять обратный слэш, использовать split по обратному слэшу, то с unc путями в test-path может передаться пустая строка и тот выдаст ошибку о недопустимости null в переменной. Поэтому удалять обратный слэш. Код: $NewPath = $Path.Replace('\' + $Lines[-1], '') | Но блок проверки: Код: if ([string]::IsNullOrEmpty($NewPath) -or $NewPath -eq '\') { return } | все же сделал заодно он не даёт проверять путь: '\' |