Slashdot Mirror


Windows PowerShell in Action

jlcopeland writes "For two decades I've hated the command prompt in DOS and Windows. Inconsistencies abound and everything is a special case. The fallback on a Microsoft box has been running a Unix shell under Cygwin or installing Microsoft's own Services for Unix (or its predecessor, Softway's Interix), or by scripting in Perl, but those only get you so far. Having co-written nine years worth of trade rag columns using mostly Perl as the implementation language for the samples, and thinking of every problem that comes across my desk as an excuse to write a little bit of scripting code, I've got some well-formed views about scripting languages and what works and what doesn't. That means I've been eagerly watching the development of PowerShell since it was called Monad. It's got the advantage of being a unified command-line interface and scripting language for Windows, even if it does have a dorky name." Read the rest of Jeffrey's review. Windows PowerShell in Action author Bruce Payette pages 576 publisher Manning rating 9 reviewer Jeffrey Copeland ISBN 1932394907 summary Guide to PowerShell, the new Windows scripting language

Bruce Payette's Windows PowerShell in Action is a great overview of PowerShell, aimed at an audience that's got some experience with other scripting languages. Bruce's book is a big improvement over Andy Oakley's earlier book, Monad, which I had been using: it's more complete and it's up-to-date for the first release of PowerShell. It's got great (and sometimes amusing) examples, and feels like the Perl Camel book in flow. When I was reading it in the gym or someplace else away from the keyboard, I kept wanting to run back to the office to try something out. There are also useful "why it works this way" digressions, which provide a lot of context. Since Bruce was on the original development team, wrote most of the commandlets, and was responsible for much of the language design, those digressions are more authoratitive than the directors' commentary tracks on most DVDs.

In outline, the nine chapters in the first part of the book build up as you'd expect: overview and concepts, to data types, to operators, to regular expressions, to syntax, to functions, to interpreting errors. It covers that ground better than many language books that now litter my shelves. The explanations are clear, and the examples are almost all exactly on point. It took me a second reading to realize that my complaints about the regular expression sub-chapter wasn't about the chapter itself, but about some of the implementation decisions; that's an argument about style more than substance, and an observation about me, not about Bruce's writing or PowerShell. The first part of the book is the "mandatory reading," if you will, to get the language down and begin exploring on your own.

The second part is where the real applications are covered. That's the part that you especially want to read sitting next to the keyboard. As you'd expect, the example code is available from the publisher's web site to start you off — look for "Example Code" under "Resources." There's a very good discussion of text processing and how-to-handle XML, complete with some not-obvious warnings about traps to avoid. I've been working very carefully through the really good chapter on using GUIs with PowerShell, "Getting Fancy — .NET and WinForms," and my own proof of concept for that has been rebuilding an old C++ data entry application into a much simpler PowerShell script. As a nice side effect, Bruce's book (and the WinForms chapter in particular) provide a gentle overview to some concepts in the .NET framework, which I hadn't had an opportunity to delve into. The appendix on using PowerShell as a management application will be especially useful to system managers; that was one of the original PoweShell target audiences, and the language achieved that goal very well. The appendix on the language's grammar is really useful, and I keep flipping back to it to check on things.

After Oakley's Monad appeared, there was a long gap before the next PowerShell book appeared. Bruce's book looks to be the first of the post-release wave. If all it had going for it was the authoratative pedigree of the writer, it might be worth it, but it's also well-written, well-organized, and thorough, which I think makes it invaluable as both a learning tool and a reference.

You can purchase Windows PowerShell in Action from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

75 of 442 comments (clear)

  1. Monad by Profane+MuthaFucka · · Score: 5, Funny

    Named after the designer lost a testicle in a tragic chair throwing accident.

    --
    Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    1. Re:Monad by trparky · · Score: 2, Informative
    2. Re:Monad by jsnover · · Score: 5, Informative

      That is not the case. I gave it the name Monad because of my respect for Leibniz. Wikipedia has this right: http://en.wikipedia.org/wiki/Windows_PowerShell

  2. PowerShell by El+Lobo · · Score: 2, Interesting

    is one of the nicest things that came out of Redmond. Ever. My only complain is that it is tight integrated to .NET, but OTOH I believe this is necesary to integrate the always nice C# to it, which is of course a plus.... You can't have the cake and eat it...

    --
    It's time to realise that Abble's products are the biggest abomination these days. Just say NO to the dumb iAbble way!!
  3. At this rate... by pnuema · · Score: 5, Insightful

    ...in 20 years MS will invent UNIX.

    1. Re:At this rate... by JPriest · · Score: 4, Informative

      For those that didn't get it, his comment was a play on the famous:
      "Those who do not understand Unix are condemned to reinvent it, poorly"

      --
      Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
    2. Re:At this rate... by Shawn+is+an+Asshole · · Score: 3, Informative

      You mean again?

      --
      "It ain't a war against drugs.it's a war against personal freedom" --Bill Hicks
    3. Re:At this rate... by PhrostyMcByte · · Score: 4, Informative

      Wake me up when *nix gets an object-oriented (rather than text-oriented) shell. Because that is what makes Powershell so unique. Yes, it has plenty of builtin functions to make tasks easier, but the real advantage is that everything you pass between commands is an object.

      You don't have to worry about interpreting text output - you just access whatever data you want directly. Many of the commands are easily chainable into something like "ls | select fullname,length | sort name | format-list | out-printer".

    4. Re:At this rate... by Anonymous Coward · · Score: 2, Insightful

      The shell is a text interface, if I want OOP I can call a different scripting language for every day of the week and then some.

      What's to understand here?

    5. Re:At this rate... by archen · · Score: 5, Interesting

      There's actually a lot of other cool things about it as well. I've been using Jscript to do stuff since Win2k (screw that VBscript garbage) but there are obvious limitations at the scripting level, but in the end you're always stuck in cmd.exe

      I was skeptical when I first heard about Monad. I mean it seemed obvious to me that Microsoft just didn't get the point of a "shell" which is supposed to be simple. With a pending install of Exchange 2007, the power shell is required so I figured I'd start to dig into it. I have to say I'm rather impressed.

      First of all, it is actually simple. Not only that, but the syntax is EXTREMELY CONSISTENT. And honestly I cannot stress that enough, because if you think you know part of a command you can usually figure out the verb/noun syntax to use. It also allows shortcut versions of commands so you don't have to type the entire "wordy" version of the command. Aliases are supported too. Another cool feature? You can navigate the registry like the rest of the file heirarchy.

      I'm a big fan of bash, but I must admit that at times it gets old shuffling stuff with awk and cut and so forth. By getting objects you can take what you want out of it, and not worry about the biggest Unix terror - the text output changing. If whatever you're trying to do doesn't support .net objects, you can still pipe text.

      Overall it's pretty awesome technology and I must give MS credit where it's due. Not that I'll be switching any of my FreeBSD servers to Windows because of it, but it makes windows administration orders of magnitude better. Too bad it got dumped in Vista. I've heard it will be included in service pack 1 though.

    6. Re:At this rate... by nanosquid · · Score: 3, Funny

      Wake me up when *nix gets an object-oriented (rather than text-oriented) shell.

      "Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea." (Douglas Adams)

    7. Re:At this rate... by cduffy · · Score: 2, Informative

      There are experimental shells for Unix that do that sort of thing; most of us just don't see the point.

      http://geophile.com/osh/index.html
      http://dispatch.sourceforge.net/

    8. Re:At this rate... by Tanktalus · · Score: 2, Interesting

      Why not just use "rename"?

      rename .ext1 .ext2 *.ext1
      I'm actually thinking of something just a bit more complex:

      for file in *.avi; do ffmpeg -i $file -target dvd -aspect 16:9 ${file%avi}mpg; done
      Not that I have a use for something like that, mind you...
    9. Re:At this rate... by Thundersnatch · · Score: 3, Informative

      The FOR command in the "legacy" Windows shell is pretty powerful, too. It even has horrible syntax, just like its UNIX fathers.

      Yes, the legacy Windows shell sucks, but not as badly as most people assume. The NT shell can do a lot of stuff that most people don't even think to try. Great gobs of functionality have been added over the years, starting with Windows NT 3.5. And contrary to what many slashdotters think, the legacy shell on Windows NT-derived systems is not DOS, nor is it 16-bit. CMD.EXE is just another 32-bit or 64-bit process running on the NT kernel.

    10. Re:At this rate... by renoX · · Score: 2, Insightful

      >I can pass non-text data from one function to another with no prob.

      Sure, the pipe can pass anything, but as there is no standard to pass anything but ASCII encoded text, you're more or less restricted to use this on Unix otherwise you'll have to modify all the tools: watch how slow the transition to Unicode was..

      In theory, one could define a 'common' binary encoding of objects easily on Linux, but then you have to modify each tool, each scripting language to make it work, a huge task..
      In practice, especially on Linux it's nearly impossible: there is no central authority: remember, there are *still* copy/paste problems between some toolkits..

    11. Re:At this rate... by Jonsey · · Score: 2, Informative

      While I can't comment on any of the rest of it. (Yeah, I work for 'em)

      I can offer a link to the download.microsoft.com page that pulls it for Vista. (all links are English x86, if you run English x64, you'll be able to navigate the download center by now).

      Vista x86: http://www.microsoft.com/downloads/details.aspx?Fa milyID=c6ef4735-c7de-46a2-997a-ea58fdfcba63&Displa yLang=en

      XP x86: http://www.microsoft.com/downloads/info.aspx?na=22 &p=1&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId= &u=%2Fdownloads%2Fdetails.aspx%3FFamilyID%3D6ccb7e 0d-8f1d-4b97-a397-47bcc8ba3806%26DisplayLang%3Den

      WS03 x86: http://www.microsoft.com/downloads/info.aspx?na=22 &p=2&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId= &u=%2Fdownloads%2Fdetails.aspx%3FFamilyID%3D10ee29 af-7c3a-4057-8367-c9c1dab6e2bf%26DisplayLang%3Den

      Get it, use it!

        -- I worked briefly doing part of the steps of release management for this, so it's cool to see that people are enjoying it.

      --
      I assert that my comment is only my opinion, not that of any employer, past, present or future.
    12. Re:At this rate... by MightyMartian · · Score: 2, Insightful

      Most people don't know, because the minute they go into the docs to find out how to do something non-trivial, they find out that CMD.EXE may actually be the most convoluted godawful shell ever invented. It's ugly, horrible and a pain. It's so inferior to sh that I can't imagine anyone seriously mentioning them in the same sentence.

      --
      The world's burning. Moped Jesus spotted on I50. Details at 11.
    13. Re:At this rate... by Furry+Ice · · Score: 2, Interesting

      Rather than wait years to learn how to do this kind of parsing, just start learning now.

      The solution to the problem of separating out "Jan" in the date from "Jan" in the filename is to realize that position matters.

      The data returned from "ls -l" is formatted in columns (that's why the filename comes last--it could have spaces in it!).

      I'm sure there are a lot of tools that can do this task, but awk is often a good replacement for grep when you need to look at a specific column.

      Here's some sample data:

      ls -l
      drwxrwxr-x 3 phiggins phiggins 4096 Jan 22 2005 www
      -rw-rw-r-- 1 phiggins phiggins 5746 Apr 10 13:32 xorg

      You can see the month is column 6, so let's try out some awk:

      ls -l | awk '$6 == "Jan"'
      drwxrwxr-x 3 phiggins phiggins 4096 Jan 22 2005 www

      awk is a bit weird and takes some learning, but the most important thing to remember is that many characters that awk uses will be interpreted by the shell, so always put your awk script inside single quotes. If you try to use double quotes, you're going to beat your head many times trying to figure out what's wrong with your program.

      You can match on a regex using:

      ls -l | awk '$6 ~ /Ja/'

      The part I've left out is the action part. An awk line consists of a pattern and an action. If the pattern is left out, it defaults to the pattern that matches every line. If the action is left out, it defaults to the action of printing out the whole line.

      Actions are enclosed in curly braces (one of the key reasons to enclose your script in single quotes!). Probably the most common thing to do is print out a subset of the fields of the line:

      ls -l | awk '$6 ~ /Ja/ {print $9}'
      www

      That will print just the filename. I've been slowly picking up more advanced pieces of awk over time, but even if you only know these basics, it can really help parse a lot of things that grep is unable to deal with!

    14. Re:At this rate... by jonadab · · Score: 2, Funny

      > remember, there are *still* copy/paste problems between some toolkits..

      That's mainly because the stubborn GUI writers refuse to support the Emacs kill ring.

      Ahem.

      --
      Cut that out, or I will ship you to Norilsk in a box.
  4. Don't knock it until you try it by PhrostyMcByte · · Score: 4, Interesting

    Powershell is very powerful. Much more so than cmd.exe. I don't have significant enough experience with bash to compare the two but I would not be surprised to learn Powershell equals if not beats bash at the shell game. I wouldn't say it is ready to replace any of the scripting languages just yet.

    I have been using it for a while now and the single (semi-major) problem I can find is memory usage. It is a hog at best, and at worst when you are using it semi-heavily it can easily chew up 1GB of memory. That's even with giving the GC something to work with, ie unsetting $vars when you are done with their data.

    1. Re:Don't knock it until you try it by TBone · · Score: 5, Informative

      I would not be surprised to learn Powershell equals if not beats bash at the shell game. I wouldn't say it is ready to replace any of the scripting languages just yet.

      Unless MS rewrites all of their other commands to accept STDIN/OUT, Monad will never surpass the shells. The power of the shells isnt' their programming flexibility, it's their ability to incorporate all the other UNIX tools and commands via pipes to do what you want.

      I have been using it for a while now and the single (semi-major) problem I can find is memory usage. It is a hog at best, and at worst when you are using it semi-heavily it can easily chew up 1GB of memory. That's even with giving the GC something to work with, ie unsetting $vars when you are done with their data.

      Another reason it will never surpass the shells. They're lightweight, and flexible, and I don't need a Garbage Collector running in the back end to clean up my object allocation.

      --

      This space for rent. Call 1-800-STEAK4U

    2. Re:Don't knock it until you try it by immovable_object · · Score: 2, Informative

      HAHAHAHAHAHAHA. Thanks! I needed a laugh today, and saying that a shell can use up to a gig of memory provided that laugh.

      Let's see on my Mac with OS X, my bash shells, which admittedly aren't being used semi-heavily, are using:

      USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
      nobody 879 0.7 -0.0 27816 856 p3 Ss 11:06AM 0:00.12 bash
      nobody 281 0.0 -0.1 27816 1472 p1 S+ 11:09PM 0:00.17 -bash
      nobody 348 0.0 -0.0 27816 904 p2 S+ 11:37PM 0:00.16 -bash


      Hmmm... that comes to an average of 1078kb of memory per shell. And PowerShell can use up to a GIGABYTE?

      I'm still laughing.

    3. Re:Don't knock it until you try it by arevos · · Score: 4, Informative

      Unless MS rewrites all of their other commands to accept STDIN/OUT, Monad will never surpass the shells. The power of the shells isnt' their programming flexibility, it's their ability to incorporate all the other UNIX tools and commands via pipes to do what you want. Powershell doesn't use pipes in the same way shells do in unix. Powershell communicates via remote methods and objects, and a lot of the Windows API has been exposed to it, so there's quite a lot of things you can do with it, and a few things that would be a lot more difficult to do with text streams and pipes. It's also quite logically put together, much more so than the standard unix set of command tools. There's not as many third party apps, but most of the basics are there.

      It really fails in two places. Firstly, it's slow. You wouldn't have thought it possible for a command shell to be that slow, but it is. It's so slow it was actually quicker for me to use explorer. It is god-awfully, mind-bogglingly slow.

      The second problem is that it had no easy way of being accessed over a network link, last time I looked at it. So there's no chance of SSHing into a Windows box and administrating it from there, at least not without fiddling with a lot of hacks and workarounds I couldn't get to work.

      The other place where unix shells have an advantage over Powershell is in there interface, as Powershell is currently quite basic in that department. There's limited tab completion and a prompt that can be altered (like PS1 under sh derivitives), but not much over that. Certainly nowhere near my personal favourite, Fish.

      Another reason it will never surpass the shells. They're lightweight, and flexible, and I don't need a Garbage Collector running in the back end to clean up my object allocation. Why so closed-minded? Powershell has a lot of interesting ideas, and an architecture that's structurally very well organised. Don't dismiss it just because it was made by Microsoft, especially since it sounds as if you haven't even tried it out.
    4. Re:Don't knock it until you try it by ivan256 · · Score: 2

      In fact I'd be stupified if new tools aren't created to format common UNIX tools output into XML streams and vice versa.


      I'm stupified that anybody would find value in that. The shells ferry data around. They themselves generally don't need to or have any business actually understanding that. They funnel it to other commands to deal with that. Wrapping of common utilities output in XML is a ridiculous exercise in buzzword compliance that could only possibly help people who are dealing with unstable utilities (in the "change a lot" sense, not the "crash a lot" sense). No wonder it eats so much memory.
    5. Re:Don't knock it until you try it by maxume · · Score: 2, Insightful

      The down mods are because the moderation system barely works. My impression is that there are plenty of people with mod points who see them as rewards/penalties rather than a mechanism for making the conversation more readable. The hair pulling insanity of it is that it is among the better systems out there.

      As far as Powershell, why worry too much about what people who haven't used it think?

      --
      Nerd rage is the funniest rage.
    6. Re:Don't knock it until you try it by kc01 · · Score: 2, Insightful
      "Powershell is very powerful. Much more so than cmd.exe."


      One would certainly hope so, considering how old and antiquated MS-DOS and cmd are. I mean, come on. How could it NOT be? I looked at the user guide for powershell, and saw that "Windows PowerShell is based on the .NET framework."
      There's a strike against it right away.

      I've been programming command languages for four decades now, and of course there will be unique features to the command language for any operating system. For example, the DCL on the VAX and the CCL on NOS naturally won't interchange on the computers. But times have changed- With the ability to run perl and other open tools on any system, why make something as obtuse as Powershell?

      Let's look at an example command "Get-PSDrive -PSProvider FileSystem." Even with command completion, this looks cumbersome as hell. Kinda reminds me of COBOL. Computers and their programs are supposed to do the work, while reducing the work for the users.

      Read the manual, THEN knock it.

    7. Re:Don't knock it until you try it by osu-neko · · Score: 2

      Well, you'd be surprised to learn that bash isn't even the tip of the iceberg in Linux. There's also sh, csh, ash, dash, ksh, and I don't know how many other shell options I can't recall just now.

      zsh! Of course, I use zsh under MacOS X and under Windows (cygwin) as well as under Linux (and in fact have done all three within the last hour). It's great having a consistent user interface between all the operating systems I continually use. :D

      Since when did what shell you use become fodder of OS wars? It's just an application that runs under the OS, has nothing to do with the OS itself...

      --
      "Convictions are more dangerous enemies of truth than lies."
  5. Monads are windowless, get it? by Brunellus · · Score: 5, Interesting

    I wish they'd kept "monad" as the name. It was a deft tip of the hat to Leibniz's Monadologie, which held that monads were the windowless metaphysical atoms of perception itself.

    1. Re:Monads are windowless, get it? by clamantis · · Score: 2, Insightful

      "I wish they'd kept "monad" as the name." Hey, there's a name. WiSH!

  6. Well, *that's* unique by Angst+Badger · · Score: 5, Funny

    Inconsistencies abound and everything is a special case.

    You should switch to bash and the GNU tools.

    Oh, wait.

    --
    Proud member of the Weirdo-American community.
  7. Everyone should follow their lead... by Anonymous Coward · · Score: 5, Funny

    Now all we need is for Sun to develop a Solaris-only shell, Apple to develop a Mac-only shell, and RedHat to develop a Linux-only shell. I hate re-using code because it forces me to solve new problems every day. I'd rather create new value on Mondays only, and then spend the rest of the week re-doing the same work on my other platforms. It gives my mind a chance to rest, and I can drink heavily mid-week and still be able to do my job.

    I sure hope they charge extra for it, make it a resource hog, lock out third-pary extensions, and then discontinue it as soon as I'm dependant on it. I really liked the 1980s and look forward to reliving them.

    1. Re:Everyone should follow their lead... by rmallico · · Score: 2, Informative

      take a look at wwww.nsoftware.com and look at their remoting capabilities... powershell scripts can be extended to add cmdlets for ssh, snmp, wmi, etc... no reason perl and bash and ??? could not be added as another snapin to extend things...

      another cool product is www.powergadgets.com for widget/gadget graphing on windows desktops...

      --
      sig goes here!
  8. Re:It's amazing people still use windows. by QCompson · · Score: 3, Funny

    given the current rate that Linux/Open source is catching up to MS, I give them another 10 years before linux has 20% of the PC market.

    2017, the year of the linux desktop!
  9. Re:It's amazing people still use windows. by PadRacerExtreme · · Score: 2, Insightful

    Things like the shell are decades behind unix.

    YOu do realize that 90% of users have aboslutely no need for a shell, right? I would argue most power users don't need a shell.

    --
    Just remember - if the world didn't suck, we would all fall off.
  10. Great Review by water-and-sewer · · Score: 4, Interesting

    I don't use Monad (:s/M/G/g) or intend to, so I don't care much about the book. But what a great review. We get a lot of amateur reviews around here, but this one was particularly well written, clear, and informative. Nice job, homie.

    --
    If this were Usenet, I'd killfile the lot of you.
  11. What is wrong with Cygwin? by raphae · · Score: 2, Interesting

    a Unix shell under Cygwin or [...] but those only get you so far


    What is wrong with Cygwin? How can he bash Cygwin (sorry, no pun intended) without even bothering to say anything about it?
    1. Re:What is wrong with Cygwin? by ZwJGR · · Score: 2, Informative

      I installed cygwin and hated it, installer kept screwing up, and it was really slow.
      A dedicated ReiserFS partition with a Slackware 11.0 disto and installation of coLinux on Windows solved (almost) all my problems. Bypass M$ entirely, the freedom of bash...
      (The only snag is that cofs isn't finished yet)

      As for powershell, I installed it when it was in beta and still called Monad, year or so ago, I was impressed, but it seemed like a lot of COM bloat to me... (FYI, I hate COM/OLE from a programmers perspective)

      --
      There is no psychiatrist in the world like a puppy licking your face - Ben Williams
    2. Re:What is wrong with Cygwin? by MightyMartian · · Score: 2, Informative

      Nobody is denying that Cygwin has lots of tools, and within certain applications it does just fine. But it is damn slow, a major hog and doesn't really give you the kind of integration you sometimes need. Let's not forget that a lot of those tools on your list can be found in native Win32 binaries, without the need of the cygwin libraries. I wouldn't dream of using Cygwin's awk when I can use the win32 one. Plus the fact that it does introduce some pretty peculiar incompabilities with some non-Cygwin apps that can be difficult to overcome.

      --
      The world's burning. Moped Jesus spotted on I50. Details at 11.
  12. Some clever spacing by Hoplite3 · · Score: 4, Funny

    Windows Powers Hell ?

    I guess I always suspected it was true, but the beastie mascot of BSD made me wonder if there wasn't room for a little UNIX in Hades too.

    --
    Use the Firehose to mod down Second Life stories!
  13. I'd love Powershell, if it weren't for one thing: by 3m_w018 · · Score: 5, Interesting

    It's slower than cold molasses up a hill.

    It takes a few seconds for the prompt to appear, and if I run a "dir" operation with both cmd.exe and PS in a directory with hundreds of files, cmd.exe will beat it in seconds.

    I'm not running a slow machine(core duo 2, 1GB of RAM). Is there something that needs to be configured to make it suck less?

  14. What about MKS? by markdj · · Score: 3, Informative

    You forgot MKS toolkit which has most if not all of the standard UNIX utilities along with vi, bash, ksh, sh, awk, sed, etc. What more could you want?

  15. Re:It's amazing people still use windows. by CastrTroy · · Score: 2, Insightful

    Wrong. 90% of users don't need the old windows/msdos shell. If people had a shell that was as good as bash, then they would use it. As it is now, using the shell in windows doesn't provide any benefit, so nobody bothers to use it. You can't say people don't need a shell when they don't have one. It's like saying people didn't need macros in word processors before the existed. Nobody used macros because the option wasn't available to them. Now that macros are available, many people do use them, and not just the power users. MS assumes that everybody is an idiot, and therefore doesn't provide tools that people with the right skills would actually use. Therefore, nobody has the opportunity to develop skills with these tools. Take a look at some of the stuff in XP, like that search dog, and the dumbed-down control panel and management options. With features like that it's no wonder people don't learn anything about computers, when the computer assumes they don't.

    --

    Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  16. Re:It's amazing people still use windows. by Dr_Barnowl · · Score: 4, Insightful

    I would argue most power users don't need a shell.

    I'd say that power users who think they don't need a shell don't know what they're missing ; they could have a lot more power.

    The gentleman sitting next to me has recently discovered and raves about WinGrep, a GUI file search/replace utility with RegExp support. It's not bad, but it can't compare with a shell - you can't, for instance, search for a bunch of files containing your desired pattern match and invoke an external utility to process each one. And anything that the original application designer didn't visualise as a feature is excluded. He's easily capable of comprehending grep and sed, which would do the same job for free, but he's more comfortable with the GUI.

    In a *nix style shell, the ability to pipeline STDOUT through a whole bunch of little utils is the tool of a real power user - and it has a nice easy learning curve, you can pick up new commands as and when you like, and combine them with old favourites. The downside to the *nix shell is that very often you have to perform some esoteric text processing to get what you want, which means learning tools like awk and sed. Powershell works by passing objects through the pipeline - objects that have useful properties. It's even an improvement with old-style executables that emit pure text - the .NET String object has an API that's a lot easier than sed and awk.

    The GUI equivalent of a shell for a power user would be a pipeline composer where you can take various widgets representing actions and plug them together. Perhaps something like the DTS transform designer in SQL Enterprise Manager. Or maybe not :-)

  17. Re:It's amazing people still use windows. by ArsonSmith · · Score: 2, Insightful

    Saying you don't need a shell just means you have found clunky, typically inefficient workarounds, or you are just living without its benefits.

    Sure you can live without a vacuum cleaner, but your carpet and overall cleanliness is going to suffer for it. I know people who live in apartments without vacuum cleaners and they are very similar to computers who's users don't use or understand shells.

    --
    Paying taxes to buy civilization is like paying a hooker to buy love.
  18. The philosophy behind textual data by mangu · · Score: 3, Interesting
    it treats piped arguments as objects instead of strings, Psh lets programs access the data directly, instead of having to manipulate large amounts of textual data with tools such as grep or PERL.


    Then they have absolutely no idea about what they are doing. The one big advantage in using pipes is that any application can handle text data.


    Let me give one example: I use the sort command all the time, it sorts data by lines of text, lines are compared according to criteria passed in command options.


    Now, imagine if it depended on binary objects. For every sort operation one would have to write a comparison function to decide which object should come before the other. Writing a special function would mean declaring some form of callback, or maybe some people would call it a closure, whatever. And so on.


    Here's one simple command I use when a disk starts getting full to see which directory is the data hog:
    du -x / | sort -nr > mem.txt &
    What this command does is check the disk usage (du command) in the root directory (/) without looking at symbolic links to other disks (-x option). The result is piped to the sort function, where it's sorted by the numeric value of the first column in reverse order (-nr option). The sorted result is sent to a file named mem.txt. Since checking the whole disk may take some time, it's done in the background (& command). After it finishes, I have a file with the size of each directory in the disk, one line per directory, ordered by size, larger directories first.


    See how powerful it is, having data represented as text? Try writing this line as a Powershell script.


    Another advantage of having data in text format is that you can test it using the keyboard and screen very easily, no need to run a special debugger.


    Instead of trying to reinvent Unix poorly, Microsoft would do a favor to its customers if they accepted Unix is a mighty fine OS and adopted without shame its best features.

    1. Re:The philosophy behind textual data by 0xABADC0DA · · Score: 2, Insightful

      On the other hand, a monad version of /bin/sort could just call the toString on all the objects and sort them based on that. Or it could sort on any other method you gave it, for instance:

      Sort by name:
          du -x / | sort --method 'toString'

      Sort by size:
          du -x / | sort --method 'getSize'

      Also you could do things like make your own output formats without having to use /bin/cut and guess at what the right columns are going to be. If the commands are set up to take closures you could send them little 'scriptlets' that hook in to what the basic command does.

      Look I'm sure Microsoft screwed it up so it's stupid since they basically screw up everything they do. But the actual idea behind it doesn't have to be as bad as your rant. Especially since you can always convert any object to a string and then are you back to unix.

    2. Re:The philosophy behind textual data by Peaker · · Score: 2

      For every sort operation one would have to write a comparison function to decide which object should come before the other.

      There is already a comparison function written for each type of object (especially ints and strings, the only objects sort can really compare).

      Piping objects is a super-set of the power of piping textual strings, as a sibling poster mentioned: You can always convert objects to strings, but not vice versa.

      A powershell equivalent (with my own invented syntax):
      du -x / | sort

      Ofcourse since "du" outputs numbers, sort will already compare them properly, whereas with text-strings, you have "weak typing" and need to re-specify how to correctly interpret the data (sort -n) .

      Another advantage of having data in text format is that you can test it using the keyboard and screen very easily, no need to run a special debugger.

      Objects can represent themselves in any meaningful way you want. As text, too. So you don't need a debugger either.

      Debugging and generally programming the shell would become easier as you will be communicating your intent, rather than using ad-hoc string encoding/recoding techniques to get the data through the tools.

      An object powershell is more powerful than a shell, kind of like Python is more powerful than bash, except that unlike Python, its syntax is designed to be easy for one-liners.
    3. Re:The philosophy behind textual data by MS-06FZ · · Score: 5, Insightful

      it treats piped arguments as objects instead of strings, Psh lets programs access the data directly, instead of having to manipulate large amounts of textual data with tools such as grep or PERL.

      Then they have absolutely no idea about what they are doing. The one big advantage in using pipes is that any application can handle text data.

      Let me give one example: I use the sort command all the time, it sorts data by lines of text, lines are compared according to criteria passed in command options.

      Now, imagine if it depended on binary objects. For every sort operation one would have to write a comparison function to decide which object should come before the other. Writing a special function would mean declaring some form of callback, or maybe some people would call it a closure, whatever. And so on.

      Here's one simple command I use when a disk starts getting full to see which directory is the data hog:
      du -x / | sort -nr > mem.txt &
      What this command does is check the disk usage (du command) in the root directory (/) without looking at symbolic links to other disks (-x option). The result is piped to the sort function, where it's sorted by the numeric value of the first column in reverse order (-nr option). The sorted result is sent to a file named mem.txt. Since checking the whole disk may take some time, it's done in the background (& command). After it finishes, I have a file with the size of each directory in the disk, one line per directory, ordered by size, larger directories first.

      See how powerful it is, having data represented as text? Try writing this line as a Powershell script.

      Another advantage of having data in text format is that you can test it using the keyboard and screen very easily, no need to run a special debugger.

      Instead of trying to reinvent Unix poorly, Microsoft would do a favor to its customers if they accepted Unix is a mighty fine OS and adopted without shame its best features.

      I strongly disagree with most of what you've said. Here's why.

      The supposed "ease" of dealing with text is an illusion - it's a fallacy that's built out of
      1: the fact that textual formats are usually organized such that we humans can read them if we send the data out to a console
      2: the fact that Unix types have built up a formidable array of text-wrangling utilities to deal with these problems
      3: a general assumption that the reading and writing of formats passed between processes won't pose any real challenge to process.

      The relative "ease" of text is negated if three corresponding conditions are met in a shell dealing in structured data:
      1: Data is structured (or information about the structure of the data is communicated) using mechanisms that are respected by all tools involved. (In other words, there's some kind of Lengua Franca for the structured data - .NET provides this, of course. Similar technologies could provide the same thing on Linux. It's a tall order, mainly because of all the programs in the world that are written for naive assumptions about the shell environment...)
      2: The structured data that is used in inter-process pipelines is given suitable (preferably interactive) display methods
      3: An appropriate set of data handling tools are introduced, generic enough to work for most problems and powerful enough to be effective.

      The problem with textual formats for structured data is that there will always appear ways that you can do it wrong. For instance, what if a field contains the character (or set of characters) you're expecting to use to delimit the fields? Well, that's why find has a -print0 option, isn't it? Now, what if the field could contain null bytes, too? Then maybe you use escape characters - and the process of reading in the output from the previous command starts to become a more complicated parsing problem.

      You cite how easy it is to sort based on a field (and, to extend the exam

      --
      ---GEC
      I'm but the humble pupil, seeking to snatch the scratchbuilt pebble from the master's fully articulated hand
  19. perl -e by Anonymous Coward · · Score: 2, Insightful

    You're obviously just parroting Unix ideology and haven't even bothered to take a glance at Monad to see how it compares. As I understand it, Monad's object model is essentially a superset of Unix's file model. I haven't used it enough to speak to how it works in practice, but it is a fundamentally more powerful paradigm.

    If we want/need to call an OO scripting language, we can do just that thank you very much. Typical Microsoft non-solution to a non-problem just so they can lock users to their ailing platform.

  20. Re:It's amazing people still use windows. by nanosquid · · Score: 2, Informative

    Things like 3D acceleration are decades behind Windows.

    Actually, 3D acceleration in Linux is technologically ahead of Windows. What's behind is driver support, although that's coming around.

    People use Windows because most people are not looking for the same things in an OS that you are.

    Well, nobody in my family uses Windows anymore: they have all switched to either Mac OS or Ubuntu, both of which are considerably less hassle and overall cheaper.

  21. A quick intro to Monad by sootman · · Score: 3, Interesting

    For those who haven never seen Monad in action and are quick to bash (ha! get it?) Microsoft's new shell, take a look at these two videos. You'll see that it's much more than just bash on Win32. In fact, if it ever catches on, it'll be Unix's turn to play catch-up, because some parts of it are pretty damn amazing. (Note that those are from 2005, but AFAIK, there haven't been substantial changes.)

    The whole point of Monad is that it's not just text, it's objects. So, unlike Unix, where you work with a command and then filter its output (which is just text), the output of Monad, while looking like text, is actually kind of like pointers back to the real thing, so instead of just doing a Unix-style command | filter | filter, you can say "OK, run this command, now of the things it output, go back and tell me this and this about them." Like, "Of these things that are running, tell me which five are using the most CPU time, then tell me the version of each, and how much memory they're using."

    PS: "...even if it does have a dorky name"--which name were you referring to: the one that sounds like 'testicle' or the one that makes me think of the Lottery? :-)

    --
    Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
  22. Re:I'd love Powershell, if it weren't for one thin by Shados · · Score: 2, Informative

    Its the typical .NET deal. First time you run something it takes a bit, after that its instant.

    So basically, what makes it suck less, is to use it more.

  23. You can knock it but it IS VERY USEFUL by Evilged · · Score: 3, Interesting

    I have to manage a Windows domain of a 1000+ users and Powershell (yes crap name) allows me to do stuff that you used to only easily do with expensive third party stuff quickly in a few lines.
    The only other choice to do something similar on Windows is VB script which I find painful at best. It may not be the best Shell ever but at the moment its the best Windows integrated shell with access to .Net, WMI etc. and it beats Active Directory administration through a GUI any day.
    The book is great by the way, and his blog has loads of useful tips too.
    Anybody who is actually going to try it, will find the powershell community extension very useful. G

  24. FYI - PowerShell is not just for Vista by Brit_in_the_USA · · Score: 2, Interesting

    I hope this is not a dupe - I certainly was not aware....
    ...PowerShell is avlaibel for MS OS's older than Vista too:

    http://www.microsoft.com/windowsserver2003/technol ogies/management/powershell/download.mspx

  25. Re:I'd love Powershell, if it weren't for one thin by Bloody+Templar · · Score: 3, Interesting

    That's not an apples-to-apples comparison, though.
     
    In cmd.exe, "dir" is "dir." It gives you a text listing of the files and subdirectories of your current directory. In PowerShell, "dir" is an alias for "get-childitem," which returns an object array that can either be parsed for display in the console, or passed down the pipeline to another commandlet.

  26. Re:It's amazing people still use windows. by Anonymous Coward · · Score: 3, Informative

    in the specific case of diffing the contents of two directories, it's just
    $> diff --brief a/ b/

    It just seemed worth pointing out.

  27. Re:Windows "power shell"? by MS-06FZ · · Score: 4, Interesting

    has microsoft submitted to linux and unix? we have had a "power shell" for a few decades now.. You sure about that? I think we have crusty old 1970s shells with a veneer of tab-completion and command history added for convenience. I would really like to see that situation change. I like the CLI and I think it's a powerful way to work - if the shell is up to the task. CLI shells ought to be able to, for instance, access the GUI (if any), as well as interact with running applications. These tasks can technically be done with just about any shell - but only in the sense that a program that runs under the shell can do some task and report back information to the shell environment - and the ability to do that is limited by what data types the shell can handle. Bash can handle one datatype, basically - text. It can't handle structured data, it doesn't really support binary data or numbers, let alone live objects you could interact with. I think this is a source of a lot of busywork in traditional shells - you run a program that, say, prints out numeric data from a matrix file, then to process that data the next program in the chain needs to parse the overall output, convert the numbers back to binary, and then probably re-format and print them out as text again. It makes no sense.

    I really, really want the Linux CLI to be modernized. (Lots of time is spent working on the Linux GUI, but it seems like when it comes to the CLI people are content to let it rot.) I've spent a lot of time trying to figure out how I would go about doing that. I've read a bit about PowerShell - it seems interesting, at least, and promising. For instance:
    - It can wrangle live .NET objects and complex datatypes
    - It encourages a unified interface (conventions for command options, etc.) for CLI programs and utilities
    - It applies these new techniques in conjunction with existing, traditional shell mechanisms, like pipes.
    - It endeavors to make documentation and general information about commands easier to access

    Now, there's also things I don't like so much - for instance, the distinction between "commandlets" and normal commands. (To be fair, this is largely due to the fact that most existing code in the world is written either for a traditional CLI or a GUI - so most code isn't going to know how to deal with a smart CLI anyway. But I think there are better solutions.)

    I think it's kind of a drag that Microsoft may now have a better CLI than Linux - but I think that's a situation that can be changed.
    --
    ---GEC
    I'm but the humble pupil, seeking to snatch the scratchbuilt pebble from the master's fully articulated hand
  28. Re:Prompt by Evilged · · Score: 2, Interesting

    Yes you can, you set it in your Powershell profile, look for the function prompt.
    [datetime]::now.ToLongTimeString() give current time btw.
    G

  29. Bean Shell by hachete · · Score: 3, Interesting

    The Bean Shell. That's it. That's what Gonad is trying to copy. Though I forget - who's trying to copy who this week?

    Same problems too as well - memory consumption up the wazoo and slow as hell. Every time you've got to do a "pipe" you need to look at miles and miles of API.

    --
    Patriotism is a virtue of the vicious
  30. Re:I'd love Powershell, if it weren't for one thin by Grishnakh · · Score: 2, Insightful

    It's that slow with a directory with only hundreds of files? I have directories with tens of thousands of files; I wonder how slow it would be with those.

  31. Or, Greenspun's 10th Rule: by mkcmkc · · Score: 4, Funny

    Any sufficiently recent Microsoft OS contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Unix.

    --
    "Not an actor, but he plays one on TV."
  32. Re:Windows "power shell"? by MS-06FZ · · Score: 4, Interesting

    Text is universal, though, and it lets you have a single means of output for simpler programs. Want to read the results immediately? Just call the program. Want to save the results? Dump them to a file to review later. Text is only universal because we've made it universal. This is the same idea behind XML - it's mainly useful because it's recognized. And text isn't "human-readable" - it's binary just like everything else. It just happens that the process of displaying it is rather simple and the programs to do that are already out there.

    If you look at Powershell, they've got the "read immediately" process down - commands like "Format-Table" come to mind. Yeah, big deal, right? It's what PERL was born to do. But nevertheless - if you run a command and it generates an object, a meaningful printed representation of that data appears on the console. If you want it to look nicer, there are commands to format the output. I think the shell would be better if the user didn't need to handle that step explicitly - I have some ideas for how that could be done. (I am very interested in writing a Linux shell with these kinds of capabilities.)

    This makes it trivially easy for programmers to modify the output, or for the users to use it in unexpected ways. It means we don't need a separate program to convert binary data to a human-readable form first. From my perspective you've got it backwards. Every single program in a pipeline chain is burdened with the job of converting "human-readable" data to a useful, processable form - and then back to text again for the next chump in the line. So maybe you save one step, because you don't need to reformat the output of your last command - but you've added on two steps for every command in the chain (minus one, for the first) - and when programs start to get even moderately outside the realm of the common, everyday stuff, the user starts having to deal with those processes themselves.

    Complex datatypes in a shell are only good if you're using a set of languages that can deal with the same objects. With Unix, not all your languages have a concept such as an object -- not even a struct. Even then, you need a human-readable form for them, even if they're converted at the user's request.

    As long as Monad has that, it's probably decent. But that's going to be application-specific. True, that is a problem. Not so much the languages' limitations in handling objects - that's just syntax. You can write object-oriented code in C if you feel like it, and certainly C can interface with object managers like CORBA - it just wouldn't be especially fun. It's more the problem of having a common communication format - that's a hard sell because people don't think they need it, and it's a bit of a tall order to mandate something like that.

    In what sense is Monad's pipeline communication format "application-specific"? It can deal with any .NET object. If you had an object with a field called "Title" that had a value "Foozle", you could access that any way you like. It's not application-specific. You want a human-readable form? "Title : Foozle" pretty much does it. :)
    --
    ---GEC
    I'm but the humble pupil, seeking to snatch the scratchbuilt pebble from the master's fully articulated hand
  33. Re:It's amazing people still use windows. by serviscope_minor · · Score: 2, Informative

    Examples: Bash is pretty poor where your commands take more than one file and, to a lesser extent, where they produce more than one file. For instance if you have two directories a and b and want to do a diff on their contents, what do you do:
    % mkfifo /tmp/lsa
    % mkfifo /tmp/lsb
    % ls a > /tmp/lsa &
    % ls b > /tmp/lsb &
    % diff /tmp/ls{a,b}

    That's just disgusting.


    Yes that is disgusting. Fortunately, you're not the first person to notice this. Try this instead:

    diff <(ls a) <(ls b)

    There is a similar syntax for outputs as well. It's not perfect: you can't easily generate a general directed graph, but in that case, you would probably get deadlocks anyway, since programs tend to read files in order.

    --
    SJW n. One who posts facts.
  34. PowerShell isn't a Shell It's a scripting language by Anonymous Coward · · Score: 2, Insightful

    Linux already has lots of scripting languages.

    For example you have python. Python has several shells you can work with. The default python shell or ipython shell are two examples. Perl has been around forever. Ruby. Haskell. PHP. Lisp.

    Whatever floats your boat.
    Object oriented, procceedural, functional languages. Whatever you want.

    A Unix shell like Bash or pdksh is designed as a _user_interface_. Your ment to work in it for day to day tasks. You don't need to be a programmer to work it and scripting is simple and effective.

    And why text? Because text is universal. Everybody understands text. It's human readable, it's human editable. You can have all sorts of programs that are completely different, but they all understand text. Text is easy, text is how the world is ran.

    So Microsoft actually fubbed this one pretty badly. They aimed for a shell and hit on scripting language. Microsoft Windows already has a bunch of scripting languages. PowerShell is just another one.

    Sure I can run around my file system with ipython and write my own replacements of common unix commands and all sorts of crap like that, but it will take a crapload of work to turn it into something that it's not.

    The reason in Linux you use Bash for scripting is because it's convient. You always need a user interface aviable, and everybody uses it. So it's always going to be around. So you use it for things like init scripts or little things to setup the environment to launch larger programs and lots of other utility items.

    Remember:
    Text is convient, universal, and easy to understand and use (due to human readable nature). Text parsing isn't difficult if you have the proper tools.

    The Unix shell is ment to be used on a daily basis. It's easy to use and convient. You don't need to be a programmer to script with it.. it takes a single sunday evening to get most of the basics down for a reasonably intellegent person.

    It's used for scripting were you have simple, smaller tasks. Or you have tasks were other programming languages are not aviable or may not be present... like init scripts.

    Powershell is neither easy nor convient. Nor it is easy to use for a non-programmer and it's not designed to be a user interface. It's a scripting language. One of many.

  35. Re:GNU/Linux is more than the shell. by jZnat · · Score: 2, Funny

    Oh man, are you bashing PowerShell there? ;p

    --
    'Yes, firefox is indeed greater than women. Can women block pops up for you? No. Can Firefox show you naked women? Yes.'
  36. Re:Digital signatures required for scripts? by Mia'cova · · Score: 2, Interesting

    The default security blocks them. To run unsigned stuff, you have to set it to accept those scripts. Just a one line command you'll see at the top of almost any blog/tutorial posting on powershell, nothing painful.

  37. OT: Your sig by Anonymous Coward · · Score: 2, Funny

    Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.

    I agree with this part:

    anal sex is nice because it works on all genders.

    Java, however, still sucks. :)

  38. Re:Windows "power shell"? by DragonWriter · · Score: 2, Interesting

    ow, there's also things I don't like so much - for instance, the distinction between "commandlets" and normal commands. (To be fair, this is largely due to the fact that most existing code in the world is written either for a traditional CLI or a GUI - so most code isn't going to know how to deal with a smart CLI anyway. But I think there are better solutions.)


    Its not so much dealing with a "smart CLI"—that the interface is a command line one is irrelevant—as dealing with "returning objects to an OO platform". Programs not designed to run on on OO platform (like anything designed to run on Unix or Windows but not something like .NET or the JVM) clearly aren't going to be designed to do this since they have no such platform to return objects to. And most .NET or JVM tools aren't designed to do that, because even though Java shells and Powershell exist now, they haven't for much of the time that the platforms have existed, and aren't the usual way most programmers expect their programs to be used.

    OO shells running on OO platforms will enable new ways of chaining programs together (not just from CLIs, either).

    think it's kind of a drag that Microsoft may now have a better CLI than Linux - but I think that's a situation that can be changed.


    Well, sure, the .NET platform has a CLI that allows you to do OO things. So does the JVM. Linux doesn't, because Linux isn't an OO platform, and while OO platforms exist that run on Linux, none is as central to the OS as .NET is becoming for Windows. OTOH, a "smart CLI" doesn't seem to get you much that an OO scripting language that supports interactive sessions combined with a conventional object serialization format would seem to enable even without an OO platform (and both have similar limitations with regard to legacy programs), so I don't know if Linux needs to have something like .NET to match PowerShell.
  39. Managing hundreds of remote servers by mnmlst · · Score: 2, Interesting

    Thanks to some poor choices in my younger days, I have become a full-blown Microserf herding along 250 Windoze servers, half of them in remote locations. If I had it to do all over again, I would have taken the red pill. This may offend the *nix snobs here, but if MS gets really serious about MSH (the way I keep seeing it when running PowerShell), it will be awesome. I haven't seen anybody here mention that it is built-in with Exchange 2007 and when you run through an E2K7 wizard, the last step is the display of the MSH script that will execute once you click the Finish button. It's also just waiting for you to copy and paste that script before clicking the Finish button, so you can expand it and reuse it later.

    My boss is such a Windoze junkie, he pooh-poohs my scripting efforts at every turn. We often spend hours and hours doing repetitive crap in the GUI's because "we don't have time to work out a script now!". I have avoided getting really deep into cmd.exe and VBscript approaches ever since I first read about Monad during the betas as that crap should be passing away. I've been bursting at the seams for some good books to come out.

    Beware a first effort from MS. If they get serious, the third version will be quite good. In the meantime, a wise sage told me to expect third party vendors to jump on this bandwagon and cook up gobs of stuff to leverage the PowerShelll to save Win Sysadmins keyboard time with canned scripts. That would leave me sucking garbage in the MS Matrix with the rest of the Duracells, but fortunately my boss won't spend any money on decent tools, so I will get to hack out the scripts by hand and really learn MSH. Awesome.

    If you're a Win Sysadmin reading this, be sure to check out http://www.sysinternals.com/Sysinternals and download the Misc utilities package, especially pstools.exe I use them all the time like a telnet session (via RPC) into remote PC's to clear up networking problems on them. netsh.exe then allows me to remove freakin' static WINS and DNS entries in TCP/IP properties, all without disturbing the user. It doesn't take long to learn and it saves gobs of time.

    Now I need to get back to my Linux lessons so I can use some discrete Linux servers on our edge networks, then they can start appearing closer and closer to The Core.

    --
    In principio erat Verbum.
  40. Re:it's obvious THAT YOU ARE A LINUX TROLL by MightyMartian · · Score: 2, Informative

    Why are we talking specifically about Linux here? sh runs on every variety of *nix, has decades of techniques and development, and up until this latest effort by Microsoft, had absolute no competitor in the Windows world. Windows NT servers have existed since the early 1990s without a decent bloody command line. We've been forced to either use goddamn scripting languages like VBScript or go grab sh variants and kludge them into running on *nix.

    It amazes me just how little all the Windows advocates out there actually understand about the world of system administration and maintenance. They're so goddamn addicted to their little GUI tools, and yet they are so often forced to use substandard tools for automation. I'm not saying sh and its descendants are perfect, but compared to that worthless DOSesque piece of shit called CMD.EXE, they're like friggin' Einsteins compared to a low-level functioning mental retard.

    I could give a shit about desktops, about whiz-bang GUI config settings. I find them so appalling inferior to a simple .conf file, which I can open up in any goddamn text editor, modify and save, quickly test and quickly make an easily usuable back up copy. I can administrate a goddamn *nix box with ssh and a text interface, even when I'm forced to go over a dialup connection. The text editors are optimized for terminal usage, which is precisely why *nix kicks the shit out of Windows in the server world.

    Windows administration is an exercise in visual masturbation. It may take me a couple of hours longer to get Samba running, but management is infinitely easier. Follow a few basic rules about backing up conf files, and you can test things out, and if it doesn't work, just copy the backup conf file back, restart the Samba processes, and bang, all the evils you brought into the world just disappear. Windows and its advocates are based on the model that everything has to have fucking check boxes, radio buttons and drop down lists. I mean having to have a bloody script to control GUI apps is so symptomatic of the psychological disease your breed suffer from. Rather than learning how to function in an economical fashion, its all about finding reasons to justify the existence of a GUI on a server.

    I won't debate that for Joe Q. Average, Windows is still at the top of the heap. But don't give me that shit about server environments, where the requirements are so different. I welcome the day when Microsoft gives me a command-line and simple scripting interface where I can modify any part of the system from a terminal session. But even giving us that won't answer horrors like the registry. How could you ever produce a CLI tool that could meaningfully control that. Guess what, on *nix boxes, it's as simple as vi, emacs, or even some Wordstar clone like joe if that's more you speed.

    --
    The world's burning. Moped Jesus spotted on I50. Details at 11.
  41. Re:Come one, sell me this shit. by nacturation · · Score: 4, Insightful

    Imagine someone gave you some library code, but to use the code you couldn't pass in variables, objects, or whatever. Each function in the library takes one input -- a string. The return from the functions are also one output -- a string. You need to convert this to/from any meaningful format in order for you to use it. That is bash.

    Now imagine the same thing, but instead of passing in strings you could pass in/out native data types, full objects, other methods, etc. That's PowerShell.

    --
    Want to improve your Karma? Instead of "Post Anonymously", try the "Post Humously" option.
  42. Re:PowerShell isn't a Shell It's a scripting langu by ratboy666 · · Score: 4, Insightful

    Actually, that is PowerShells biggest weakness as a integration shell.

    The idea benind the Unix toolset and shell is that everything is reduced to a common lingo -- a character stream. Each tool can then be "used as designed", or "misused". The classic example is the original Unix spell implementation. The tool designer promises to accept as wide an input range as possible, to output consistent streams, and not be verbose.

    The actual use (misuse) to the tool is left to the shell and user.

    The Object philosophy means that input to a tool MUST have certain methods available. If the correct methods are not implemented over the object, an adaptor tool must be used. Microsoft ensures that all PowerShell tools work together IN NORMAL USE. Obvious "misuse" is not (necessarily) supported.

    This makes common usage cases easy, but makes "outrageous" cases almost impossible (unless you reach for VC++ and write your own adaptors).

    As an example -- I do a lot of "performance analysis", which entails examination of log files, conversion to normalized scales, and running the results through GNU Plot to get images to paste into reports. There is almost always a need for custom shell scripting to do the log examination and reduction.

    Now, this IS possible in PowerShell, but only by treating it as a "Unix (gasp, how horrible!)" type shell.

    Since the exploration phase (and creative "misuse") is my primary area, PowerShell doesn't have much to offer me. But, for a developer living in the straight and narrow land of "how it should work", it is probably the next best thing to sliced bread.

    As to the "PowerShell" equivalent of the non-Microsoft world: I find that I still (occasionally) cook up SNOBOL scripts. When writing compilers for an old course, it was the ONLY programming language specifically not allowed for assignments (it made lexing, parsing and generation much too simple).

    --
    Just another "Cubible(sic) Joe" 2 17 3061
  43. Re: Windows "power shell"? by Dolda2000 · · Score: 4, Insightful

    Text is only universal because we've made it universal.
    Not quite. Text is universal by virtue of it being a stream of bytes, and byte streams are universal in that almost all current computer architectures, networks, storage devices and other devices handle byte streams. In that regard, text isn't just universal in that all programs that you can pipe together in a shell can handle it, but also since you can read it from disk, store it to disk, send/receive it over a network or even send it over an RS232 link, if you so wish.

    There is, however, no universally agreed syntax for "objects". Sure, there have been attempts, but I doubt any of them will succeed, maybe ever. Different systems have so vastly different opinions of what an object is, and I believe that is how it should be, because if all systems would have to have the same idea of an object, you would be locking them into a predefined design pattern, and innovation might decrease. I don't know if maybe people said the same thing about bytes in the 50s and 60s, so I wouldn't bet my prediction will turn out to be correct, though.

    Of course, this is perfect for Microsoft. They don't want other systems, anyway. As long as anyone can agree on the .NET definition of an "object", Microsoft will be happy. However, even then, the fact remains that not every .NET object is serializable -- you can't just take an arbitrary object and squirt (pun intended) it over the network or store it on disk. As long as you wish to communicate with anything outside your own VM, text (or at least a byte stream) is necessary.

    And text isn't "human-readable"
    Heh, that's one of the weirder statements I've seen as of late. Kind of like saying that you can't "speak" in a telephone, it's just a PCM stream anyway. Call me weird, but I'd argue that text is human readable by definition. I do (kind of) see your point, though, but I don't agree. Text is always human readable, because it has such an internal structure that makes it human readable with an extremely simple and universally standardized (except for charset) algorithm. If you just have an "object", though, there's no universal algorithm for turning it into a visual structure. Usually, each object class even has its own such algorithm, which isn't usually reversible (unlike text), and not every class even does. To begin with, there is, as I wrote above, no guarantee of any sort that an object is even slightly serializable.

    Not that I think that you're wrong in every possible way. I definitely think that an object-oriented shell may have its virtues, but it's never going to work outside its own VM. Text is universal, since you can send it anywhere and receive it from anywhere. That "anywhere" includes a human, too.

  44. PowerShell by IpalindromeI · · Score: 2, Interesting

    I've been using PowerShell for a couple months, and it's definitely better than cmd.exe. However, it's really built more like an interactive scripting environment, with shell features left as an afterthought.

    Only the most basic redirection is implemented. Basically you can use "> file", "2> file", and "2>&1". That's it. You can't create arbitrary fd's and dup them. It's like they didn't realize that the '1' representing stdout and '2' representing stderr actually mean something more general. Oh, and no input redirection. Trying to do:
    somecommand < file
    gives you this error:
    The redirection operator '<' is not supported yet.
    At line:1 char:14
    + somecommand < <<<< test.txt


    Although you can technically use "2> file" to redirect errors, it's actually a big pain. Say your program outputs to stderr for various warnings, and you want to capture those. Well because everything is an object, each error line is converted to an ErrorRecord object, which is then serialized. Unfortunately, the serialization of an ErrorRecord includes a bunch of other clutter. Here's an example of one error line:
    > perl -e 'warn qq[Something bad happened!\n]' 2> out.err
    > cat out.err
    perl.exe : Something bad happened!
    At line:1 char:5
    + perl <<<< -e 'warn qq[Something bad happened!\n]' 2> out.err

    Three lines for every error, with a bunch of clutter to make it hard to read. In order to get succinct log files, I had to write my own ErrorRecord converter to get back to the one line I want.

    Command argument parsing is broken. The parser will split arguments that look like "-x12.34". So if you try to pass a switch with a floating point number as part of it, the program actually receives two separate arguments: "-x12" and ".34". You have to quote the entire thing to get it passed as one argument.

    One major annoyance with cmd.exe that has not been completely fixed is the quoting inconsistencies. Nested quotes don't seem to work right. In most shells, single quotes prevent any interpretation of the string, which is mostly true in PowerShell. So when writing a quick Perl one-liner, I use single quotes to make sure any Perl variables aren't interpreted by the shell.
    perl -e '$k = "hello"; print $k'
    That seems to work, and prints 'hello'. However, try adding a newline:
    perl -e '$k = "hello\n"; print $k'
    Now Perl gives me a syntax error regarding the backslash, which leads me to believe the shell is interpreting the string before handing it to Perl. In this case, I can work around it because Perl has its own quoting operators:
    perl -e '$k = qq[hello\n]; print $k'
    But how would you pass a string like this to some other program where you needed the quotes? I couldn't figure it out.

    As a scripting environment, it's pretty nice. And like I said, it is better than cmd.exe. However, basic shell functionality is semi-broken in many ways, because of the focus on Being Innovative With Everything As An Object.

    PS. Don't forget that the escape character is ` (backquote), and not \ (backslash) like in every other shell/language.

    --

    --
    Promoting critical thinking since 1994.
  45. Re:Come one, sell me this shit. by dedazo · · Score: 2, Interesting
    No, you don't understand. It's not like that at all. The I/O streams are objects themselves, and what you move through them are also qualified objects. It's just difficult to explain. I didn't "get it" either until I had one of those epyphanies like when you realize how std::vector works or how to use multiple CSS selectors or something like that. It's really cool.

    I wouldn't want to write an application with it because of the overhead, but for scripting (especially complex, stateful scripting) it just rocks.

    --
    Web2.0: I love when people Flickr my cuil and digg my boingboing until my google is reddit and I start to yahoo