6 ms·
The only problem is that Powershell as language is pretty bad. I wouldn’t want to write my vB6 projects in Powershell.
by Ididntdothis 7y ago
The only problem is that Powershell as language is pretty bad. I wouldn’t want to write my vB6 projects in Powershell.
- SOLAR_FIELDS 7y agoIt’s definitely one of the ugliest languages (syntax wise) that enjoys widespread usage, at least in Microsoft land.
- Ididntdothis 7y agoThe cmdlets are super useful but the language is just really weird.
- worldsayshi 7y agoIt seems that shell scripting languages tend to be quite ugly out of necessity? I mean bash is not a looker.
- SOLAR_FIELDS 7y agoPossibly, though bash is from a much earlier time when shell scripting language design probably wasn’t a very well known topic and bash evolved more naturally from open source. Powershell is much more recent plus had much more complete control over the language to prevent the kind of syntax warts bash has. Even then I would still probably take bash over Powershell for scripting but that’s probably more because of familiarity than anything else.
- asveikau 7y agoThe first release of bash was in 1989. Shell scripting was already a thing at that time. Csh and ksh were also around for roughly a decade at that time. I think you are confusing bash with sh with this kind of statement.
- mattmanser 7y agoThey had an opportunity to make a whole new, good, scripting language. And blew it spectacularly.
- Ididntdothis 7y agoThe decision to make the console output as the return value of a function alone almost destroys it for larger scripting projects. It’s a really bad decision and they could still fix it by adding some environment variable that disables this “feature” while staying compatible with old scripts.
- apalmer 7y agoPREACH But just so you are aware you can use the 'class' modifier To change this behavior. It is one of the most fundamentally bizarre language design choices I have seen in my career
- Ididntdothis 7y agoI have used classes too but this has all kinds of other weird behavior.
- ptx 7y agoThis behavior? https://devblogs.microsoft.com/powershell/suppressing-return-values-in-powershell-functions/ https://devblogs.microsoft.com/powershell/suppressing-return... It seems like it might make some kind of sense, since it doesn't output directly to the console but rather to a pipe. Bash functions sort of work the same way since they don't have complex return values (aside from exit codes) other than the function's output stream.
- Fr0styMatt88 7y agoYeah, keep in mind that the output is a fully-fledged object, it is not the text you see. The text is generated by the PowerShell host if the returned object makes it back there and the host is set up to present that object to the user that way. Take the following in PowerShell: ls | sort DateTime -d ls returns an array of objects, sort then sorts the array by each object’s DateTime field (and here I’m asking it to sort in descending order with -d). The point is that sort isn’t depending on any text output, so it works with any array of objects regardless of the command that returned them. The other cool thing this enables is auto-complete awareness in the shell. If I typed: ls | sort <Tab> then the shell knows what makes sense in auto-completion here as ls has an actual return type and in this case it will give me a list of available fields that I can sort on. For those unfamiliar: ls and sort here are shortened aliases to more wordy verb-noun commands. These (as well as a large bunch of others) are given to you by default.
- samatman 7y agoIt isn't inevitable by any means, fish shell scripting is clean and pleasant. I use fish as my command line, but I still write scripts in bash, even personal ones I only expect to use on my own machine. Just out of a vague sense that I might reuse it, or it might escape confinement, or something.
- mattmanser 7y agoIs it widespread? I've never seen anyone else using powershell 'in the wild', admittedly for the last 3 years I've mainly worked alone, but I still see people using CMD scripts. I usually get frustrated with it and bash out a quick cmdlet instead.
- Ididntdothis 7y agoIt’s pretty widespread if you have to do sysadmin scripting. There are a lot of useful cmdlets. I am embarrassed to admit that I also run it on my Mac with good success.
- PascLeRasc 7y agobash out Freudian slip?
- toyg 7y agosysadmins who are fully invested in the MS ecosystem do use it a lot. People doing cross-platform work, don’t. In terms of wider adoption, it suffered by maturing at a time when a lot of people had moved on to more powerful devop solutions. And of course, being MS tech (although technically it was acquired), it carries a stigma. I just found it un-intuitive, ugly, and verbose. Compared to my beloved python it looks really really bad.
- vbezhenar 7y agoCMD is the worst language I ever saw. It's full of hacks for simplest tasks. The only reason I'm using it is for old systems where PS is not preinstalled. I used PS to write small scripts and I actually like it. I'm more fluent with bash, but that's only because I used bash a lot. PowerShell feels more robust, no silly space-in-filename problems, no silly parsing of text output to access fields. May be it's ugly for big scripts, I don't know, for me it looked like a vastly superior version of shell. I would love to learn why people think that power shell is ugly, especially comparing with bash.
- Fr0styMatt88 7y agoI don't find it ugly, just strange. It's optimized for interactive usage though from what I understand. I think of it mostly as calling .NET methods that all have named parameters: myfunc -param1 this -param2 that instead of: myfunc(param1: this, param2: that); I get the impression it's designed with the intent that you're supposed to type the dash, then hit Tab to get tab-completion in most cases. Same with the verb/noun syntax (I know I want to 'Get' something, so typing Get-<Tab> for the list of things is usually the thing to do). I do find it a bit difficult sometimes to think of an approprioate verb right off the top of my head (is it Get- or New- that I need?). I'd also love to see the concept of proper namespaces in PowerShell; it seems really inconsistent right now (unless I've missed something). For example, type Show-Command and hit ENTER, then look at the different modules that are available. Some will express a 'namespace' by having it prepended to the noun (see for example, commands from the BitLocker module, their nouns all start with BitLocker) while others express no namespace at all (see for example commands from the 'Dism' module). For everyday use I've gone with the 'add the name to the noun' approach in my own scripts. That does mean I tend to use short namespace names though. I've mentioned this in an older PowerShell-related thread here - MenuComplete is absolutely awesome and improves the PowerShell experience in the console. I actually think it should be the default. If you havent already, try these commands: Set-PSReadLineKeyHandler -key Tab -Function MenuComplete Set-PSReadLineOption -ShowToolTips PowerShell is my full-time shell in Windows now (and it will be in Linux also when I get back into it); I rarely use CMD for anything and parsing text in bash just seems antiquated.
- Pxtl 7y agoYeah, I write a ferocious amount of PowerShell it's an amazingly bad language. I use it for its API, but its language design is a nightmare. I'm not talking about its unorthodox syntax - that's the least of its problems. The language is hellishly inconsistent and has an inexcusable number of legacy issues for being so young. And the quality of the standard library is poor. More and more often I find I have to drop down into .net commands to work around showstopper bugs in their PowerShell wrappers.