← Back to context

Comment by TheRoque

5 days ago

Powershell feels like it's not built to be used in a practical way, unlike Unix tools that have been built and used by and for developers, which then feels nice because they are actually used a lot, and feel good to use.

Like, to set an env variable permanently, you either have to go through 5 GUI interfaces, or use this PS command:

[Environment]::SetEnvironmentVariable ("INCLUDE", $env:INCLUDE, [System.EnvironmentVariableTarget]::User)

Which is honeslty horrendous. Why the brackets ? Why the double columns ? Why the uppercases everywhere ? I get that it's trying to look more "OOP-ish" and look like C#, but nobody wants to work with that kind of shell script tbh. It's just one example, but all the powershell commands look like this, unless they have been aliased to trick you to think windows go more unixish

First, that expression is overly complicated, shorten to:

    [Environment]::SetEnvironmentVariable($name, $value, "User")

You have un-necessarily used a full constant to falsely present it more complex. Please also note that you have COMPLETION. You are not forced to type that out. Second, you can use an alternative

    Set-Item HKCU:\Environment\MY_VAR "some value"

Third, if you still find it too long, wrap it in a function:

    function setenv($name, $value) {
       [Environment]::SetEnvironmentVariable($name, $value, "User")
    }

    setenv MY_VAR "some value"

Also, can you please tell the incantation for setting an env variable permanently in bash ? You cannot since it doesn't exist.

Powershell's model is far superior to Bash. It is not even a contest.

No, they don't all look like that, the brackets are an indication you're reaching into .NET and calling .NET stuff instead of "native" PowerShell commands which take the form Verb-Noun. Which can be a legitimate thing to do, but isn't the first choice and seems like an example deliberately chosen to make PS look more awkward than it is. I question whether, for this particular example, `echo 'export MY_VAR="my_value"\n' >> ~/.bashrc && source ~/.bashrc` is really all that intuitive either (and hopefully you didn't accidentally write `>` instead of `>>` and nuke the rest of the file).

What feels good to use is very, very dependent on personal preference. I think Powershell is much more pleasant to use than bash. You obviously disagree, but bear in mind that not everyone shares your preferences.