Microsoft Releases PowerShell DSC For Linux
jones_supa writes: Microsoft is announcing that PowerShell Desired State Configuration (DSC) for Linux is available for download in form of RPM and DEB packages. DSC is a new management platform that provides a set of PowerShell extensions that you can use to declaratively specify how you want your software environment to be configured. You can now use the DSC platform to manage the configuration of both Windows and Linux workloads with the PowerShell interface. Microsoft says that bringing DSC to Linux is another step in the company's "broader commitment to common management of heterogeneous assets in your datacenter or the public cloud." Adds reader benjymouse: DSC is in the same space as Chef and Puppet (and others); but unlike those, Microsofts attempts to build a platform/infrastructure based on industry standards like OMI to allow DSC to configure and control both Windows, Linux and other OSes as well as network equipment like switches, etc.
Microsoft has done a lot right lately, but PowerShell isn't one of those things. It's just so ugly. PowerShell's syntax is just plain bad, like Perl's. And it still feels so much like using CMD.EXE. Then there is some stupid security setting I remember always running into whenever I want to use it. All in all, PowerShell is awful to use. Microsoft should have gone with IronPython instead for scripting that has integration with .NET.
PowerShell is a modern shell.
Benefits: .NET Framework
- Object oriented, so no awkward parsing of strings. Every item is automatically delivered in its own capsule.
- Integration with other Windows subsystems and the
- Comes with a mini IDE called PowerShell ISE for developing scripts
- Excellent documentation with lots of examples (the Get-Help command)
- Intuitive, easy to remember command names
Every time I have used powershell it has been anything but intuitive or easy to remember.
When you cant win, ad hominem.
It is a lot easier to embrace an "open standard" when you developed it yourself, then donated it to a consortium.
http://en.wikipedia.org/wiki/O...
"- Comes with a mini IDE called PowerShell ISE for developing scripts"
No. A shell that has an IDE to aid formulating godforsaken scripts that mere mortals can't even remember. Just no.
I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
Absolutely. The ability to pipeline objects as opposed legacy stdio pipes is a killer feature. It make PS way more powerful than typical Unix shells. You can do one liners that do so much!
I've been developing software for 25 years, across most major platforms. Anyone who trolls Poweshell because it came out of MS is an idiot biggot.
It's (far) superior. Period.
Why the hell did they put the verb first in command names? They're all Get-This or Set-That or Export-Those or Write-These. This makes an alphabetic list of commands useless, because it groups by verb instead of by noun. It's just one long list of Get- commands, for example, that then need to be searched to find the relevant noun. They should have put the noun first.
It's a M$ "standard".
Indeed. When it gets complicated enough that an IDE is beneficial, I go Perl or Python. (And I still do not use an IDE for those. IDEs are crutches for beginners.) Shell is for simple-clear-fast(to do) only.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Very few people are "trolling" Powershell because it came out of MS, they don't like it because the idea of chaining objects in a pipe is stupid. It's way more complex, the names are extremely long and non-intuitive, and you can't possibly keep the current state at each point in your head. Text is far, far superior because it's easy, standard, and simple. There's a reason we've had it for 40 years and it's still going strong.
It sounds like you dont use it often, which is hardly a good reason to knock it. But I can offer a few tips:
1) Remember that just about everything is an object, with one or more attributes and methods. Even strings are objects, and can use methods such as ".equals(System.obj)". Get-Member is your friend for determining what methods and attributes apply:
"This is a string" | get-member
2) All (properly made) commands take the form of [verb]-[noun]:
get-member
set-ADUser
remove-item
get-help
3) When iterating over a group using "foreach" or "where-object", the special variable $_ is used as a placeholder for the current element:
@("arrayIndex1", "arrayIndex2") | foreach { write-host $_ }
@("RedFish", "BlueFish", "BlueBird") | where-object {$_ -like "blue*"}
4) When in doubt, use one of the following:
Get-Help [command]
Get-Command
$variable | get-member
$variable | format-list *
Im of the opinion that it takes all of about 8 hours to learn to do the majority of things you would want to do in powershell (partly because thats about how long it took me). You just have to take some time to sit down and learn it, and then make an effort to use it instead of GUI administration tools. It is far, far superior to old windows command prompt and vbs,
1. What is awkward with string parsing? Is this shell aimed at _incompetent_ people?
2. And that works how on Linux?
3. An IDE in a Shell? Is the syntax so bad that you need an IDE? Or is this another effect of being aimed at incompetents?
4. Aehm, know any mainstream modern shell that does _not_ have excellent documentation?
5. Seriously? I found the command syntax exceptionally awkward and badly thought out. I am back to a cygwin console for most things.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I was piping objects in Smalltalk, Python and even Perl years before .NET even existed.
Have you ever seen init scripts? Theyre way more painful to deal with than anything powershell ever is.
The reason they have an IDE for it is because you can use it to do incredibly complex things, like design GUIs that tie in administration elements from Active Directory, SANs, switch configuration, virtual infrastructure configuration and deployment, and computer administration-- all in one language with a common syntax.
Doing something like that would be a nightmare in bash. It sounds like you havent used powershell, which is a pretty good reason not to comment on it.
It makes a difference because cron and rsync arent good tools for changing a configuration across a mixed environment with a single interface.
Text is simple..yes, but how do you do something like recusively search a directory, filter those by say... owner, date range and also contains a regex within the file...then pipe that file subset off to the next component...say an archive (g)zip... All on a single line?
Your csh/bash script is painfully long by comparison. It's one line in PS.
Like any tech...you need to learn how to use it yes. By choosing to ignore it...you are only being unproductive...or another way to put it...your expensive to my projects and bottom line...
Powershell is a shell written by programmers who have no understanding of what you want when administering a box. I remember when it surprised me the first time by being clever and inheriting the size of the console and automatically inserting a CR/LF into the lines of the files I was trying to process.... morons. Just because you can do something doesn't mean that you should, yes OO is a powerful construct but it just gets in the way of a simple scripting tool. Powershell is littered with little gems like this that make it absolutely useless. If you find yourself doing too much with a shell script rewrite it in a more powerful programming language like python, it should take you all of 30 minutes.
Im of the opinion that it takes all of about 8 hours to learn to do the majority of things you would want to do in powershell (partly because thats about how long it took me). You just have to take some time to sit down and learn it, and then make an effort to use it instead of GUI administration tools. It is far, far superior to old windows command prompt and vbs,
I think the same can be said about any *nix shell. Having used powershell a few times, it really just feels like a kludged attempt to bring CMD.exe to something closer to bash.... 20 years later. Now the question becomes just because you can use it, does it mean you should? Last I checked, Windows still has a lot of protections from even the simplest modifications. I much prefer being able to see /etc/fstab than working with some nebulous class with functions that barely make sense.
No, developers don't want this. Administrators? Administrators? Administrators?
You can't tell me that it wouldn't be a tiny bit practical to have an IDE help you with the syntactic fun of bash in these cases.
That would require admitting that all is not right in paradise - something an ideologue could never do.
I am Slashdot. Are you Slashdot as well?
Hopefully it's MS's attempt to either get real developers to use it and justify its cost, or to ignore it and maybe finally get BASH in windows so it can stop sucking so much.
Instead of trying to unreliably and painfully get out the data you want with a chain of cut, sed, awk, tr on a untyped text string etc you can just get what you want from a object.
All Unix shells are text-oriented. PowerShell is unique in that it is object-oriented and represents a big leap and innovation in shells.
Honestly, this 'new microsoft' is going to be the death of the Linux community.
I miss the days when they just stared at their navel and ignored Linux/Android etc
Their 'help' and 'openness' are pissing in our pool and going to confuse new kids when they choose the path of freedom
rule 314: If it has the word 'power' in it, its not.
Yes.
What the hell kind of sadist is going to manage their machines from a Linux machine running PowerShell?
"Unsupported configuration" is the first hurdle that I'd foresee, followed by just being plain, unnecessarily painful.
Only for windows admins that are forced to manage linux servers,. I can do a lot more with old linux tools than powershell have ever had the capability of.
Do not look at laser with remaining good eye.
What does powershell has that python or perl does not have?
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
find . -type f -user root -ctime +7 -print0 | xargs -r -0 grep -l "blah" | xargs -r tar cvzf blah.tar.gz
I can do a lot more with old linux tools than powershell have ever had the capability of.
What is it that Powershell can't do?
Don't forget: x = 3
doesn't work.
while: x=3 does.
The l, r-value and assignment operator can not be tokenized by whitespace.
I can do a lot more with old linux tools than powershell have ever had the capability of.
What is it that Powershell can't do?
I hear that it's incompatible with systemd
*Ducks and runs
I'm a minority race. Save your vitriol for white people.
I think the same can be said about any *nix shell
Clearly you've not done much UNIX shell scripting, if you've not been bitten by the issues with having to escape strings multiple times.
I am TheRaven on Soylent News
At this rate, we'll see MS commit stuff to Wine not long before Christmas.
I'll start a collection for all the tormented souls in Hell, as they'll need lots and lots of warm clothing as the ice age dawns upon them.
Question for religious people: where do unrepentant masochists go when they die?
Why would you want to do that with a scripting language ? I thought that's what MMC was for.
While nice sed tetris isn't a good idea either.
Microsoft alienated people who weren't paying attention. Server 2012 and newer can be run without a GUI at all. It doesn't matter what they do with Metro UI, it's not a competent sysadmin's problem.
I am sorry, I have no idea what you are talking about. String parsing is bread&butter to any competent system administrator. Also, who puts spaces in their filenames?
That said,
find /home/johndoe | md5sum
makes an MD5 hash of all the names found. Maybe you have no idea what you are talking about? In fact,
find /home/johndoe -exec md5sum \{\} \;
works perfectly fine with spaces in filenames and does individual per-file MD5 hashes as it should.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
The nix shells I have used are very powerful, but also very, very painful to learn. Learning sed / awk syntax could easily fill 4 of those 8 hours I mentioned; and thats not even getting into how each and every tool has its own unique idea of how to do syntax. What does a -z switch specify? I dont know, probably fire up that man page and dig through it. What about -h? Is that help, or human readable?
it really just feels like a kludged attempt to bring CMD.exe to something closer to bash.
Theyre not even remotely close. They both operate on the idea that data should be passable between consecutive commands via a pipeline, but bash makes no attempt to deal with different types of data nor any good way to determine what data is incoming. Powershell solves this by being object oriented, and letting you easily determine the type of data coming in, export it to XML, and reimport it at a later session if desired.
As an example-- if you have an error in bash, whats the stack trace look like? Do you have a good way of capturing it? In powershell you can reference the $error[0] variable, and pull up any piece of info you might need to troubleshoot, or even just export the whole thing by "$error | export-cliXML -file C:\somefile.xml" if you're running a nightly job; any issues can later be imported into a new session to diagnose.
Now the question becomes just because you can use it, does it mean you should?
Yes. If you deal with IT infrastructure at all, you would be absolutely crazy not to learn it; its explicitly supported (with native commands) by:
* ALL of the major virtual infrastructure providers (VMWare, HyperV, Xen
* All versions of windows
* A great many storage providers (EMC, NetApp, probably others)
* A number of network infrastructure providers
* IIS, and Exchange -- like it or not these are huge players
* And anything else you want to add support for yourself-- I note that Hadoop for example has community support for powershell
By support, I dont mean in the sense that you could use bash to launch SSH to manage these things. I mean in the sense that VMWare allows you to run the following native powershell commands:
Connect-VIServer myVMCluster
Get-VM | Where-object {$_.powerState -eq "PoweredOn"} | foreach { stop-VM $_}
And all of your VMs will be shut off. Trying to do something like that in bash is doable, it just requires screwing around with scripted SSH access to the VMhosts which is painful, for anyone who has done it.
I much prefer being able to see /etc/fstab than working with some nebulous class with functions that barely make sense.
This is a criticism of object-oriented languages, not powershell. You might as well rail against .Net, or Java, or C++.
Good post. I'm an open source fan or fanatic, but that does not mean The Unix Way (tm) has lead us to paradise. There's a lot of room for improvement.
Does Microsoft think there are not enough vulnerabilities in Linux?
They will not get bash to work well under windows. The problem is the brain-dead and overcomplicated NTFS permission system. There is no way to get that handled without just as over-complicated and brain-dead "special" tools.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
An MMC would not allow you to use a text-field to search for a user, press a button, and have a new VDI instance spun up, storage provisioned, and permissions configured.
A more common use case would be what I described, but without the GUI, repeated 100 times for 100 different users.
Nice.
I've used Powershell several times to write more complex scripts that I would normally have installed Perl on a Win64 system to handle but didn't want to in those particular cases. It worked pretty well once I got all the permission issues worked out, and got kind of familiar with the syntax.
It was still extremely painful to use. The bloody verbosity of the platform (it really is a platform - not a language) was the worst part. It seems to have been engineered straight out of the com-sci-professor-that's-never-had-to-build-anything's handbook. There is no compromise for anything, few shortcuts. The functions were not sensible in my opinion, as some other posters have mentioned, they would use terms that simply had more syllables than obvious synonyms that are normally used for such things. An IDE was necessary so you could scroll through the list of available functions to find the one you were looking for as they were generally not that obvious. Once you get used to them, sure, it's not as bad, but it's still like having an ankle hobbled compared to both knees.
I would say it's fantastic compared to your standard batch script. If that's all you've ever known, I seriously pity you.
I would also say it needs to compromise a great deal to be reasonably useful to people building system scripts, especially coming from unix environments where we've had such tools for $AGES, and have always been asking why our Windows brethren would put up with such silly useless systems.
I would say that the above you say would be a nightmare in bash - it would be much more trivial in perl, which is what I commonly use for such things. A quick for loop to rename files? Definitely bash. Holy cow is that a pain in Powershell.
Lastly, I would say: man pages. Sure, MSDN, but not when you don't have network access, or were you cool with installing 1.7gb more files (seriously??) to support it? Space is cheap until you are running out, at which point it's immediately more expensive. It's just a no-brainer.
Overall, I think Microsoft is incredibly late to this game, over-engineered something as is the norm, and is using marketing tactics to heighten its adoption rather than working on its usefulness. If they could drop in better in-line documentation especially at the command-line (GUIs are great when you have plenty of monitor space and are actually using a UI instead of the console, when you really need to be confident in what that switch is about to do to your last snapshot), make a lot of aliases for the functions (not just the objects) they've developed for the various classes available, and make many of the more commonly used functions statically available directly in the shell instead of buried deep down in some class infrastructure, I for one would be tossing all of my Windows Perl installs (sorry ActiveState, but they're really just band-aids!).
Having an IDE for scripts isn't necessarily a bad thing. Scripts are often complicated beasts.
bash has a heck of a lot of builtins, and then there are external executables. Remembering the commands, the syntax, and so forth for all of this can be quite challenging.
Just to take a very simple example. For the sake of this post, I was going to say "assign a variable a different variable + 1". So, I tried doing that in bash.
x=3 y=$(x+1)
Oh, right, I need another $
x=3 y=$($x+1)
Hmm. no. Right. Double parenthesis in this case.
[snipped]
done file
You can't tell me that it wouldn't be a tiny bit practical to have an IDE help you with the syntactic fun of bash in these cases.
I can tell you that you're doing it wrong - what's wrong with bc? And yet, $() vs $(()) is dead simple to remember, so simple that I hardly use bc. It's not just the bash shell that's powerful, it's all the utilities that go with it - cut, sed, grep, etc. It's the fact that the less trivial logic can be written in python, perl, hell even some other compiled program.
The value of bash is ironically not bash itself, it's the ability to use some third-party program, which was never designed for anything other than plain-text, in new scripts. I'm not sure how powershell competes with this, due to never having used it. But I have to ask, how do I use powershell on my csv file if I first want to run 'sort -u' on it and then 'sed "s/,,/0.01/g"'?
I'm a minority race. Save your vitriol for white people.
You have the syntax memorized, but the problem is that the input flags for 'find' aren't the same as the ones for 'xargs' which in turn don't overlap with the ones for 'grep' or 'tar'. So that's four different sets of input flags you had to master. Congratulations on your skill. If you run into a text manipulation that's really complex, you have to use sed, awk, or Perl.
PowerShell has its warts, but the command flags are more uniform and its own help search is simpler. Complex text manipulation isn't as complex to implement because a.) you're working with objects and b.) you don't have to learn sed, awk, or Perl to get the job done.
I hate Microsoft's practices, their use of patents, and the windows registry among many other things. But it only benefits the open source community if we examine their tools closely and learn from them. Not everything they do is an inferior knock off of Unix practices.
Because there's no such thing as an assignment operator in bash. Everything is a string token at first (even numbers aren't number unless you're in arithmetic evaluation context), and then tokens get interpreted in various ways once split by whitespace.
x = 3 happens to be three tokens, the first one being the command 'x', the other two being parameters '=' and '3' to command 'x'.
x=3 is one token and it doesn't mean assignment unless it's in the command preface where assignments take place.
This is from 'man bash', under SHELL GRAMMAR / Simple Commands:
A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator. The first word specifies the command to be executed, and is passed as argument zero. The remaining words are passed as arguments to the invoked command.
The AC failed to recognise the $(command) construct, which is 'execute this command and give me its output as a string.
And the AC also messed up the arithmetic. This is what should have been written:
x=$((x+1))
This three are even better:
((x = x + 1))
((x += 1))
((x++))
Variable expansion happens in the arithmetic context (see 'man bash' / EXPANSION / Arithmetic Expansion), so doing $(($x + 1)) is actually wrong, because if $x expands to 'y' then you end up with $((y + 1)), which might be useful sometimes, but given the lack of understanding shown it's probably not what you're actually trying to do.
RTFM means 'man bash' in this case. It may take you a day to go through it and experiment with what you learn in each section, but it's worth it.
Question for religious people: where do unrepentant masochists go when they die?
What if you actually wanted and md5 hash of the directory listing? Now what?
That *does* give you the md5sum of the directory listing. To get the md5sum of every file you'd use
.`
md5sum `find
I'm a minority race. Save your vitriol for white people.
I only see this causing issues.
1) Windows Admins writing power shell scripts to do stuff on linux boxes
a) setting permissions to 777 because they got in the way.
b) why will it not write the file to c:\?
c) A power shell script developed and tested on Windows, then pushed out to all the servers and crashing the Linux boxes.
c) Do you really believe that a Linux admin would allow a windows Admin to run a Power Shell script as root?
2) Linux Admins being asked to manage windows servers because "You know Power Shell" (If they can get the Linux admin to manage the 300 windows servers on top of the existing 500 Linux servers he manages, it saves them headcount and $$$)
Personally I see it going the way all the other Microsoft products have gone when they release a Linux version. It gets adopted by a few windows admins that are forced to work on linux. However the Linux admins and the bulk of Linux systems will never see it or use it. It will eventually get dropped because of the bugs, memory leaks, and issues that are found in it. Those that are never fixed because they concentrate on the Windows version and ignore the Linux version.
Judging from history it is another Embrace, Extend, Extinguish attempt. Microsoft is just pulling from it's old bag of tricks.
It moves binary blobs around, is poorly documented, and is hated or ignored by sane people. It sounds exactly like systemd.
The bloody verbosity of the platform (it really is a platform - not a language) was the worst part
A few things-- the language has a large number of shortcuts, like "fl" instead of "format-list" or "?" instead of "where-object" or "%" instead of "foreach". But the verbosity of it is not really a bad thing, as it makes the resulting code at least somewhat self-documenting; its crystal clear what each command will do most of the time.
An IDE was necessary so you could scroll through the list of available functions to find the one you were looking for as they were generally not that obvious
This is what tab-completion or get-member or even "get-help [command] -examples" is for.
A quick for loop to rename files? Definitely bash. Holy cow is that a pain in Powershell.
$date = get-date -format yyyyMMdd
get-childitem -filter *.txt | foreach {rename-item $_.fullname "$date_$($_.name)"}
Really not that painful.
You mention usefulness- the usefulness as you said is that its a platform supported by an incredible number of vendors. Just about every piece of infrastructure I've come across has vendor-provided powershell integration; the ability to take output from a get-VM command and pass it into a storage provisioning command makes a number of tasks incredibly easy.
Lastly, I would say: man pages.
get-help is your friend, and is far superior to man with the -detailed or -examples switches. Not sure where you're getting the "1.7GB", but this page indicates that the size is more like 9KB.
This is pretty misleading. OMI is Microsoft's pet 'standard'. They know the politics of DMTF to get things the 'standard' rubber stamp, but it has no bearing on actual applicability to the general environment. Basically going OMI means a pretty crappy set of flaky abstraction/instrumentation has to be put on the target that doesn't actually provide any more value than the open source competitors. CIM/WBEM has long languished for lack of anyone wanting to do it, and MS is trying to force the issue by doing OMI.
XML is like violence. If it doesn't solve the problem, use more.
Build a script library based on short mnemonic commands.
Powershell's naming conventions and basic script library is insanely verbose. Man I hate that language. Damned useful, to be sure, and light years better than any Windows automation tools that came before it, but how I long for commands like sed, ls, mv, cp, head, tail, and so forth.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Every time I have used powershell it has been anything but intuitive or easy to remember.
Once you get used to the naming system then it is quite intuitive. And if you don't know how to do something then it has some built-in mechanisms to make it easy to find out how to do things. For example, if you don't know how to import a CSV file, try get-help *csv* and it shows all the aliases and commandlets and pertain to CSV importing and exporting.
Then with tab completion you can Import-Csv - and press tab after the dash and view all the parameters of the command. If you choose -Encoding press space then press tab again and it displays the options just for that argument (the different encoding types).
So all that was found without having to look up help files. You didn't even need to look at get-help to see the list of commands. Just type *csv* and press tab and display the commands interactively.
So yes it is a verbose language, but that makes it easier to discover the commands to use.
Powershell works that way because MS controlled the development of the vast majority of components that normal people interact with. It delivers a framework to let third parties do it 'the right way', but there's a lot of missing stuff and when you interact with the few CLI friendly executables that existed, you are right back there.
Basically, you could use 'python' as a shell and have the same benefits, complete with the awkwardness of interacting with non-python executables. In MS world, this is less disastrous because non-python executables were pretty rare anyway and they did a good job of chaining instead to .Net stuff.
XML is like violence. If it doesn't solve the problem, use more.
Systemd will fix that soon enough.
It's not really fair to say that Powershell is, "a kludged attempt to bring CMD.exe to something closer to bash.... 20 years later." You can argue that it's kludged (I don't think it really is) or that it's late to the game (it is), but it's not really like Bash. Bash treats everything like text, whereas Powershell treats everything as an object. Bash relies on a lot of stand-alone applications being chained together, whereas Powershell tends to have more built-in functionality which is supplemented by various extensions.
Whether you like those differences or not is a different issue, I suppose, but it's not like Bash. It's not even trying to be like Bash.
There isn't modern shell on Linux except perhaps the scheme shell.
Unix shells have traditionally been process-based, all the commands, pipelines, and job controls are around processes which are inefficient and inflexible. Take the common find+grep for example, every files "find" find spawn a new grep process, which is an very expensive operation (compared that to the same ability offered by IDEs and text editors), considering the OS has to load "grep" and re-initialize c-library and other pointless stuff, for nothing but a simple regex checking which is no more than a line of code in Perl or Python.
PowerShell is different and could be considered modern (not that the idea is new; it's been decades) because it's component-based, or function-based. The idea is that instead of individual programs with coarse grained / limited parameters and functionality, administrators would be working with OO components or C-functions, which enables you to do something like glob()+regexec() in place of find+grep, in the same process, single-threaded or distributed among multi-threads to utilize multi-cores on modern CPUs. It should give much better flexibility and very fine-grained control, just like real code.
I fail to see how it could possibly work well on Unix-like systems though, since there is no standard for component infrastructure (COM/ActiveX/.NET/) here and so far reusable components only exist in rather trivial desktop programs; Developers of most important GUI apps on Linux also don't give a shit about common interface (PS: Chrome, Firefox, OpenOffice, etc) and development of basic utilities have been stagnated for many years. It'd have a better chance on Android, to integrate system services via Binder.
PS: It's actually just like Python or Perl, with some shortcuts for shell-like job control. The main difference is the availability of reusable components on Windows and backing of entire Windows system which makes it useful for many management tasks.
I hate and mistrust Microsoft as much as the next guy, but let me say this:
* Mathematics is powerful because you take two numbers and an operator and as a result you get something that you can re-use in the same fashion
* Unix is powerful because you take text files and an operator and as a result you get something that you can re-use in the same fashion
* Relational DBMSs are powerful because you take two relations and an operator and as a result you get something that you can re-use in the same fashion
* Monad Shell (now called Power Shell) is powerful because you take object streams and an operator and as a result you get something that you can re-use in the same fashion
A Monad really is something where you put (typically) a constant into a function and get out a specialised function (like, you put 5 into your Monad and out comes a function that takes an integer and returns that same thing plus five).
The Unix world has Perl Shell, Python Shell, and something that the Power Shell is a copy of, the Haskell Shell.
https://github.com/chrisdone/h...
http://www.yesodweb.com/blog/2...
Best regards,
Oliver
No. A shell that has an IDE to aid formulating godforsaken scripts that mere mortals can't even remember.
What about an IDE for formulating normal scripts that mere mortals can even remember?
I don't see what the objection to an IDE is. If I'm writing anything more than the simplest script, I find it helpful to have some kind of debugging tools.
Powershell's warts, or at least it's biggest wart, its extreme verbosity, is what turns me off. Yes, the GNU toolkit, while having taken great strides to create uniform argument syntax, still retains some legacy cruft, but Chr-st almighty, the sheer amount of typing for even the most mundane scripts just makes me loath Powershell. I still prefer sh and its descendants, and I'll admit that is in part because I've been using them for 25 years, but Powershell is just way too bloody verbose, and it's why I still do most of my scripting in bash.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Can't you have some sort of aliases in PS? A genuine question.
1. What is awkward with string parsing? Is this shell aimed at _incompetent_ people?
No, PowerShell is aimed at admins who want *robust* scripts - both the ad-hoc ones they whip up as well as the ones they choose to save. String parsing is extremely brittle, and most bash shell scipters do it the insecure and brittle way because it is easier.
String parsing is often thrown off if presented with unusual characters in file names, if executed in locales where dates and numbers are both generated and parsed different, etc.
2. And that works how on Linux?
OMI is available on Linux. Read the FTFA
3. An IDE in a Shell? Is the syntax so bad that you need an IDE? Or is this another effect of being aimed at incompetents?
You're the incompetent one. There's is no "IDE in a shell". The ISE *is* the shell - much like if you did bash scripting from emacs. The difference is that the ISE will provide you with intellisense (automatic suggestions), help, syntax highlighting, snippets, multiple script panels, integrated source-level debugging (complete with breakpoints, variable inspection etc) and even a command "builder".
4. Aehm, know any mainstream modern shell that does _not_ have excellent documentation?
Most *nix shells have good documentation. PowerShell has good documentation as well. All of the cmdlets have syntax descriptions (automatically generated from metadata), description and multiple examples. In PowerShell even user-defined functions, cmdlets and script files can have the same level of documentation. Comment based help (look it up) makes it super easy to document scripts and functions. And the auto-generated syntax diagrams and parameter descriptions also work for your own script files.
5. Seriously? I found the command syntax exceptionally awkward and badly thought out. I am back to a cygwin console for most things.
PowerShells command syntax is extremely consistent. Cmdlets are *always* of the verb-noun form, and there are only about 40 or so standard "approved" verbs. Parsing of the command parameters is the responsibility of the *shell* not of the commands like in *nix shells. Hence, all commands follow the same convention with no strange outliers like e.g. dd. Parameter names are always "long" - but can be abbreviated as long as the abbreviation is unambigous.
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
They will not get bash to work well under windows. The problem is the brain-dead and overcomplicated NTFS permission system. There is no way to get that handled without just as over-complicated and brain-dead "special" tools.
Yes, there is no concept of SUID/setuid on Windows. So there's no sudo "happy go lucky".
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
I don't think you are going to reach an accord on Powershell syntax. I personally find it tedious, and frankly the Verb-Noun thing is backwards (Noun-Verb would have worked better, I don't need to know all the things I can 'Get', I need to know the things I can do to a Disk). That said, there is a convention, which is something that cannot be said for the more diverse set of shell commands.
In general the two camps need to recognize the situation for what it is. Empowering Microsoft shops to manage Linux workloads. It isn't going to win over a Linux shop to start using Windows if they don't already.
XML is like violence. If it doesn't solve the problem, use more.
Other organizations have tried and failed to do this sort of thing, simply because they are superimposing their own stuff on top of the stuff that really does the work. So you either have the code complexity of code managing the tooling that is really doing the work, or the code managing the work, doing the work, and some middleware that doesn't add meaningful value, but does add complexity. Having translation layers rarely does nice things for maintenance and stability, regardless of who is doing it and what the platform is.
XML is like violence. If it doesn't solve the problem, use more.
Build a script library based on short mnemonic commands.
That's easy to do with set-alias. It already has built-in aliases for mv, cp, ls, cat, diff, echo, lp, man, ps, pushd, rm, wget and many more. Use get-alias to see the list of them.
For the other commands you listed, I use UnxUtils. It's a lot lighter than cygwin, although the versions are very old.
can be run without a GUI at all
Not true, or else you wouldn't be able to run 'notepad' on the console. Not that this is necessarily a big deal, but the Core editions are not GUI-free, they start cmd in a window. If you ignore the graphics console and use EMS only, the GUI is still running, just not visible to you.
XML is like violence. If it doesn't solve the problem, use more.
IDEs are crutches for beginners.
I'm always surprised that this old-school condescension still exists today. An IDE is a tool. Sometimes it's the right too for the job and sometimes it isn't. Not using one doesn't make you a leet haxor.
I just pooped your party.
I agree. That said, and with all my not liking Powershell very much, it is a useful shell and it is vastly better than cmd.exe. If it gets more people to understand what the commandline is about, that is something. Might also make it a lot easier to get an MS admin to do at least some things on Linux and maybe even look at the native shells.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
This is a workaround to enable (ancient) management methods to be effective in an environment that *many* people have already abandoned.
Massive, heterogeneous, "Enterprisey" deployments benefit from far more complete tools than fucking PowerShell, and nobody I want to work with wants wholesale management of *any part of the thing* through a proprietary black box.
Last time I tried Powershell, it had one major drawback that made me stop using it. Binary output (like PNG) from one program cannot be piped to another program without getting corrupted.
Powershell has some really interesting innovations, so I hope people give it a shot and make constructive criticisms so it can be improved.
And THAT is the reason why I install msys on windows machines, just to be able to use bash.
You misunderstand. I find that IDEs stand in my way and make me slower. They also make it harder to concentrate on the core of the problem. I am not declining to use them on principle. In fact, I try one from time to time when I learn something new (last one was the Python IDE), but so far I have always dropped them pretty soon because they were not very useful. The only thing I dropped really fast was that hacked-together atrocity Eclipse, when I found that a) it was hard to use my own text-editor and b) the IDE did not notice that I had changed a file. Really, who in their right mind forces developers to use one specific editor?
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
You can configure alias's quite easily in poweshell and in fact there are numerous alias's built-in for common commands. Out of the box powershell includes a ton of short alias's including "gci" and "ls" as aliases for Get-ChildItem, % is an alias for ForEach-Object, cp is an alias for Copy-Item, etc.
You can get a list of all alias's defined using Get-Alias (or gal). You can also create an alias using Set-Alias (or sal).
Microsoft generally encourages people to use the full command names in scripts for readability and to make them easier to maintain but there is nothing to stop you from using aliases everywhere including in scripts.
Why do I need another utility when I can just use the proper syntax?
Those examples are wrong.
GNU/Linux copy command: cp
Powershell: cp
GNU/Linux delete command: rm
Powershell: rm
Yes. It even comes with something like 150 aliases predefined. Including ls (get-childitem), mv (move-item), cp (copy-item), and lots of others you'd expect if you're familiar with Linux.
Karma: Poor (Mostly affected by lame karma-joke sigs)
Oh, that's right. You can't. It's not a PowerShell script.
Even more fun when you're calling out to the shell from some other language.
You can accomplish almost any task with fewer keystrokes in PowerShell compared to bash - and the resulting command will still be more readable.
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
Systemd will integrate powershell someday
aaaaaaa
I'm still trying to get over the upgrade to systemd, you insensitive clod!
Tomatoe Tomato.
Actually I also do $(($x+1)) as per example in http://pubs.opengroup.org/onli.... (Arithmetic section)
But I think I will have to revise that behaviour as it could allow circular problems or "arithmetic injection". Thanks for making me aware of this.
First : Office on a Linux Variant (Android)
Second : Code Text Editor
Third : PowerShell tools
(...)
[last step] Abandon the costly development of the unsecure and buggy Windows OS and use only some new library à la Wine and a Windows-like graphics shell on a Linux Base OS
(more profit less cost)
Ceci n'est pas une Signature !
WBEM is a decades old open standard implemented by just about every major software and hardware manufacturer out there. It's shipped with just about every OS. The computer you are using right now probably has CIM implementation built in or at least available in the core OS.
The standard is managed by the Distributed Management Task Force which includes most top software firms. Here is the Java JSR-48: WBEM Services Specification and Implementation for example.
What Microsoft is giving the open-source community is a CIMON ( CIM Object Manager ) implementation. This is fully standards based and Microsoft is just donating the code. But as mentioned earlier Ubuntu and most OSes already ship with a lightweight CIMON.
Try to concatenate big files... Powershell FIRST load them in RAM before to get them concatenated... If the files are too large, the process fails. Cygwin is a better replacement in his own platform.
Huh. I had no idea that using an IDE that integrates git so that we can version control our scripts and config files is "for beginners."
Seems more like "the right way if you actually work with other people."
Slashdot still doesnâ(TM)t support Unicode after it was added to the HTML standard in 1997.
The same thing in Powershell would be:
invoke-webrequest http://server/path/to/file -OutFile file
or use the built-in alias:
wget http://server/path/to/file -OutFile file
In the Linux world, Powershell is very limited. You may think it's powerful, but it's really very weak. If you know linux well enough, you have complete control over everything including the kernel.
So you claim, but I have yet to hear of anything that can't be done in Powershell. Undoubtedly there will be something, but I think that most of the time when people make this claim it is because they just assume that it is the case. But when asked to back up the statement...
Well, we can see what has happened. Just further vague claims.
* And anything else you want to add support for yourself-- I note that Hadoop for example has community support for powershell
By support, I dont mean in the sense that you could use bash to launch SSH to manage these things. I mean in the sense that VMWare allows you to run the following native powershell commands: Connect-VIServer myVMCluster Get-VM | Where-object {$_.powerState -eq "PoweredOn"} | foreach { stop-VM $_}
And all of your VMs will be shut off. Trying to do something like that in bash is doable, it just requires screwing around with scripted SSH access to the VMhosts which is painful, for anyone who has done it.
That's assuming that you haven't put your ESX hosts in lockdown mode or disabled SSH access, which is obviously a security best practice. If you have done these things then you can't script the actions without PowerShell.
And it's not just VMware, either. How do you manage directory services? How do you manage storage? How do you manage networking? More importantly, how do you do it remotely and at enterprise scale? Most of the major hardware vendors out there now have PowerShell modules for managing their products, because it is quickly becoming the de facto method of managing systems for companies that use Windows server. I get that Slashdot has a fairly strong pro-linux/anti-Microsoft bias, but unless you are one of the few that live in a 100% linux/Unix world then PowerShell is the way forward.
For anyone who has any sort of legitimate interest in learning what PowerShell is intended to be, take a few minutes to look over the Monad Manifesto. It was written by Jeffrey Snover, the "father of PowerShell". He's not some pro-Windows shill that just popped up at Microsoft, his pedigree goes all the way back to DEC and before.
You mention usefulness- the usefulness as you said is that its a platform supported by an incredible number of vendors. Just about every piece of infrastructure I've come across has vendor-provided powershell integration;
Sounds like that is the primary benefit of powershell.
"First they came for the slanderers and i said nothing."
Comment removed based on user account deletion
And with a whole different argument syntax.
I like conciseness. It's a personal preference. I use Powershell when I have to (which is fortunately fairly rare these days), admit it's significant power, particularly with Server 2012, and yet there's nothing it does that I can't do in Bash.
And yes, I know "OBJECTS!" Don't care. I end up having to filter everything to ASCII text anyways, so I find it an irritating extra step and distraction. You like it, bully. I think it has to be the worst shell since C shell.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Because, like, you can't execute one sh script in another sh script! Oh thank you Microsoft for giving us what 40 years worth of scripting coders never had! How did we ever live without Redmond?
The world's burning. Moped Jesus spotted on I50. Details at 11.
If they had just given us Bash with extensions for handling Windows internals, we'd all be a lot better off. But Microsoft is allergic to the notion of cooperating on toolsets. It has to constantly make Windows special and unique.
But, you know, OBJECTS!!!!!
The world's burning. Moped Jesus spotted on I50. Details at 11.
Exactly. It's a Windows-only shell, a glue for all the shitty cruft that constitutes the upper layers of the Windows OS.
I use it when I have to, and that's it.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Who has been doing this? Scanning through the posts here shows a lot of nay-sayers who are obviously uninformed, but I don't see any people saying that Powershell can do things that Bash can't without offering an example. And even if they do, why don't you ask them for examples like I did?
In the meantime, I still have to keep asking what it is that Powershell can't do.
find . -type f -user root -ctime +7 -print0 | xargs -r -0 grep -l "blah" | xargs -r tar cvzf blah.tar.gz
Your example perfectly highlights the crumminess of the UNIX command line.
$_ is a stolen construct from Perl.
That was one of the things in PowerShell that I actually understood right away, from working with Perl for 10 years.
Slashdot still doesnâ(TM)t support Unicode after it was added to the HTML standard in 1997.
The ability and manner in which one does things are very different. Being able to do something does not mean it is easy, convenient or maintainable, for example.
It can't be concise.
Yet I have already shown you that it has built-in short aliases for common functions (some which use standard Unix names), and you can add your own. For the long commands and parameters Powershell has tab completion that is miles ahead of bash as it works for parameters and values too.
When the initial remark was "I can do a lot more with old linux tools than powershell have ever had the capability of" and the grandparent said "If you know linux well enough, you have complete control over everything including the kernel", then short (and cryptic) command names is an underwhelming example to choose.
You missed the point.
This isn't about being able to install PowerShell on Linux as some kind of bash replacement. This is about being able to have an agent on Linux that talks to the same "Desired Configuration Management" system you're already using on Windows servers, and have already scripted things in PowerShell.
This isn't for you, because you clearly aren't using Windows server with Microsoft's DCM solution, and you aren't looking to extend that solution to Linux instances. This is the Microsoft version of Chef or Puppet, with a cross-platform client. Using PowerShell.
Slashdot still doesnâ(TM)t support Unicode after it was added to the HTML standard in 1997.
Those were impressions, not examples. Impressions cannot be wrong.
Have you never heard of people getting the wrong impression of something? I have merely corrected the impression that Powershell will always be verbose where *nix is concise.
Too bad that's not the parameter list wget accepts. I can see that causing confusion.
Nah. In PowerShell:
iwr "http://server/path/to/file.zip" -outf "${env:TEMP}/file.zip"
You can try to make it look more verbose. But expect to be called out on it.
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
The sheer amount of typing? Tab is your friend. Learn it, use it, love it.
The only shell I can think of that could possibly be called "modern" would be PowerShell, so this question is a bit odd.
Or use Powershell minimally.
The world's burning. Moped Jesus spotted on I50. Details at 11.
In Unix-land we call that using "STANDARD IN AND OUT" you should check the man page on that, friend. Every single language in any Unix or POSIX system has a known way to address the shell: stdin, stdout, stderr. I know, SUPER COMPLEX, guy, But like I said, read the read-me .html .docx for your OS by issuing the command; sudo halt. Thanks!
This is the NSA, we're gonna geet U h@x0r5! Also, what is a h@x0r5?
Some of those binary blobs though can be useful to move such a way. I recently had to merge, name match , rename and update a few thousand files on windows. I had to manually move them to a unique folder for initial seperation but the I typed ls -name :export-csv l..\list.csv
I then was able to use excel to match file names to what I wanted them to be renamed as and the used another csv to do batch renaming of the files in seconds with the csv containing the files to be renamed and their new file names.
That would have been much harder to do in bash.
While powershell is a bit wordy (think AppleScript wordy)and binary blobs can cause other issues it really isn't a bad set of tools. Better than dos cmd.
i thought once I was found, but it was only a dream.
Part of SCCM is the DSC for Windows servers. What this allows is to validate (ie. scan) for changes to the default build for servers, desktops, and provides integrated reporting. While there are many tools to do this, it is free from MS (minus the OS and SQL DB). If adding Linux to this is a possibility, having your compliance and reporting in one tool, which can leave you from having to run tripwire enterprise or the like due to compliance requirements, might be a win.
I am not saying it is the best thing on the planet, but if it does what the theory states, that would be a huge deal to have 1 less tool to manage to provide compliance reports.
Certainly, people can change their impressions, but impressions are not facts. Only the impressed can decide that his impression is incorrect.
If you have the impression that he was stating a fact, that's your impression. Your impression is not wrong.
My impression is that he was stating his impression.
In no way, did anyone claim that Ananonymous Coward was stating a fact that aliases are not a feature of PowerShell, but you seemed to have the impression that is what he, in fact, stated.
I think that you have put way too much thought into this. It is just not important. The original comment was inaccurate and just not insightful. If it is so wrong to correct the examples offered, then perhaps it was equally wrong for the AC to make the original post in the first place as it serves no point other than to perpetuate the myth that the language is too verbose to use.
I do acknowledge your pedantry though.
Exactly. Somehow running in console mode has been redefined as not automatically starting EXPLORER.EXE.
The world's burning. Moped Jesus spotted on I50. Details at 11.
I don't see any D/L links of the pages that are referenced, only an MSI installer.
"I believe in Karma. That means I can do bad things to people all day long and I assume they deserve it." : Dogbert
When I was trying to learn Dutch, the biggest impediment I had was knowing some German. It's similar enough to feel familiar, but that familiarity leads to frustration more often than not. I think this is the biggest handicap in feeling comfortable with PowerShell is not the fact that it is not better or worse, but different. Once you get the hang of the verb-noun attribute conventions it becomes fairly easy to intuit ways to do what you want to do (or navigate the inline help). Microsoft has made the syntax and paradigms (sometimes annoyingly) consistent. I once wrote the back end infrastructure for SpecExplorer's SMB tests to exercise a FreeBSD CIFs server. The ability to embed inside the PowerShell test scripts, the C# code needed to implement ssh connections and adapt the behavior of windows shell "objects" to affect a POSIX SMB server was beautiful and elegant. I'd probably have to use Python or Ruby to do something similar on a real POSIX box. And then there is the issue of portability. Unless your POSIX shell script works in dash, it probably is not as portable as you'd like to think. On the other hand, pure PowerShell script that doesn't exercise platform specific extensions tend to be very portable (on windows).
Nothing evolves faster than the word of god in the minds of men who think themselves divinely inspired.
It's Microsoft's attempt to blur the line between *nix and Windows, with the hopes that future morons will go "Well, I guess I don't need *nix"
Embrace, extend, extinguish. This is the same Redmond we know and love.
The world's burning. Moped Jesus spotted on I50. Details at 11.
that's the bloody misconception; a perfect all-in-one fits-all universal command line interface.
it's the tooling's limitations glued by scripting language you choose that leads to unintended but creative and useful matter.
the powershell's achilles heel is just that, the power of all the master of none.
Nano mode in Server 10 removes the GUI stack and the Win32 WoW components for a true 64bit native headless install. It's even componentized so that it will only run the services you define which is an optimization looking towards the Docker container integration.
There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
That's assuming that you haven't put your ESX hosts in lockdown mode or disabled SSH access, which is obviously a security best practice. If you have done these things then you can't script the actions without PowerShell.
You can, using vRealize Automation, it's just painful and so task specific that most places won't bother and therefore the time invested to learn it is of fairly minimal value versus learning Powershell which can be used across many problem domains and products.
There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
It can't be compiled by me, from source code.
If you have a need to recompile Powershell, it would be because it lacks something. What is it lacking? I understand that ideology is important and that open source is a reasonable thing to prefer, but that it not an answer to my question of what Linux does that Powershell does not.
"DSC is in the same space as Chef and Puppet (and others); but unlike those, Microsofts attempts to build a platform/infrastructure based on industry standards"
:)
That one almost snuck through
Um, no. Keep your filthy Microsoft hands off of my system. Security! Security! Security!
Select from tblFriends where interesting >= 4;
Now the question becomes just because you can use it, does it mean you should?
My job is 100% Windows. I tried talking the admins into switching to Linux. Oh, hell no. I have to learn PowerShell programming if I want to advance in the company. *sigh*
"Those who don't understand UNIX are condemned to reinvent it, poorly."
I gave up with the idea of an useful sig...
get-help is your friend, and is far superior to man with the -detailed or -examples switches. Not sure where you're getting the "1.7GB", but this page [microsoft.com] indicates that the size is more like 9KB.
I remember the first time I tried to check get-help. Windows required that I download those 9KB of files before they could be used. This seemed very silly to me. Why wouldn't the OS install come with those by default?
Fair enough, so seriously, how do you do this on an exchange server... /usr/sbin/postqueue -p | /bin/grep MAILER-DAEMON | /bin/cut -f 1 -d ' ' | /usr/bin/xargs -n 1 postsuper -d
Which would build a list of bounce messages and purge them from the queue?
I think it's cute, how Windows people gave Unix (and Linux) people grief, for 20+ years, because they thought the command line was "archaic". Now that Microsoft has a halfway-decent shell, it's the best thing ever.
Sit, Ubuntu, sit. Good dog.
Thanks for mansplaining that for me. You must be a hit with the girls.
Yet I have already shown you that it has built-in short aliases for common functions (some which use standard Unix names), and you can add your own.
... which is why you shouldn't trust the behavior of those within your scripts, unless you redefine them all at top. For example, most linux distro's include a default alias of "ll" to "ls -alF" or similar, but you won't see that used in scripts.
Powershell has tab completion that is miles ahead of bash as it works for parameters and values too.
apt-get install bash-completion
It works for parameters and values too. Your info is WAY out of date if bash completion lacked that support the last time you used it. It can get really really fancy too. "apt-get" is a good example of one that has excellent bash completion:
$ apt-get i
$ apt-get install apa
$ apt-get install apache
apache2 apache2-mpm-event apache2-prefork-dev apache2-utils
apache2.2-bin apache2-mpm-itk apache2-suexec apachetop
apache2.2-common apache2-mpm-prefork apache2-suexec-custom
apache2-doc apache2-mpm-worker apache2-threaded-dev
That also works for remove, only showing items that are already installed.
It won't surprise me if powershell *can* do similar levels of completion, but, and maybe this is my background or something, it's not going to feel as natural and it's unlikely to have as many truly useful items in place (ex. the apt example is impossible without a similar package manager, and that's just not in the cards).
The thing is, The Unix Way allows for improvement without throwing (decades?) of coding into a bin and starting from scratch.
yush
This sentiment was probably common among Windows admins at the lower end of the competence scale (admittedly a large group) who were projecting insecurity about their own skills.
I spent years molesting the cmd environment to do things that I could have done much easier in just about any unix shell, so powershell is indeed "the best thing ever", in the context of my job at a Windows-only shop.
I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
There is nothing wrong with a good UI for common administrative tasks. Windows is designed to be operated by people with a varying skill levels.
I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
That would have been much harder to do in bash.
I hope you're joking. That would be a one-liner using the find command and a regex to rename the files.
It's lacking the ability to vet the sources.
Il n'y a pas de Planet B.
Yeah, I agree on the argument syntax. They should've picked Linux style arguments, given they're wider spread.
Either way, though, if you're on Windows, it's your best option. Cygwin sucks.
Karma: Poor (Mostly affected by lame karma-joke sigs)