Как насчет чего-то простого:
PS> gci . -r foo.txt
Это неявно использует параметр -filter (по позиции), определяющий foo.txt в качестве фильтра. Вы также можете указать * .txt или foo? .Txt. Проблема с StartsWith заключается в том, что, хотя вы обрабатываете сравнение без учета регистра, все равно остается проблема, что оба / и \ являются допустимыми разделителями пути в PowerShell.
Предполагая, что файл может не существовать, а $ file и $ directory являются абсолютными путями, вы можете сделать это "PowerShell" следующим образом:
(Split-Path $file -Parent) -replace '/','\' -eq (Get-Item $directory).FullName
Но это не очень хорошо, так как вам все еще нужно канонизировать путь / -> \, но по крайней мере сравнение строк в PowerShell не учитывает регистр. Другой вариант - использовать IO.Path для канонизации пути, например ::10000
[io.path]::GetDirectoryName($file) -eq [io.path]::GetFullPath($directory)
Одна проблема, связанная с этим, заключается в том, что GetFullPath также сделает относительный путь абсолютным путем, основанным на текущем каталоге процесса, который чаще всего не совпадает с текущим каталогом PowerShell. Так что просто убедитесь, что $ directory является абсолютным путем, даже если вы должны указать его как "$ pwd \ $ directory".