You Can Write C / Assembly / Perl in any Language

One of the most common tasks when administering a system is working with its files and directories. This is true when you administer the computer at the command line, and is true when you write scripts to administer it automatically.

Fortunately, PowerShell makes scripting files and directories as easy as working at the command line — a point that many seasoned programmers and scripters often miss. A perfect example of this comes when you wrestle with limited disk space, and need to find the files taking up the most space.
A typical programmer might approach this task by writing functions to scan a specific directory of a system. For each file, he or she checks if the file is big enough to care about. If so, they add it to a list. For each directory in the original directory, they repeat this process (until there are no more directories to process.)

As the saying goes, though, "you can write C in any programming language." The habits and preconceptions you bring to a language often directly influence how open you are to advances in that language.

Being an administrative shell, PowerShell directly supports tasks such as "visiting all the files in a subdirectory," or "moving a file from one directory to another." That complicated programmer-oriented script turns into a one-liner:

Get-ChildItem –Recurse | Sort-Object -Descending Length | Select -First 10

Another example came up today in our internal mailing list with the question, "how do list all files NOT in a certain directory?" Another long recursive solution bubbled up in response, but it again turns into a one-liner:

Get-ChildItem –Recurse | Where-Object { $_.FullName –notmatch "\\bin\\" }

Before diving into your favourite programmer's toolkit, check to see what PowerShell supports in that area. In many cases, it can handle it without requiring your programmer's bag of tricks.

(Edit: Changed 'Size' to 'Length' in the example)

5 Responses to “You Can Write C / Assembly / Perl in any Language”

  1. Mohit writes:

    Lesson learnt 🙂

  2. Rick writes:

    Nice example of the power of PowerShell. Need to tweak the example to show only files and not directories…

  3. Lee writes:

    Hi Rick;

    The PsIsContainer tells you that an item is a directory, so you can use the Where-Object cmdlet to exclude items with that property.

  4. mharrigan writes:

    Inane detail I know but shouldn’t the first example read "Get-ChildItem –Recurse | Sort-Object -Descending Length | Select -First 10" ?

  5. Lee writes:

    Oops, absolutely! Thanks.

Leave a Reply