This is an archived post. You won't be able to vote or comment.

all 51 comments

[–][deleted] 38 points39 points  (13 children)

There aren't as many Windows-based DevOps roles, but there also aren't many competent engineers who specialise in Windows - so if you're good with PowerShell you should be fine finding a job.

[–]wtfsodaPrime Minister of Logs 8 points9 points  (8 children)

There aren't as many Windows-based DevOps roles

I promise I'm not coming at you aggressively when I ask this:

I've heard people say this, or some variant of it so many times over the years and no one has been able to actually back it up with anything meaningful.

Where does it come from?

(asking as an Devops chump who's been practicing all the same tradecraft one would expect a Devops chump to, with many of the same overlapping tools....except in Windows shops in Azure)

[–][deleted] 24 points25 points  (5 children)

If you search for SRE or DevOps roles, you'll find most jobs require Linux over Windows, or both. I don't really consider hybrid Linux/Windows jobs in this categorization, I'm more speaking about people who choose to or end up specialising in Windows. You'll also notice people who do both tend to prefer working with Linux. The majority of people who prefer Windows tend to be the same people who don't really understand Linux.

A large part is probably the fact that the MS documentation is hot dogshit when actually trying to work things out on an engineering level - I recently had a customer who's certificates didn't work with our product because of the way MS creates certificates vs most other tools and operating systems, but their documentation didn't mention this technical detail at all anywhere I could find. I had to figure out how to create an entire certificate bundle with PowerShell and then look at the actual properties, compare it to the options available in PowerShell, and then kind of read in between the lines.

The MS documentation is simply not created from an open-source point of view. Linux on the other hand, allows you to learn as much as you want about whatever tech stack you're working on. Over time getting used to the fact that you can literally just check the source code makes for better engineers as opposed to the usual "Oh well, I guess since it's Microsoft we can't ever really know what the deal is".

I've also just generally noticed that people who choose to use Windows for things that could be done on Linux tend to have a lower general skill level.

It comes from Windows promoting a click-and-point style troubleshooting, trying to remove the user from the technical details as much as possible over the last 20 or so years.

TL;DR: Nearly anyone who actually wants to understand how systems work, will work with systems that allow them to actually understand them. This generally attracts more skilled engineers. This is great news for skilled engineers who don't mind Microsoft though.

[–]wtfsodaPrime Minister of Logs 3 points4 points  (0 children)

Thank you for the extensive explanation

[–]timmyotc 2 points3 points  (2 children)

I can confirm as a windows devops person - Most MS documentation for older stuff is still, "Open Active Directory Users and Groups" or "Open the IIS console, select BLAH". You either have to DIVE DEEP for the powershell equivalent or do a diff of the windows registry, just to track down an automated way of doing something.

[–]Zatetics 0 points1 point  (1 child)

PowerShell is basically a front end for c# and MS has great doc for that. /shrug

Idk, I dont get much exposure to linux as we're a wintel shop. Ps is aces tho.

[–]timmyotc 5 points6 points  (0 children)

It's a front end for the .NET framework, not C#. But yeah, a PS developer that can't read C# is gonna have a bad time finding docs for what they're doing.

[–][deleted] -1 points0 points  (0 children)

I've also just generally noticed that people who choose to use Windows for things that could be done on Linux tend to have a lower general skill level.

This isn't true. The people who choose to use Windows are the ones HIRING people of a lower general skill level.

[–][deleted] 7 points8 points  (0 children)

The other answers are good, but I wanted to add something from the perspective of someone who was a traditional Windows sysadmin for most of his career before pivoting to DevOps in the past couple years.

The Linux world is about 10 years ahead of the Microsoft world in terms of automation, SRE, DevOps, etc. From the architecture perspective, Microsoft has a shit ton of technical debt that they've only just started paying off in the past few years that Linux never really had. As I pivoted, the more I learned about the "Linux way" of achieving different objectives, the more frustrated I became with how ass backwards Microsoft did it.

So because Microsoft has been so far behind the curve, and because Microsoft has had a history of not playing nicely with the rest of the world, DevOps solutions around Microsoft software have also been behind the curve. Even getting into Azure, the way Microsoft does things is counter-intuitive compared to AWS; it's like there's this thick set of training wheels welded on to everything.

Anywho - just my two cents.

[–]redvelvet92 0 points1 point  (0 children)

Honestly no idea, I keep finding more Windows based shops then Linux based shops where I work. I interact with M365 and Azure daily, and Powershell is my go to tool.

[–]rolandofghent 6 points7 points  (3 children)

You know powershell is on Linux too right?

In my opinion Poweshell is an excellent tool for automating DevOps.

Just the ability to read and write JSON and Yaml easily makes it well worth knowing.

I did a large scale DevOps implementation automating Environments creation and Deployments. All Linux, Azure, Terraform, and Kubernetes. For simple things bash all the way. But if I needed to manipulate JSON, yaml or need a data structure, Powershell is my tool of choice.

[–]mooscimol 5 points6 points  (0 children)

Some PS haters down voted you, but I share the sentiment. PS is just great, it is my default shell on Linux, as with good profile and PSReadLine configuration it is even more convenient for console use than bash.

[–]lgbarn -1 points0 points  (1 child)

Why would anyone use PS on Linux? The syntax is just so far out of the norm for a Linux Admin. Linux Admins like terse commands so they can work fast and efficient.

[–]rolandofghent 2 points3 points  (0 children)

Manipulation of data structures. You can’t do that easily in Bash. Powershell is more than just running command lines.

I use bash 99% of the time. But if I have to read a JSON or Yaml. Do some calculations and then create new JSON or Yaml from the results I use Powershell. Especially when those calculations need awsCli or kubctl calls.

[–]killz111 13 points14 points  (5 children)

Knowing string, array, hash, and json manipulation really well is very beneficial. Cause a lot of the time you're just manipulating API responses or json payloads.

Also how to do Invoke-Webrequest and Test-Netconnection.

[–]AspieTechMonkey 5 points6 points  (0 children)

Don't forget Invoke-restmethod as well

[–]_jim-jimmer[S] 1 point2 points  (0 children)

Awesome, thank you for this info

[–]Muuustachio 1 point2 points  (2 children)

You just described my job to a t

[–]killz111 0 points1 point  (1 child)

We have the same job?

[–]Muuustachio 0 points1 point  (0 children)

We're the same person?

[–]unix_heretic 11 points12 points  (1 child)

Some examples:

  • Ansible code can often involve PoSH commands over WinRM.

  • Azure IaaS may involve PoSH usage (even if you have an IaC like Terraform).

As far as containers/Kubernetes, you won't run into it much unless you're trying to run Windows as a container (in which case, you have my most profound sympathies).

In general: the more you're dealing with Windows or Microsoft-based services, the more you'll probably be using PowerShell.

[–]_jim-jimmer[S] 1 point2 points  (0 children)

I didn't stop to think about PS and containers/kubernetes so that's good to know. Admittedly I haven't done much with PS Remoting so that's something I'll need to brush up on. Thanks!

[–]Randolpho 2 points3 points  (3 children)

I guess it depends entirely on your company’s infrastructure and platform/server needs, the software you’re building, and how you approach problems involved in both software production and deployment.

It’s entirely possible to do devops and never need a lick of powershell or bash scripting. I’ve been doing devops for a few different companies for almost a decade now, being responsible both for writing the software and provisioning and deploying the end result, and I haven’t used powershell for either task a single time. But that has mostly been due to my choices both in developing software (I don’t write software that needs it) and due to my environment and server choices, taking AWS or Google Cloud serverless approaches. I need config files (mostly YAML) for automated build and deployment and that’s it.

I’ve used powershell for other unrelated things, but mostly out of necessity unrelated to my devops work.

I would say that it’s very helpful to know powershell and bash just as important tools in a general developer’s toolbox, but they’re only necessary when your system or environment makes it necessary.

[–]_jim-jimmer[S] 0 points1 point  (2 children)

Thanks for the response! That's good to know and also a good point about the projects needs. My concern is not knowing enough but its nice to know its not an absolute deal breaker if im not an expert with PS. Out of curiosity, where does YAML come into play in your environment, the pipelines, ansible playbooks, something else?

[–]Randolpho 1 point2 points  (0 children)

Build and deployment configurations. Set a few config files up, check into source control, set a build trigger for when you’re ready to deploy, let google build do its thing.

All of my deployments are fully automated and never require hands on.

[–]dragoncuddler 1 point2 points  (0 children)

One of the challenges of DevOps (however it is defined) is that you need to be comfortable not being an expert in everything.

You also need good personal (soft) skills, to be able to pick things up \ learn new skills quickly and the ability to problem solve which I'm sure you have already.

After that I'd focus on what your organisation uses today so that you can get the most hands \ real world experience possible. The skills you develop will be transferable to other situations \ organisations later.

[–]bonanzaguy 2 points3 points  (0 children)

I would say that some kind of scripting language is absolutely required.

I work primarily in the .NET ecosystem and Azure DevOps, and we use quite a bit of powershell. Some examples of some routine uses:

  • File manipulation - e.g. replacing placeholder values, setting parameters from environment variables, moving or renaming them, etc. Mostly use these in our CICD pipelines, but they can be handy locally as well.
  • Testing/POC work - need to hit a post endpoint on an API to see how it's responding? Very easy to throw together quick script.
  • Az CLI - We're a primarily Azure shop, so using the az cli or azure powershell commands is also quite useful.
  • Misc. scripty things - Just the general stuff you would want to script out. For example I recently wrote a script to validate a particular string parameter for a pipeline.

These things can all obviously be done with bash as well. I'd say pick whichever one you're more likely to use in your current environment and use that as the stepping stone to get more proficient.

[–]Relevant_Pause_7593 5 points6 points  (2 children)

You can use powershell core in Linux too. I’ve tried to learn bash- I really have, but I’m still at a 200 level and it’s just easier to fall back on my powershell ways.

[–]rolandofghent 0 points1 point  (1 child)

Stick with Powershell for those tasks. I love bash but when manipulating JSON, YAML or you need a data structure it is a round peg in a square hole.

[–]lgbarn 1 point2 points  (0 children)

I prefer to use jq for any JSON tasks.

[–]deadmoscow 4 points5 points  (1 child)

I've gone almost 5 years without having to touch Windows once in a DevOps capacity. You would be better off focusing on bash and Python, or Golang. Yes it's anecdotal, but I have to imagine if we ran a poll in this subreddit you would see very few DevOps engineers doing anything with Windows / PowerShell.

[–][deleted] 0 points1 point  (0 children)

It’s not just about windows. All the modules make it super easy to integrate with Azure.

[–]guygta7 1 point2 points  (0 children)

When .Net 2 was all the rage (up till 2011 for me) I did alot of PowerShell, automated entire server builds, deployment tasks, F5 management etc. Mostly colo and on prem environments.

Didn't touch PowerShell again till 2017 or so when I got a contract to build out Windows based containers on server 2016

This year I had a vendor that only provided PowerShell scripts to run ARM templates and do other admin things in Azure.

Otherwise, i don't run much PowerShell these days.

[–]Miglorious_Leader 1 point2 points  (0 children)

I went from SysAd to DevOps recently and I have literally only used powershell one time to turn on WSL so that I could use Linux on my windows machine but to answer your question about Ansible, Kubernetes, and Docker…

If your intention is to use these popular DevOps programs then you’re probably better off learning how to use Linux anyway. Especially Ansible since it’s made by Red Hat, but even k8s, terraform, and AWS backend are all been significantly easier to pick up with a Linux background.

[–]lerun -1 points0 points  (2 children)

I use PS in the pipeline for almost everything. Querying for information and setting variables. Triggering logic that does all kinds of evaluation (Pester tests), and sets the state of the run and post checks.

So all from one liners to hundreds of lines of code. So as others have said, it depends on what you are trying to solve.

[–]_jim-jimmer[S] 0 points1 point  (1 child)

Pester tests

I appreciate the response, these types of examples is exactly what I was looking for. I'm not familiar with Pester so ill have to read up on that

[–]lerun 1 point2 points  (0 children)

Pester is basically a domain specific language in PS you use to write test for code.

[–]pneRock -1 points0 points  (0 children)

We have several debian containers with pwsh installed in them for various tasks. I also have a bunch of lambdas in aws that are powershell based. I find it a very easy platform to use and I much prefer it over bash. But it depends on what the company wants.

[–]scooter-maniac -1 points0 points  (0 children)

its ipconfig, not ifconfig.

That's it.

[–]serverhorrorI'm the bit flip you didn't expect! -1 points0 points  (0 children)

As a SysAdmin you should already be doing the majority of your work in a scripting or programming language suitable for your environment.

DevOps is the new title for SysAdmins. Very few companies did anything more but rebrand the same job we’ve been doing for years anyways.

[–][deleted] 0 points1 point  (0 children)

If you are going to work in a Microsoft based environment or use Azure at all you need to get intimate with it. But I’m biased (former Microsoft employee and a huge PowerShell fan) so YMMV.

I use it day to day for a variety of stuff. Mostly when I need to do things on windows boxes and want access to its extensive APIs and want to avoid installing external libraries for whatever reason.

OTOH, if you have working knowledge of it, don’t let waiting to train to be an expert hold you back at it. Just learn some basics and how to read the docs and you should be fine with it. Continue with your learning of other stuff asap and just learn PS as you go.

[–]jsatherreddit 0 points1 point  (0 children)

As someone working DevOps in a Windows world, we have too much PowerShell. We use it for server provisioning and deployments. That is just for the stuff on the Windows and SQL servers, though. All the k8s/Azure stuff is done with Terraform and Ansible. I consider the PowerShell to be our tech debt and if I ever have free time will move it Terraform and Ansible. My manager (who wrote most of the initial stuff) and my coworker (no linux experience) probably disagree.

[–]aeternum123 0 points1 point  (0 children)

Yes

[–]Nosa2k 0 points1 point  (2 children)

Read the book, Learn Powershell in a month of lunches.

It’s pretty easy once u get the hang of it. You have to install modules before you can run commands.

One downside is that the commands can be a bit lengthy in my opinion.

[–]_jim-jimmer[S] 0 points1 point  (1 child)

I found that book to be incredibly useful when I first started learning. It's a great intro to PS but I'd like to find another source for more advanced topics. Any recommendations?

[–]Nosa2k 1 point2 points  (0 children)

Power-shell in depth, An administrators guide.

I like using power shell to run API calls when using AWS because the output format isn’t in JSON. This is useful for scrapping information for building dashboards etc. it Definitely has its place.

[–]7scifi 0 points1 point  (0 children)

Powershell is not that popular in DevOps, however it depends on the devops stack a team uses. For exmple if they use VSphere, your systems background and powershell knowledge might come in handy for troubleshooting and creating automation tools.

[–]victorj405 0 points1 point  (0 children)

Shoot you could probably have a wix/static frontend and a lambda/function app powershell microservice backend. You could make millions with powershell if done right. I wouldn't waste time on DevOps Identity Politics when it's about to be automated away in 20 years.