Well suited for building management networks across the organization as it has been reliable without much downtime. Since it has great switching qualities, it suites well for data center and end-user connectivity using access switches. It might not be the best for routing, as other XOR software has proven to be superior for routing.
If you have one user or 1000's of users (especially using Windows), Windows Server is a no-brainer! The only reason I would suggest going with a Linux server is if you have old hardware (Windows Server is more process intensive than Linux). But, Linux is open-source, so anyone can publish updates/security updates, but on the flip side, malicious people also have full access to Linux's codebase allowing for much easier writing of exploitations/viruses/malware/ransomware.
User and device management out of the box. Active directory is a proven system for doing this and works just as well as it always has.
ADFS providing integration into many third-party applications using SAML authentication. We use this heavily to make user experience as simple and straightforward as we can.
Local DHCP. It's another one of these systems that is very easy to setup and use out of the box and requires very little maintenance, if any. The system is almost unchanged throughout the years and so anyone with server experience can manage it.
By this point, there are several "flavors" of the Cisco IOS such as XE, XR, and the standard Cisco IOS. While they are all fairly similar, there does exist syntax differences between them. It would be ideal if at some point in the future, Cisco is able to unify all of them into one standard operating system which would use the same syntax across all platforms.
While overall Cisco does a great job of QA'ing their IOS, no matter the release, there's always some minor bugs. I think it's important that Cisco continue to pour resources into their QA team to test their software.
While I'm very familiar with the graphical readouts of "show processes cpu history" I would love for Cisco to eventually find a more intuitive way to display this data. I can't begin to count how many times I've had to teach more entry level (and even mid level) engineers how this graph is interpreted.
I do wish that Cisco had something similar to Juniper's "commit check" or "commit confirmed". This helps validate the changes you're about to apply, and catch errors, so that you have a better idea of the impact of the change.
Windows Server is extremely complex, and while newer versions have eased the initial setup process, setting up a server is still a very time consuming and difficult task.
The complexity of Windows Server also makes troubleshooting any problems that arise extremely difficult, both in tracking down the actual issue and then resolving the issue. Often times a problem can manifest itself in more than one way, making searching for the specific problem also difficult.
Windows Server is also very expensive, with complex and confusing licensing terms. In fact, Microsoft provides a 32-page PDF guide on Windows Server licensing, which is in and of itself dense and confusing to follow. To make matters more complicated, there multiple different version of Windows Server itself - Nano, Essentials, Standard and Datacenter edition, and each edition has different licensing terms. Licensing terms include items such as the physical processor's cores of the server, how many users will be accessing the server (called a CAL - client access license), and a plethora of other items.
Microsoft's support for Windows Server can be extremely frustrating at times. While Microsoft hosts a very active user forum, Microsoft employees who frequent those forums often provide only stock answers to questions (without actually reading the details) or no answers at all. For more in-depth - phone support can be quite expensive.
Upgrading a Windows Server from one major version to another (i.e. 2012 to 2016) is a frustratingly complex and dangerous procedure, as many things can go wrong during the upgrading, essentially breaking the entire setup. In fact, Microsoft doesn't even suggest doing an in-place upgrade, but to perform a backup of the existing server, doing a clean install of the new version, and migrating the information from the older version to the new version. In general, it is not even recommended to upgrade from one version to another as the risk significantly outweigh the benefits.
I've carefully reviewed the servers and services currently running on Windows Server 2012, and given the opportunity would renew them as is going forward. There are two systems I currently have in place, one is a very large Linux implementation for a large ecommerce site, and one is a very large backup solution front ended by FTP servers running Linux. Neither are well suited for Windows, but the overall network infrastructure is and will be Windows Server for the foreseeable future.
The data that Cisco IOS is able to provide is extremely relevant, it's fast, and it's intuitive. I also love that you're able to leverage things like macros or EEM scrips to run multiple commands at once. This is especially useful when you have more junior or entry level engineers in your environment and you want to provide them with a "shortcut" by having them type a single command to execute multiple commands.
Everything can (and should) be done through the easy to use/navigate GUI. There is no need for archaic command prompt use to administer the server. But, it is there if you have very specific needs for batch files, etc. that are not covered in the all extensive GUI.
It has been my experience that unless there is a flaw or bug with Microsoft Windows Server, you will have to pay extra for support beyond the support web site. That said, unofficial support on the thousands of technical websites makes self-help support readily available to any technician with an internet connection. Microsoft's support website is also fairly robust, but I find using a popular search engine often returns knowledgebase articles more quickly that Microsoft's search.
Make sure that you have detailed processes in place for every server instance you plan to install/upgrade, if possible get the base OS loaded and Windows Updates applied ahead of time, and if using a VM take a snapshot prior to installing each role, as well as along the way.
Cisco IOS is the most stable I've used, has the best TAC support, has the best knowledge base articles and white papers from Cisco, is the most intuitive, is one of the fastest, and since it's the most widely used network appliance OS, chances are that most network engineers you encounter will have the most familiarity with Cisco IOS than with any other vendor's OS.
Windows Server is more cost-effective and skills are easier to find to support the products. The deployment and management of the product can be automated with Microsoft SCCM. In my opinion, Linux seems to be more secured but takes more time and effort to learn than Windows Server. However, there are more Windows Server skills available in the job market.
Cisco IOS has had a positive impact in how quickly we're able to mitigate issues and outages due to how fast it's able to display the exact data we're looking for and because how the relevant that data is.
Having a stable operating system means less network issues and less outages. It goes without saying how valuable this has been for our organization.
Fantastic TAC support from Cisco! In the rare instances that we're faced with a very complex issue, or unfamiliar territory, Cisco TAC has historically done a phenomenal job of assisting us and getting us sorted!