Author Posts

November 1, 2015 at 8:22 am

I am trying to do the following in powershell version 2

I have been trying to figure out how to filer only directories. I came to this solution

get-childitem | where {$_.getdirectories} 

This is when the confusion started. When I do a get-member of get-childitem I get two main categories: system.io.directoryinfo and system.io.filename.

question 1:
when I do the following command what category is it using: directoryinfo or filename? they share some of the same names of attributes and methods

get-childitem | where {$_.somethinghere}

question 2:

with the following command I and using $_.getdirectories and not $_.getdirectories(). I thought all methods needed the "()". When I do that it fails

get-childitem | where {$_.getdirectories} 

November 1, 2015 at 8:40 am

First problem is the GetDirectories is a method not a property – you can't use the way you were trying. The easiest way to get just the directories in PS 2

Get-ChildItem | where {$_.PSIsContainer}

if you want just files use
Get-ChildItem | where {-not $_.PSIsContainer}
or
Get-ChildItem | where {!$_.PSIsContainer}

To use GetDirectories() try
$d = Get-Item -Path $pwd
$d.GetDirectories()

if you just want files try
$d.GetFiles()

November 1, 2015 at 8:45 am

That was part of my confusion, when I used it as a property(it was a mistake, but it worked) it did as I wanted. I will look at your examples to do it properly. Any idea to why it worked when I used it as a property? Just curious.

November 2, 2015 at 7:30 am

Shane,

When you use a method name without the parentheses, PowerShell returns information about the method. And when any non-empty thing (like information about a method) is converted to a boolean, it evaluates as $True.

FileInfo objects, on the other hand, not having either a method nor a property named GetDirectories, return a $Null. When converted to boolean, $Null is evaluated as $False.

So effectively you were testing for the existence of either a method with that name or a property with that name with a non-empty value. Mistake or not, it's kind of a neat trick.

November 2, 2015 at 10:29 am

Cool. Thanks for explaining that.