{"id":983,"date":"2012-05-30T12:09:00","date_gmt":"2012-05-30T12:09:00","guid":{"rendered":""},"modified":"2024-03-08T10:20:29","modified_gmt":"2024-03-08T18:20:29","slug":"windows-server-2012-powershell-3-0-and-devops-part-2","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/","title":{"rendered":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2"},"content":{"rendered":"

This concludes my two part series.\u00a0 In my first post, I provided some background information about PowerShell and DevOps.\u00a0 In this post, I\u2019ll provide you a bunch of specifics.\u00a0 PowerShell 3.0, like Windows Server 2012, has a ton of new features and enhancements so I\u2019ll only scratch the surface.\u00a0 <\/em><\/p>\n

While PowerShell has always been focused on the goals of DevOps, PowerShell 3.0 and Windows Server 2012 take this to a new level.\u00a0 With Windows 2012, we shifted our focus from being a great OS for a server to being a cloud OS for lots of servers and the devices that connect them whether they are physical or virtual, on-premise or off-premise.\u00a0 In order to achieve this, we needed major investments in:<\/p>\n

    \n
  1. Automating everything<\/li>\n
  2. Robust and agile automation<\/li>\n
  3. Making it easier for operators to automate<\/li>\n
  4. Make it easier for developers to build tools<\/li>\n<\/ol>\n

    Automating Everything<\/span><\/strong><\/span>
    \nWindows Server 2008\/R2 shipped with ~230 cmdlets.\u00a0 Windows Server 2012 beats that by a factor of over 10 shipping ~ 2,430 cmdlets.\u00a0 You can now automate almost every aspect of the server.\u00a0 There are cmdlets for networking, storage, clustering, RDS, DHCP, DNS, File Servers, Print, SMI-S etc. \u2013 the list goes on.\u00a0 If you\u2019ve read blogs about Windows Server 2012, you\u2019ve seen how many things can be done using PowerShell.\u00a0 If you haven\u2019t kept up to date, check out Jose Barreto\u2019s File Server blog posts, Yigal Edery\u2019s Private Cloud blog posts, Ben Armstrong\u2019s Virtual PC Guy\u2019s Blog posts, the Clustering and High-Availability blog posts or Natalia Mackevicius\u2019 Partner and Customer blog posts and you\u2019ll see what I mean.\u00a0 Windows Server 2012 is, by far, the most automatable version of Windows ever.<\/p>\n

    There are already a large number of hardware and software partners that are shipping PowerShell cmdlets and those that haven\u2019t released them yet are\u00a0 working to quickly deliver them in the next versions of their products.\u00a0 This was very clear at the recent MMS conference in Las Vegas and I think you\u2019ll see even more support at TechEd.\u00a0\u00a0 You should definitely make sure that any product you buy delivers a full set of PowerShell cmdlets.\u00a0 If it doesn\u2019t, you should think twice and do some due diligence to make sure you are getting a product that is current and is still being invested in.\u00a0 If they didn\u2019t do PowerShell, what other things they missing?\u00a0 The good news is that a lot of the products will support PowerShell by the time Windows Server 2012 ships and that the products that have delivered cmdlets found it easy to do and mention the very positive customer feedback they get.\u00a0 EVERY product that ships PowerShell cmdlets, increases their investment in PowerShell in their next release.<\/p>\n

    Robust and agile automation<\/span><\/strong><\/p>\n

    Workflow<\/strong><\/span>
    \nWe integrated the Windows Workflow Foundation<\/a> engine into PowerShell to make it simple and easy to automate things that take a long time, that operate against a very large scale, or that require the coordination of multiple steps across multiple machines.\u00a0 Traditionally Windows Workflow has been a developer-only tool requiring visual studio and a lot of code to create a solution.\u00a0 We\u2019ve made it an in-the-box solution that operations can easily create a solution using their existing PowerShell scripting skill.\u00a0 Workflow provides direct support for parallel execution, operation retries, and the ability to suspend and resume operations.\u00a0 For example, a workflow can detect a problem that requires manual intervention, notify the operator of this condition and then suspend operations until the operator corrects the situation and resumes the workflow.<\/p>\n

    Operators can use any of the available Workflow designers to create workflows.\u00a0 However we took it a step further and simplified authoring by extending the PowerShell language with the workflow<\/strong> keyword.\u00a0 Any operator or developer can now easily author a workflow using the tools that ship in all Windows SKUs.\u00a0 The behavior of a workflow are different than a function and it has a few more rules but if you know how to write a PowerShell function, you are 80% of the way to being able to write a workflow.\u00a0 Authoring workflows using PowerShell is much easier than working with XAML and many of us easier to understand than Workflow designer tools.\u00a0 You also get the benefit of being able to paste them into email and have someone be able to read\/review it without having to install special tools.\u00a0 Below is an example workflow which operates on multiple machines in parallel collecting inventory information in parallel on each of the machines.<\/p>\n

    \"<\/a><\/p>\n

    The command below will get this inventory information from a list of servers contained in servers.txt and output the results to a file.\u00a0 If any of the servers is unavailable, the workflow will attempt to contact the server every 60 seconds for an hour.<\/p>\n

    \"<\/a><\/p>\n

    Workflow is exactly what DevOps practitioners need to reliably and repeatably perform operations.\u00a0 One of the key techniques of DevOps is A\/B testing<\/a> where two versions of software are deployed and run for a period of time.\u00a0 They are measured against some goodness metric (e.g. increased sales) and then the winning version is deployed to all machines.\u00a0 The workflow capabilities allow PowerShell to perform operations against a large number of machines over a large period of time making it easy to automate A\/B testing.<\/p>\n

    Scheduled jobs<\/span><\/strong>
    \nWe also seamlessly integrated
    Task Scheduler and PowerShell jobs<\/a> to make it simple and easy to automate operations that either occur on a regular schedule or in response to an event occurring.\u00a0 Below is a workflow which is meant to run forever.\u00a0 It collects configuration information (disk info) and then suspends itself.\u00a0 The workflow is started and given a well-known name \u201cCONFIG\u201d.\u00a0 We\u2019ll resume this workflow using Task Scheduler.\u00a0 In the example, we register a ScheduledJob to run every Friday at 6pm and after every system startup.\u00a0 When one of the triggers occurs, the scheduled job runs and resumes the workflow using its well-known name.\u00a0 The workflow then collects the configuration information, putting it into a new file, and suspends itself again.<\/p>\n

    \"<\/a><\/p>\n

    Robust Networking<\/strong><\/span>
    \nIn previous releases, PowerShell shipped with remoting disabled by default and required operators to go to each machine and issue the Enable-PSRemoting cmdlet in order to remotely manage it.\u00a0 As a Cloud OS, remote management of servers via PowerShell is now the mainstream scenario, so we\u2019ve reduced the steps required and enabled PowerShell remoting by default in all server configurations.\u00a0 We did extensive security analysis and testing to ensure that this was safe.<\/p>\n

    In Wojtek Kozaczynski\u2019s blog post on Standards-Based management<\/a>, he described how we made WS-MAN our primary management protocol and kept COM and DCOM for backwards compatibility.\u00a0 WS-MAN is a Web-Services protocol using HTTP and HTTPS.\u00a0 While these are effectively REST protocols, PowerShell establishes a session layer on top of these to reuse a remote process for performance and to take advantage of session state.\u00a0 These sessions were robust in the face of modest network interruptions but would occasionally break when operators managed servers from their laptops over Wi-Fi networks while roaming between buildings.\u00a0 We\u2019ve enhanced the session layer of WSMAN.\u00a0 By default, it will survive network interruptions up to 3 minutes.\u00a0\u00a0 Disconnected Sessions support was added to PowerShell sessions which give users the option to disconnect from an active remote session and later reconnect to the same session, without losing state or being forced to terminate task execution. You can even connect to the session from a different computer (just like a remote desktop session).<\/p>\n

    Easier for operators to automate<\/span><\/strong>
    \nWe wanted to significantly lower the skill level required to successfully automate a complex solution.\u00a0 Ultimately we want to create a world where operators think about what they want, type it and get it.\u00a0 Every customer\u2019s needs and scenarios are different so they need to script their own solutions.\u00a0 Our goal is to make it simple and easy to author scripts gluing together high level task oriented abstractions.\u00a0 The number one factor in making it simple is cmdlet coverage.\u00a0 That is why having ~2,430 cmdlets makes Windows Server 2012 so much easier to automate.\u00a0 A number of these cmdlets are extremely effective in dealing with the messy, real-world life of datacenters.\u00a0 We have cmdlets to work with REST APIs, JSON objects and even to get, parse and post web pages from management applications if required.<\/p>\n

    \"<\/a><\/p>\n

    PowerShell 3.0 simplifies the language and utility cmdlets to reduce the steps and syntax necessary to perform an operation.\u00a0 Below is an example showing the old way of doing something and the new simplified syntax.<\/p>\n

    \"<\/a><\/p>\n

    PowerShell3.0 improves the authoring tools operators use to create scripts and author workflows.\u00a0 PowerShell-ISE now supports rich IntelliSense, snippets, 3rd party extensibility and a Show-Command window which makes it easy to find exactly the right command and parameters you need to accomplish a task.<\/p>\n

    \"<\/a><\/p>\n

    Easier for developers to build tools<\/span><\/strong><\/span>
    \nDevelopers have always loved scripting with PowerShell because of its power, its use of C language conventions and its ability to program against .Net objects.\u00a0 PowerShell 3.0 cleans up a number of seams in dealing with .NET and objects and expands to allow developers to use PowerShell in a much wider range of scenarios.<\/p>\n

    Tool building enhancements<\/strong><\/span>
    \nPowerShell 3.0 now has an
    Abstract Syntax Tree<\/a> (AST).\u00a0 This allows new classes of intelligent tools to create, analyze, and manipulate PowerShell scripts.\u00a0 One of the Microsoft cloud services depends upon a very large number of PowerShell scripts to run all aspects of the service.\u00a0 Their development team used the AST to develop a script analysis tool to enforce a set of scripting best practices for their operators.\u00a0 The public AST is the reason why IntelliSense is freakishly powerful.\u00a0 It uses the AST to reason about the actual behavior of the program.<\/p>\n

    We modified a number of key areas of PowerShell to make them easier for developers to use and extend to write their own tools.\u00a0 This includes access to our serializer, API improvements, and an extensibility model for PowerShell_ISE.<\/p>\n

    Scripting enhancements<\/strong><\/span>
    \nPowerShell 3.0 now uses the .NET
    Dynamic Language Runtime<\/a> (DLR) technology.\u00a0 PowerShell monitors how a script is executing and will compile the script or portions of the script on the fly to optimize performance.\u00a0 Performance varies but some scripts run 6 times faster in 3.0.<\/p>\n

    Intellisense (and tab completion on the command line) now work with .NET namespaces and types.<\/p>\n

    \"<\/a><\/p>\n

    It is able to reason about the program and use variable type-inferencing to improve the quality of the IntelliSense.<\/p>\n

    \"<\/a><\/p>\n

    We extended our hashtable construct with two variations which make it much easier for developers to get the behavior they want:<\/p>\n

    \"<\/a><\/p>\n

    Platform building enhancements<\/span><\/strong>
    \nWe have streamlined the process to support delegated administration scenarios.\u00a0 PowerShell 3.0 allows you to register a remoting endpoint, configure what commands it makes available and specify what credentials those command should run as.\u00a0 This allows you to let regular uses run a well-defined set of cmdlets using Admin privileges.\u00a0 We\u2019ve simplified the process of defining which cmdlets are available to using a declarative session configuration file.<\/p>\n

    PowerShell 3.0 is also available as an optional component of WINPE.<\/p>\n

    Windows Server 2012 and PowerShell 3.0 are excellent DevOps tools<\/span><\/strong>
    \nDevOps is a new term and there is some disagreement about what it entails but at the heart it is all about making change safe through automation and bridging the gap between operators and developers.\u00a0 There is a lot to do in this area but Windows Server 2012 and PowerShell 3.0 make excellent progress towards accomplishing those goals.\u00a0 PowerShell won\u2019t be the only tool in your DevOps toolbox but it should be in every DevOps toolbox.\u00a0
    Download the beta <\/a>today and find out for yourself.<\/p>\n","protected":false},"excerpt":{"rendered":"

    This concludes my two part series.\u00a0 In my first post, I provided some background information about PowerShell and DevOps.\u00a0 In this post, I\u2019ll provide you a bunch of specifics.\u00a0 PowerShell 3.0, like Windows Server 2012, has a ton of new features and enhancements so I\u2019ll only scratch the surface.<\/p>\n","protected":false},"author":742,"featured_media":20695,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[32,23,386],"product":[],"content-type":[964],"solution":[952],"coauthors":[943],"class_list":["post-983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-powershell","tag-windows-server","tag-windows-server-2012","content-type-updates","solution-server-management","review-flag-1593580427-982","review-flag-1593580409-206","review-flag-2-1593580436-936","review-flag-3-1593580441-66","review-flag-6-1593580456-819","review-flag-alway-1593580309-789","review-flag-man-1593580365-471","review-flag-new-1593580246-692","review-flag-on-pr-1593580815-286","review-flag-partn-1593580283-870"],"yoast_head":"\nWindows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog\" \/>\n<meta property=\"og:description\" content=\"This concludes my two part series.\u00a0 In my first post, I provided some background information about PowerShell and DevOps.\u00a0 In this post, I\u2019ll provide you a bunch of specifics.\u00a0 PowerShell 3.0, like Windows Server 2012, has a ton of new features and enhancements so I\u2019ll only scratch the surface.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Windows Server Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/WindowsServer\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-30T12:09:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-08T18:20:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeffrey Snover\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@WindowsServer\" \/>\n<meta name=\"twitter:site\" content=\"@WindowsServer\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeffrey Snover\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/author\/jeffrey-snover-windows-server\/\",\"@type\":\"Person\",\"@name\":\"Jeffrey Snover\"}],\"headline\":\"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2\",\"datePublished\":\"2012-05-30T12:09:00+00:00\",\"dateModified\":\"2024-03-08T18:20:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\"},\"wordCount\":1926,\"commentCount\":9,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg\",\"keywords\":[\"Powershell\",\"Windows Server\",\"Windows Server 2012\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\",\"name\":\"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg\",\"datePublished\":\"2012-05-30T12:09:00+00:00\",\"dateModified\":\"2024-03-08T18:20:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg\",\"width\":1170,\"height\":640,\"caption\":\"a man standing in front of a laptop computer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/\",\"name\":\"Microsoft Windows Server Blog\",\"description\":\"Your Guide to the Latest Windows Server Product Information\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization\",\"name\":\"Microsoft Windows Server Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":1,\"height\":1,\"caption\":\"Microsoft Windows Server Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/WindowsServer\",\"https:\/\/x.com\/WindowsServer\",\"https:\/\/www.linkedin.com\/showcase\/microsoft-cloud-platform\/\",\"https:\/\/www.youtube.com\/user\/MSCloudOS\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/","og_locale":"en_US","og_type":"article","og_title":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog","og_description":"This concludes my two part series.\u00a0 In my first post, I provided some background information about PowerShell and DevOps.\u00a0 In this post, I\u2019ll provide you a bunch of specifics.\u00a0 PowerShell 3.0, like Windows Server 2012, has a ton of new features and enhancements so I\u2019ll only scratch the surface.","og_url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/","og_site_name":"Microsoft Windows Server Blog","article_publisher":"https:\/\/www.facebook.com\/WindowsServer","article_published_time":"2012-05-30T12:09:00+00:00","article_modified_time":"2024-03-08T18:20:29+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg","type":"image\/jpeg"}],"author":"Jeffrey Snover","twitter_card":"summary_large_image","twitter_creator":"@WindowsServer","twitter_site":"@WindowsServer","twitter_misc":{"Written by":"Jeffrey Snover","Est. reading time":"8 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/author\/jeffrey-snover-windows-server\/","@type":"Person","@name":"Jeffrey Snover"}],"headline":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2","datePublished":"2012-05-30T12:09:00+00:00","dateModified":"2024-03-08T18:20:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/"},"wordCount":1926,"commentCount":9,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg","keywords":["Powershell","Windows Server","Windows Server 2012"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/","url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/","name":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2 | Microsoft Windows Server Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg","datePublished":"2012-05-30T12:09:00+00:00","dateModified":"2024-03-08T18:20:29+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#primaryimage","url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg","contentUrl":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2024\/03\/Developer-whiteboard-worksession_Jason_07.jpg","width":1170,"height":640,"caption":"a man standing in front of a laptop computer"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/2012\/05\/30\/windows-server-2012-powershell-3-0-and-devops-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/"},{"@type":"ListItem","position":2,"name":"Windows Server 2012, PowerShell 3.0 and DevOps, Part 2"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/","name":"Microsoft Windows Server Blog","description":"Your Guide to the Latest Windows Server Product Information","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#organization","name":"Microsoft Windows Server Blog","url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":1,"height":1,"caption":"Microsoft Windows Server Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/WindowsServer","https:\/\/x.com\/WindowsServer","https:\/\/www.linkedin.com\/showcase\/microsoft-cloud-platform\/","https:\/\/www.youtube.com\/user\/MSCloudOS"]}]}},"word_count":1920,"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Windows Server Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/posts\/983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/users\/742"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/comments?post=983"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/posts\/983\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/media\/20695"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/media?parent=983"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/post_tag?post=983"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/product?post=983"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/content-type?post=983"},{"taxonomy":"solution","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/solution?post=983"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/windows-server\/blog\/wp-json\/wp\/v2\/coauthors?post=983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}