
Ask HN: How to effectively learn PowerShell? - mondoshawan
I&#x27;ve been looking around for a while now, but haven&#x27;t really found what I&#x27;m looking for. Essentially, what I&#x27;d like to use to learn powershell effectively with is a &quot;powershell by example&quot; page somewhere, similar to gobyexample.com or rustbyexample.com where the tutorial encourages active tinkering.<p>What have you been using to effectively learn the ins and outs of powershell usage?
======
nailer
I also moved from bash (after nearly 2 decades!) to powershell. Here's my
powershell profile, including instructions for setting up a new box and
additional aliases for Unix commands:

[https://github.com/mikemaccana/powershell-
profile/blob/maste...](https://github.com/mikemaccana/powershell-
profile/blob/master/Microsoft.PowerShell_profile.ps1)

Short answer for 'How do I learn powershell?' is:

* Learn 'select'

* Learn 'where'

Once you get those two, and get out of the scraping with sed/grep/awk
mentality you now properly get powershell.

~~~
mastax
There seems to be a certificate request appended to line 46

I don't know if this information is sensitive, but you probably don't want it
there either way.

~~~
nailer
Good spot - CSR is only a public key so not sensitive - but removed.

------
mindcrash
Not sure how much time you have, but if you do not have much I strongly
recommend "Learn PowerShell In A Month Of Lunches" [1]

Basically means that if you can spend about one hour every day on the text and
exercises in the book you will be able to grasp PowerShell scripting in about
a month.

[1] [https://www.manning.com/books/learn-windows-powershell-
in-a-...](https://www.manning.com/books/learn-windows-powershell-in-a-month-
of-lunches-third-edition)

~~~
lwkl
This book is book great and after you've read it I can recommend "The
Powershell Scripting and Toolmaking Book"[1]. I just started reading it and
teaches you how to write good tools with practical examples and business
scenarios. My next step will be learning Pester and DSC.

Also "Powershell in Action" by Manning is great to lookup things in detail.

[1] [https://leanpub.com/powershell-scripting-
toolmaking](https://leanpub.com/powershell-scripting-toolmaking)

~~~
minhaz23
What's a practical way to learn it on a Macintosh? VM?

~~~
mindcrash
Windows VM, or if you are a daredevil you could try and install PowerShell 6
(which will be crossplatform) on macOS from here:
[https://github.com/PowerShell/PowerShell](https://github.com/PowerShell/PowerShell)
(do note its currently in alpha state)

------
vmarsy
I looked at the Microsoft Virtual academy videos [1], they cover a lot of
basics but were usefeul, having the creator of powershell teach the course
helped understand the philosophy behind it.

When searching for tutorials online, "the scripting guy" was useful, but more
importantly I make sure to search for powershell v5, v4, or v3 tutorials. -
There are lots of "old" tutorials, but I think there were major changes
between Powershell v1, v2, and v3, so I try to avoid those, especially
regarding modules

[1] [https://mva.microsoft.com/en-us/training-courses/getting-
sta...](https://mva.microsoft.com/en-us/training-courses/getting-started-with-
powershell-3-0-jump-start-8276)

~~~
liso
I checked this thread out just to make sure someone posted this link. I have
not found a better resource for learning PowerShell anywhere. It covers what
makes PowerShell special, and then gives an excellent primer on the language.
Start here.

------
ZenoArrow
Whilst you might get some value in trying to learn in a structured way, I'd
say you'll get much more out of it if you try to scratch your own itch.

In other words, think of something you want to script, then try to learn how
to do that in PowerShell.

What I think you'll find if you try learning something as vast as PowerShell
with a general approach is that, whilst you may pick up some decent general
habits, you'll also find yourself learning a whole bunch you never use.

Learning PowerShell is different from learning a conventional programming
language as each use case you'll have will make use of different commands.
It's like having a DSL for each use case. You'll use different commands for
Active Directory management, for Azure management, for file processing, etc...
As long as you know the basics you can pick up whatever is going to be most
relevant for what you do.

------
BeetleB
Sorry to piggyback on this post:

I have to use Windows at work, and do not know Powershell. Several times I've
debated learning it, but never put in the effort.

Now I use Xonsh ([http://xon.sh/](http://xon.sh/)). It is a Python shell -
cross platform and similar semantics to bash, etc. I was never a power
bash/zsh user (scripting in them is Hell). The nice thing with xonsh is that
it is Python. If you want to customize your environment, have complex aliases
- well, you just write Python code in your config file.

Learning PowerShell for Windows is the ideal. But xonsh is a good intermediate
solution for people who don't want to invest in going all the way.

(To be honest, I'm seriously considering switching to xonsh for my Linux
machine - currently I use zsh).

~~~
majkinetor
I was totally entusiastic when you mentioned this so I went to read the docs.
While it does seem way "shellier" then pure python I don't think its
comparable to Powershell.

One of the main benefits of posh is that it provides standards on arguments so
that discoverability is easy. Along with that you get automatic tab
completition for everything, module autoloading and nice stuff such as proxy
commands, JEA and other great stuff not avaialble in alternatives. The other
one is that nowdays many tools expose automation via powershell modules - sql
server, visual svn, chocoalatey, vmware, etc. just to name few - so all that
power seems wasted with xonsh on Windows. Not to mention wmi, COM and other
nastier stuff becomes way more problematic then it needs to be. Good luck
driving Excel for example.

There was similar attempt with Ruby
([https://github.com/adamwiggins/rush](https://github.com/adamwiggins/rush)) -
but it failed because you do really need a special language for shell. Its
pitty Xiki ([http://xiki.org/](http://xiki.org/)) didn't become mainstream
talking about Ruby.

Whitespace semantics also look like troublesome in the shell context and I
guess in some more serious usage ambigious stuff like ls -l may become
problematic and hard to detect source of bugs.

On the other hand, it rewards with better Python knowledge which is always
good.

~~~
BeetleB
>While it does seem way "shellier" then pure python I don't think its
comparable to Powershell.

Well, none of the UNIX shells are comparable to Powershell. That's why this is
a nice in-between solution. A way to have a UNIX like shell on Windows,
without the need to learn a new language if you already know Python.

>Whitespace semantics also look like troublesome in the shell context and I
guess in some more serious usage ambigious stuff like ls -l may become
problematic and hard to detect source of bugs.

Been using it for a few months. So far, not a problem. The biggest headache is
that "dir" is a reserved keyword in Python. Not a problem: I just made 'ls' an
alias for it.

The only real problem is that Windows has case-insensitive environment
variables, but xonsh makes them case-sensitive. This is fixable, and they'll
probably fix it some time soon.

~~~
majkinetor
> Well, none of the UNIX shells are comparable to Powershell.

Yes there is one, Powershell :)

Thx for detailed report by the way. I hope the project will get mature and
adopted.

------
Scriptor
[https://learnxinyminutes.com/docs/powershell/](https://learnxinyminutes.com/docs/powershell/)

------
_qc3o
[https://smile.amazon.com/Windows-PowerShell-Cookbook-
Scripti...](https://smile.amazon.com/Windows-PowerShell-Cookbook-Scripting-
Microsofts/dp/1449320686/ref=sr_1_1?ie=UTF8&qid=1484500841&sr=8-1&keywords=powershell+cookbook)

------
nikbackm
I've started reading this one and found it pretty good. As a beginner at
least.

[https://www.manning.com/books/windows-powershell-in-
action-t...](https://www.manning.com/books/windows-powershell-in-action-third-
edition)

------
chris_wot
Powershell is frankly fairly amazing. Recently I found myself needing to open
the Windows datastore.edb file, and before I discovered some interops I
learned that in fact you can grab a C# member definition, then use it as a
signature and load that type as a Powershell object [1]

Hell, I even found a C# code snippet and was able to add into a Powershell
string, then add this as a C# type definition, and Powershell compiled it to
an assembly and then loaded it as an instance of a Powershell object.[2]

1\. [http://www.leeholmes.com/blog/2009/01/19/powershell-
pinvoke-...](http://www.leeholmes.com/blog/2009/01/19/powershell-pinvoke-
walkthrough/)

2\. I found how to do this here:
[https://blogs.technet.microsoft.com/stefan_gossner/2010/05/0...](https://blogs.technet.microsoft.com/stefan_gossner/2010/05/07/using-
csharp-c-code-in-powershell-scripts/)

~~~
teyc
To add further - I found out PInvoke over Powershell works just as well on OS
X.

------
zupreme
This may or may not work for you but it's now I forced myself to learn
PowerShell.

First you need to understand that PowerShell (because of WMI and .net snapins)
can do literally anything that can be done on a windows environment either via
click, keystroke, or code.

Second you need to understand that PowerShell is an object-oriented scripting
language. You can certainly use it in a procedural fashion, if you're so
inclined, but you will be severely hobbling yourself in the process.

Third you need to decide to write (or locate, test, and study) scripts to do a
fair percentage of the things you might normally seek small single-purpose
third party software to do. Want to scan your network for devices, use
PowerShell. Want to bulk, edit AD users, do it in PowerShell. Need to clone a
directory structure? You get the idea...

Take this approach and look for legitimate reasons to use PowerShell every
day.

~~~
selmat
Seconded. In my last job i automated all tedious tasks via powershell. Need to
verify connectivity and documentation accuracy (credentials, snmp strings,
vendors, versions...)? Powershell is solution for me.

Even tcl scripts was parsed, compared and exported to xls with Powershell.
Verify and implement configuratiom template was another case where powershell
was solution.

For me this is my strongest weapon on windows automation and system
management.

And i like it beacuse you can edit in notepad++, sublime, atom,
whatever...save... a run ps1 file. No insane and complex IDE needed, no
compilers. If you need you can do exe files. It's dirty solution, but it
works.

My last project (app for coffe shopps and restaurants) is written in
powershell.

"The biggest issue" for me is support of my scripts on windows with lower
version of powershell or .NET

In regards to original question. "Powershell in action" is my favorite
resource about powershell.

------
oellegaard
Protip: You'll find two app on Windows called Powershell. One is just called
Powershell and the other is called Powershell ISE. I mistakenly picked the
regular one, to later find out that Powershell ISE is epic. It's like a
combination of a terminal and some kind of IDE.

~~~
nailer
ISE is the best for learning but doesn't have good readline support (it's not
quite a normal windows console). Once you're up to speed, grab ConEmu. It's
the iTerm2 of the Windows world.

~~~
oellegaard
At least you have proper copy/paste in ISE :P

~~~
chris_wot
Not if you run RealVNC, it kills cut...

~~~
chime
Thanks for pointing this out. I thought I was going crazy when it happened to
me just yesterday.

------
aytch
I just registered powershellbyexample.com - I'll start updating it soon!

------
ygra
I may be an outlier in this regard. I learned PowerShell by starting to golf
in it. However, while I know the language quiet well, I'm completely useless
at using it for administrative tasks, simply because I've never done that with
it. I use PowerShell as my go-to scripting language, calculator, interactive
.NET playground and a bunch of other things, but rarely for managing Windows
servers.

I can recommend the PowerShell cookbook too, though. I've been a technical
reviewer of the 2nd edition and at least back then it was good :-)

------
AlexB138
dkarapetyan linked a good Cookbook. That's essentially what you're asking for.
In addition to that, when I had to learn Powershell I found "Learn Powershell
in a Month of Lunches" quite useful. At the time it was considered the go to
book for PoSh, but that may have changed.

------
manojlds
For me it was this - [https://stacktoheap.com/blog/2012/10/17/learning-by-
answerin...](https://stacktoheap.com/blog/2012/10/17/learning-by-answering-
questions/)

I started using Powershell and also started answering questions on SO. The
latter helped a lot in quickly improving my skills.

------
nathanaldensr
There is an excellent series of videos on PluralSight. I can't remember for
sure who the instructor was, but I always recommend them to anyone learning
PowerShell.

I _think_ it's this guy: [https://www.pluralsight.com/courses/powershell-
intro](https://www.pluralsight.com/courses/powershell-intro)

~~~
dedhed
Even though this is titled as PowerShell for Mac and Linux, one of the
presenters is Jeffrey Snover who invented PowerShell. He provides some great
information about how the pipeline works and compares it to the pipe system in
Unix. I found it very informative.

[https://www.pluralsight.com/courses/play-by-play-
microsoft-o...](https://www.pluralsight.com/courses/play-by-play-microsoft-
open-source-powershell-linux-mac)

------
13of40
If you can get hold of either Bruce Payett or Lee Holm's PowerShell scripting
books, those are pretty canonical guides, as both of those guys were devs on
the PowerShell team for years. On day one you should get familiar with the
discoverability features built in: get-member, get-help, get-command, get-
member, tab completion, get-alias, etc.

------
w4rh4wk5
There is a well designed tutorial on Youtube, helped me a lot to get started.

[https://www.youtube.com/playlist?list=PL6D474E721138865A](https://www.youtube.com/playlist?list=PL6D474E721138865A)

------
nunez
I still think Bruce Payette'a book on PowerShell is referential in explaining
how PowerShell works inside-out.

As far as learning it goes, there's no better practice than porting your old
work!

------
jamesdftx
I'd recommend: \- "Learn PowerShell in A Month Of Lunches" \-
reddit.com/r/powershell \- the powershell podcast at powershell.org

------
agumonkey
I tried scripting the clipboard through vbscript but got stuck, tried
powershell, it's a one liner.

Seems like a pleasant platform. Thanks for this thread.

------
kruptos
Can someone link a site that was posted on HN a month ago that shows side by
side comparisons between BASH commands and Powershell?

~~~
grzm
Have you tried the Search API below? You can search stories or comments.

Here's a list of likely Powershell submissions:

[https://hn.algolia.com/?query=powershell&sort=byDate&prefix=...](https://hn.algolia.com/?query=powershell&sort=byDate&prefix=false&page=0&dateRange=all&type=story)

------
deostroll
powershell does have its own command for normal scripting stuff...For e.g.
Test-Path, etc...but if at all you are stuck with something you can always
revert to the .net framework...but I still like curl hence I stuck to git bash

------
majkinetor
Effectively, forget about desktop and cmd and only live in powershell. That is
what I do - Posh is my operating system, it autostarts with Windows. In a
several months you will be effective user, but to master it will still take
years.

In this regard, few tips:

\- Install apps via Chocolatey. If app is not there create a package and
maintain it. AU framework makes it one time development event. See this
report:
[https://gist.github.com/majkinetor/a700c70b8847b29ebb1c918d4...](https://gist.github.com/majkinetor/a700c70b8847b29ebb1c918d47ee4eb1)

\- Your profile is very important. I use profile.d which can be reused easily
on all your machines:
[https://github.com/majkinetor/powershell_profile.d](https://github.com/majkinetor/powershell_profile.d)

\- Use Powershell Gallery and modules in general. Make module or reusable
component for everything. See my work here:

[https://github.com/majkinetor/posh](https://github.com/majkinetor/posh)

\- Make sure you use mandatory cli tools:

cinst conemu less peco sysinternals everything copyq

\- Do not use junk GUI editors such as ISE. Visual Studio Code is way better
if you have to. Sometimes is OK when debugging. I would suggest vim because
speed is of great importance in shell world.

\- Follow reddit community and ask questions there rather then on SO which is
full of achievement biatches. Redditors will help you for free for the joy of
sharing the knowledge.

\- Use Github to store all your stuff. Also, in coorporation you can use NAS
share to let anybody import stuff from there.

\- DO NOT LISTEN naysayers about aliases - use default alises all the time.
They are cross-platform and well known and I can go into neurolinguistics of
why is it better and easier for the brain but I don't want to do it here.
People will certainly whine now but ignore them. DEFAULT (READ ONLY) ALIASES
ARE THE BEST. Particularly, if you see somebody does foreach-object or where-
object just kill him ASAP.

\- Do ALL windows config from Posh. If you don't know ask around. If you are
devops dude, you can thank me later, especially when you learn DSC and apply
all that knowledge there or with boxstarter.

\- If you happen to be locked in older posh use PSReadLine. Keep in mind that
$host.Version -lt '3.0' is full of surprises and use latest version if
possible.

\- Do not compromise with others in coorporation. Ask for script for
everything. If sysadmin tells you that server is low on disk you ask for proof
in the form of the command you can execute. Ask for invoke-sql when using
databases. If you give admin a job to create a IIS site for your web app ask
for a script. If you are a project manager, do not close tickets without a
script.

\- If you monitor vendor excursions in your company infrastructure, ask for
transcripipt of ALL operations they do. You will thank me later. Do not sign
their work without it.

I can recommend "Windows Powershell In Depth"
[https://www.manning.com/books/powershell-in-depth-second-
edi...](https://www.manning.com/books/powershell-in-depth-second-edition)

And if you don't enjoy PS almost every single moment you are doing something
wrong.

PS: I do not work for Microsoft :) I just think bash and friends are
ridiculous in 2017 and honestly a little embarrassing. Do not do that -
install Powershell on Linux and Mac if you have to and keep your sanity.

PS2: Somebody will certainly say that ruby/python/whatever is great on linux
side. Ignore them. Those are not shell languages (while great otherwise and
valuable in your skillset - cinst ruby python etc. is among my mandatory stuff
but lets keep perspective here).

Good luck.

~~~
fencepost
> Do not compromise with others in coorporation. Ask for script for
> everything. If sysamin tells you that your server is low on disk you ask for
> proof in the form of the command you can execute. If you give it a job to
> create a IIS site for you ask for a script. If you are a project manager
> like me, do not close tickets without a script.

That may be the worst advice I've ever seen on how to work with others. It's
the PowerShell equivalent of not just preaching veganism but requiring that
anyone interacting with you start an organic garden.

~~~
majkinetor
You must be that click next person. I prefer to think about Posh as low carb,
rather then veganism :)

But more seriously, anything repeatable easily will do. The problem is, Posh
is there on all Windows machines while everything else must be installed
(except cmd.exe which should be forbiden IMO). I heave interactions with 100+
engineers of different domains and the only thing that links them is that they
all use Windows, even 95% of Solaris/Unix/Linux admins. So Posh is the most
practical thing.

If you think reproducibility is bad thing or form of veganism, you should
probably find another job.

~~~
fencepost
Reproducability is great.

No, my concern is that if I submit a ticket that says "when I send 65
characters in the Username field I get random spew back, I think you need to
be checking inputs better" and get a response of "show this to me with a
PowerShell script" then I kick things upstairs with appropriate commentary.

And if the attitude you related in these comments is accurate, I suspect those
engineers all have something else in common: working to bypass you as much as
possible.

~~~
majkinetor
I think that

start my-fancy-app.exe; Sleep; [System.Windows.Forms.SendKeys]::Send("A"*65)

makes it way more reproducible and you even quickly get test from there (would
do that in AutoHotkey tho for better effect, right tool for the job).

> And if the attitude you related in these comments is accurate, I suspect
> those engineers all have something else in common: working to bypass you as
> much as possible.

Actually, its quite the opposite. With that attitude tho, I suspect you get
bypasses all the time.

~~~
fencepost
And if something else has (or grabs) focus and the scripted input doesn't go
where you're hoping it will, does the bug report get marked "can't reproduce"
and closed?

I'll freely confess I'm not up on the current automated testing tools for
Windows apps, but I'm hoping they're more sophisticated that "point and pray"
keyboard spamming.

My concern with the approach you describe is that there are many categories of
application problems that are not reasonably reproducible with a PowerShell
script, some that are reproducible only with a sophisticated script, and some
that are trivially reproduced.

For the trivial ones that are easily reproduced my feeling is that a quick
description going to the developers will probably let them reproduce it more
easily in a development environment with appropriate code stops that would be
adversely affected by automated keyboard injection directly to Windows. For
Windows app development if I put in a code stop to inspect state after each
keypress, blowing 64 extra "A"s into my dev environment after the stop is
unlikely to be helpful.

For problems that require more sophisticated scripting to reproduce, I'm
unconvinced that I want to be requiring that all testers be able to write
sophisticated test scripts. Maybe you have a ton of VC money and feel that
burn rate isn't relevant, but that doesn't describe everyone. Sure, I want
some good automated test scripts and the ability to say "When we run script
XYZ with input set ABC it blows up" but scripting reproduction of every
scenario? (expletive) no.

Basically you're putting up a sign that says "I don't care what problems you
have found, if they can't be reproduced with an automated script I will reject
them." That doesn't keep those problems from existing or being found, it just
ensures that you don't try to fix them and eventually (if you're still around)
it means that you don't hear about them either. That may never cause real
problems, or someday you may get an email from Tavis Ormandy or someone you
have even less desire to hear from.

Edit: it just occurred to me - basically this is a "captcha" system for bug
reporting, but one with the potential for arbitrary puzzle difficulty
potentially unrelated to problem severity or reproducability.

~~~
majkinetor
Didn't I tell AHK is the tool for that job ? It handles stuff like focus
stealing, theming etc without any problems. Seriously, if there is no test, it
might just be your high sugar levels. I don't know in what kind of stuff you
are, but we develop software and services that entire country uses. If you do
not make a test you can regress and it will probably happen in the worst
possible time.

Also, I don't have testers, only developers. Testing is the part of the job
which is mandatory. Along with some other stuff. :)

------
iamkarlson
How have i learnt powershell: 1\. Replace cmd to powershell everywhere 2\.
Make you routine tasks automated by ps 3\. Connect to remote machines by
powershell only .... PROFIT

~~~
chrisper
So how well does number 3 really work? Is the experience similar to Linux and
Bash in the way that you can do everything in the console.

~~~
iamkarlson
Yes, ps is very advanced tool. Difficult to find information how to do certain
things but when you found them you have jedi power

------
YeGoblynQueenne
I believe the best way to learn powershell is by using it as your shell,
everyday, for real-world tasks, particularly in your job.

Start small, with ls, cp and cat, and don't force the pace. psh is a shell
first and foremost- a shell with a very nice language, but a shell all the
same. So get comfortable using it as a shell.

First thing is to create your $PROFILE. Google for an example and see if you
can edit it to suit you. Then get chocolatey, PSCX (psh community extensions),
posh-git and vim, and get used to doing most of your work on the command line
(like you'd do with bash, on Linux). See what tasks you can automate by
writing a few short scripts- very simple things at first, like copying and
renaming files, setting up directory structures and so on, then progress to
processing xml and setting up scheduled tasks, and sending email, setting up
credentials etc. After a few months you'll find that you can wean yourself of
windows GUIs for most of your everyday tasks and probably all of your not-so-
everyday ones.

psh being a command-line tool, it's far easier to learn it like that, than
trying to learn the language first. You can learn the basics of the syntax
allright, but there's a bazillion commandlets that you will never be able to
remember, unless you use them in your everyday work, and incorporate in your
scripts, and those commandlets are often integral to the use of psh.
Basically, you can't separate the language from the use of the shell, so you
shouldn't try. Learn them both at the same time.

    
    
      %        %        %
    

Here's my personal example: I learned psh to avoid the long rdp queues in a
past workplace.

I guess that company didn't want to shell out for more windows server licenses
and so there was a limit to the number of people who could rdp to a server at
the same time- just two or three people per server. So there was always a bit
of a queue and I often had to wait between a half hour and a couple of hours
before I could get a slot. Or someone would go for lunch and forget to log
out, and you had to kick them out and it was generally a big drag.

At some point I started using psh as my windows shell, and then I found out
about windows remoting [1], which sounded a lot like ssh on Linux- basically,
it lets you open a shell on a remote computer. Next time I had a slot on a
remote machine, I enabled remoting and suddendly I could do all the work I
needed on the command line, while everyone else still had to wait in line for
an RDP slot [2]. Needless to say, this made my life and my job a hell of a lot
easier, not to say pleasant (I might have had a few smug smiles on my face, at
times).

I'll note there was only one thing I couldn't do remotely: running a
proprietery installer for the company's platform, that only had a gui and no
command-line options. Everything else, including a whole bunch of SQL stuff, I
could do it remotely, on psh [3].

All this naturally pushed me to do more psh scripting, as it was easier to run
a script than key in a dozen commends on the command-line. So I left that job
feeling very comfortable with powershell, and although I didn't quite have to
use it that much in any other job since, I still use it as my primary shell at
home.

____________________

[1] I think it started with this article, whose title immediately caught my
attention:

[http://www.howtogeek.com/117192/how-to-run-powershell-
comman...](http://www.howtogeek.com/117192/how-to-run-powershell-commands-on-
remote-computers/)

[2] Noone else cared to learn powershell. I did ask. They said they didn't
want to have to learn a new programming language. To be fair, I never
explained my remoting setup to anyone, because they would probably tell me to
stop using it (I was just a junior dev at the time). Note also that I never
enabled remoting on any of our public-facing servers, just in case there was
some vulnerability that could be exploited.

[3] I also used vim and netrw to edit my scripts on the remote server
directly, over a UNC path, so I didn't have to re-upload them every time I
needed to change them. This was a very Linux-y way to do stuff and really
unusual where I worked.

~~~
fencepost
Unrelated to PowerShell, that sounds like information wasn't making it to the
right people if the limit - 2 administrative connections were being used like
that for regular terminal services access, or like it would have made sense to
split services across more systems if you had multiple people routinely doing
simultaneous system changes on single servers.

RDS CALs aren't cheap, but they're a one time cost and insignificant compared
to the cost of staff sitting around waiting for RDP sessions to free up.

~~~
YeGoblynQueenne
Aye right, there was no reason for all that. But, this was far from the only
case where the company could have optimised its processes. For instance, as a
junior dev, my work primarily consisted of copying some stuff off a
spreadsheet (as in, with Ctrl+C), pasting it into a text file and creating
some xml structure around it by hand. That was an extremely time-consuming and
error-prone process and it caused all sorts of delays and frustrations, to
myself as well as everyone that depended on my work.

I spoke up about those inefficiencies very early on, but I was very
inexperienced at the time and, to be honest, I had no idea how to properly
communicate this sort of thing, so I never got anywhere. I only managed to
come across as snotty and get a reputation as a trouble maker.

After that I just kept to myself and focused on getting some experience with
C# and learning psh and so on, generally learning as much as possible until I
felt confident enough to look for a better job- which I took as soon as I
found it.

Generally, I was really unhappy in that company, but at the same time, exactly
because I had to jump through hoops and learn how to automate my work, I
taught myself a whole bunch of stuff that were very useful in my next job
(where, btw, I had a great mentoring relation with my boss). So it all turned
out alright.

------
diminoten
I dunno if this is the kind of advice you're looking for, but what I've found
is forcing myself to do everything with an unfamiliar tool helps a great deal.

------
knocte
I strongly recommend against learning Powershell, it has horrid syntax and is
not crossplatform.

It wants to be a pseudo C# but without being C#. And anyway you can use
scriptcs nowadays to write scripts in C# (or even better: .fsx scripts, with
F#, which is more succint, less verbose than C#).

~~~
jodrellblank
I strongly recommend against believing people who say PS is not cross platform
when it is available for macOS and Linux and is open source too.

~~~
robert_tweed
Interesting. Does it actually work though, or does it tend to depend on
Windows-specific assemblies to do any useful work?

The main use-case I have for Powershell is remotely administering Exchange. If
I could do that from OSX or Linux, then that would be useful enough for me to
spend the time learning it.

~~~
NetStrikeForce
> The main use-case I have for Powershell is remotely administering Exchange.
> If I could do that from OSX or Linux, then that would be useful enough for
> me to spend the time learning it.

I guess you can always do powershell remoting? Apparently it also works from
Windows to Linux!
[https://github.com/PowerShell/PowerShell/blob/866b558771a20c...](https://github.com/PowerShell/PowerShell/blob/866b558771a20cca3daa47f300e830b31a24ee95/docs/new-
features/remoting-over-ssh/README.md) (got pointed there from this Reddit
post:
[https://www.reddit.com/r/PowerShell/comments/4ziw85/anyone_m...](https://www.reddit.com/r/PowerShell/comments/4ziw85/anyone_manage_to_get_enterpssession_or/)
)

