Вы можете использовать свойство PSIsContainer
:
gci | ? { !$_.PSIsContainer }
Ваш подход также будет работать, но должен выглядеть следующим образом:
gci | ? { !($_.Attributes -band [IO.FileAttributes]::Directory) }
в качестве атрибутов перечисление и битовая маска.
Или, для вашего другого подхода:
gci | ? { "$($_.Attributes)" -notmatch "Directory" }
Это приведет к преобразованию атрибутов в строку (которая может выглядеть как «Directory, ReparsePoint»), а в строке можно использовать оператор -notmatch
.
В PowerShell v3 наконец-то есть параметр -Directory
для Get-ChildItem
:
Get-ChildItem -Directory
gci -ad