Question: I want to exclude all directories from my search in PowerShell. Both `FileInfo` and `DirectoryInfo` contain `Attributtes` property that seems to be exactly what I want, but I wasn't able to find out how to filter based on it. Both

```
ls | ? { $_.Attributes -ne 'Direcory' }
ls | ? { $_.Attributes -notcontains 'Direcory' }

```

didn't work. How can I do this?

Answer: 
### Exclude directories in PowerShell:

```
Get-ChildItem | Where-Object {$_ -isnot [IO.DirectoryInfo]}

```

Or it's terse, but harder to read version:

```
gci | ? {$_ -isnot [io.directoryinfo]}

```

Credit goes to @Joey for his insightful comment using the `-is` operator :)

### However

Technically, I prefer *including* only Files or only Directories since excluding can lead to unexpected results as Get-ChildItem can return more than just files and directories :)

### Include just Files:

```
Get-ChildItem | Where-Object {$_ -is [IO.FileInfo]}

```

Or:

```
gci | ? {$_ -is [io.fileinfo]}

```

### Include just Directories:

```
Get-ChildItem | Where-Object {$_ -is [IO.DirectoryInfo]}

```

Or:

```
gci | ? {$_ -is [io.directoryinfo]}

```
You can also filter out directories by looking at their type directly:

```
ls | ?{$_.GetType() -ne [System.IO.DirectoryInfo]}

```

Directories are returned by get-childitem (or ls or dir) of type System.IO.DirectoryInfo, and files are of type System.IO.FileInfo. When using the types as literals in Powershell you need to put them in brackets.