Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added assets/MonadManifesto.pdf
Binary file not shown.
27 changes: 27 additions & 0 deletions reference/docs-conceptual/developer/monad-manifesto.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
description: The Monad Manifesto explains the original vision for PowerShell and how it would change the way we manage systems.
ms.date: 07/07/2025
title: The Monad Manifesto
---
# The Monad Manifesto

Jeffrey Snover, the inventor of PowerShell, wrote the Monad Manifesto to explain his vision for
PowerShell and how it would change the way we manage systems. You can read more about why he wrote
it in his [Monad Manifesto][02] blog post.

In that post, he explained how hard it was to communicate the vision for PowerShell to widely
distributed development teams. The development teams didn't understand the vision. Writing the
Manifesto forced him to be clear about what problem was being addressed, the core principles of the
design, how to address the issue, who would benefit from it, and why.

Use the following link to download a copy of the Manifesto.

- [Monad Manifesto][01].

This document is historically significant to PowerShell. It's a version of the original Monad
Manifesto, which articulated the long-term vision and initiated the development effort that became
PowerShell. PowerShell has delivered on many of the elements described in this document.

<!-- link references -->
[01]: https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/assets/MonadManifesto.pdf
[02]: https://www.jsnover.com/blog/2011/10/01/monad-manifesto/
140 changes: 75 additions & 65 deletions reference/docs-conceptual/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ PowerShell is a modern command shell that includes the best features of other po
most shells that only accept and return text, PowerShell accepts and returns .NET objects. The shell
includes the following features:

- Robust command-line [history][01]
- Tab completion and command prediction (See [about_PSReadLine][02])
- Supports command and parameter [aliases][03]
- [Pipeline][04] for chaining commands
- In-console [help][05] system, similar to Unix `man` pages
- Robust command-line [history][09]
- Tab completion and command prediction (See [about_PSReadLine][18])
- Supports command and parameter [aliases][05]
- [Pipeline][11] for chaining commands
- In-console [help][14] system, similar to Unix `man` pages

## Scripting language

Expand All @@ -30,90 +30,100 @@ the .NET Common Language Runtime (CLR). All inputs and outputs are .NET objects.
text output to extract information from output. The PowerShell scripting language includes the
following features:

- Extensible through [functions][06], [classes][07], [scripts][08], and [modules][09]
- Extensible [formatting system][10] for easy output
- Extensible [type system][11] for creating dynamic types
- Built-in support for common data formats like [CSV][12], [JSON][13], and [XML][14]
- Extensible through [functions][08], [classes][06], [scripts][12], and [modules][10]
- Extensible [formatting system][07] for easy output
- Extensible [type system][13] for creating dynamic types
- Built-in support for common data formats like [CSV][15], [JSON][16], and [XML][17]

## Automation platform

The extensible nature of PowerShell has enabled an ecosystem of PowerShell modules to deploy and
manage almost any technology you work with. For example:
The extensible nature of PowerShell provides an ecosystem of PowerShell modules to deploy and manage
almost any technology you work with. For example:

Microsoft
Microsoft modules

- [Azure][15]
- [Windows][16]
- [Exchange][17]
- [SQL][18]
- [Azure][02]
- [Windows][25]
- [Exchange][04]
- [SQL][27]

Third-party
Third-party modules

- [AWS][19]
- [VMware][20]
- [Google Cloud][21]
- [AWS][30]
- [VMware][32]
- [Google Cloud][31]

### Configuration management

PowerShell Desired State Configuration ([DSC][22]) is a management framework in PowerShell that
PowerShell Desired State Configuration ([DSC][20]) is a management framework in PowerShell that
enables you to manage your enterprise infrastructure with configuration as code. With DSC, you can:

- Create declarative [configurations][23] and custom scripts for repeatable deployments
- Create declarative [configurations][19] and custom scripts for repeatable deployments
- Enforce configuration settings and report on configuration drift
- Deploy configuration using [push or pull][24] models
- Deploy configuration using [push or pull][21] models

## Monad Manifesto

Jeffrey Snover, the inventor of PowerShell, wrote the Monad Manifesto to explain his vision for
PowerShell and how it would change the way we manage systems. Use the following link to download a
copy of the [Monad Manifesto][33].

This PDF file is a version of the original Monad Manifesto, which articulated the long-term vision and
started the development effort that became PowerShell. PowerShell has delivered on many of the
elements described in this document.

## Next steps

### Getting started

Are you new to PowerShell and don't know where to start? Take a look at these resources.

- [Installing PowerShell][25]
- [Discover PowerShell][26]
- [PowerShell 101][27]
- [Microsoft Virtual Academy videos][28]
- [PowerShell Learn modules][29]
- [Install PowerShell][22]
- [Discover PowerShell][29]
- [PowerShell 101][23]
- [Microsoft Virtual Academy videos][26]
- [PowerShell Learn modules][28]

### PowerShell in action

Take a look at how PowerShell is being used in different scenarios and on different platforms.

- [PowerShell remoting over SSH][30]
- [Getting started with Azure PowerShell][31]
- [Building a CI/CD pipeline with DSC][32]
- [Managing Microsoft Exchange][33]
- [PowerShell remoting over SSH][24]
- [Getting started with Azure PowerShell][03]
- [Building a CI/CD pipeline with DSC][01]
- [Managing Microsoft Exchange][04]

<!-- link references -->
[01]: /powershell/module/microsoft.powershell.core/about/about_history
[02]: /powershell/module/psreadline/about/about_psreadline
[03]: /powershell/module/microsoft.powershell.core/about/about_aliases
[04]: /powershell/module/microsoft.powershell.core/about/about_pipelines
[05]: /powershell/module/microsoft.powershell.core/get-help
[06]: /powershell/module/microsoft.powershell.core/about/about_functions_advanced
[07]: /powershell/module/microsoft.powershell.core/about/about_classes
[08]: /powershell/module/microsoft.powershell.core/about/about_scripts
[09]: /powershell/module/microsoft.powershell.core/about/about_modules
[10]: /powershell/module/microsoft.powershell.core/about/about_format.ps1xml
[11]: /powershell/module/microsoft.powershell.core/about/about_types.ps1xml
[12]: /powershell/module/microsoft.powershell.utility/convertfrom-csv
[13]: /powershell/module/microsoft.powershell.utility/convertfrom-json
[14]: /powershell/module/microsoft.powershell.utility/convertto-xml
[15]: /powershell/azure
[16]: /powershell/windows/get-started
[17]: /powershell/exchange/exchange-management-shell
[18]: /sql/powershell/sql-server-powershell
[19]: https://aws.amazon.com/powershell/
[20]: https://developer.broadcom.com/powercli
[21]: https://cloud.google.com/powershell/
[22]: /powershell/scripting/dsc/overview/dscforengineers
[23]: /powershell/scripting/dsc/configurations/configurations
[24]: /powershell/scripting/dsc/pull-server/enactingconfigurations
[25]: /powershell/scripting/install/installing-powershell
[26]: discover-powershell.md
[27]: /powershell/scripting/learn/ps101/00-introduction
[28]: /shows/browse?terms=powershell
[29]: /training/browse/?terms=PowerShell
[30]: /powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core
[31]: /powershell/azure/get-started-azureps
[32]: /azure/devops/pipelines/release/dsc-cicd
[33]: /powershell/exchange/exchange-management-shell
[01]: /azure/devops/pipelines/release/dsc-cicd
[02]: /powershell/azure
[03]: /powershell/azure/get-started-azureps
[04]: /powershell/exchange/exchange-management-shell
[05]: /powershell/module/microsoft.powershell.core/about/about_aliases
[06]: /powershell/module/microsoft.powershell.core/about/about_classes
[07]: /powershell/module/microsoft.powershell.core/about/about_format.ps1xml
[08]: /powershell/module/microsoft.powershell.core/about/about_functions_advanced
[09]: /powershell/module/microsoft.powershell.core/about/about_history
[10]: /powershell/module/microsoft.powershell.core/about/about_modules
[11]: /powershell/module/microsoft.powershell.core/about/about_pipelines
[12]: /powershell/module/microsoft.powershell.core/about/about_scripts
[13]: /powershell/module/microsoft.powershell.core/about/about_types.ps1xml
[14]: /powershell/module/microsoft.powershell.core/get-help
[15]: /powershell/module/microsoft.powershell.utility/convertfrom-csv
[16]: /powershell/module/microsoft.powershell.utility/convertfrom-json
[17]: /powershell/module/microsoft.powershell.utility/convertto-xml
[18]: /powershell/module/psreadline/about/about_psreadline
[19]: /powershell/scripting/dsc/configurations/configurations
[20]: /powershell/scripting/dsc/overview/dscforengineers
[21]: /powershell/scripting/dsc/pull-server/enactingconfigurations
[22]: /powershell/scripting/install/installing-powershell
[23]: /powershell/scripting/learn/ps101/00-introduction
[24]: /powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core
[25]: /powershell/windows/get-started
[26]: /shows/browse?terms=powershell
[27]: /sql/powershell/sql-server-powershell
[28]: /training/browse/?terms=PowerShell
[29]: discover-powershell.md
[30]: https://aws.amazon.com/powershell/
[31]: https://cloud.google.com/powershell/
[32]: https://developer.broadcom.com/powercli
[33]: https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/assets/MonadManifesto.pdf
2 changes: 2 additions & 0 deletions reference/docs-conceptual/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,8 @@ items:
href: lang-spec/chapter-16.md
- name: Legacy PowerShell SDK
href: developer/toc.yml
- name: The Monad Manifesto
href: developer/monad-manifesto.md
- name: Docs Contributor's Guide
items:
- name: Overview
Expand Down
2 changes: 1 addition & 1 deletion reference/docs-conceptual/what-is-a-command-shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ There are two main types of command shells:

- General purpose command shells

General purpose command shells provide are designed to work with the operating system and allow
General purpose command shells are designed to work with the operating system and allow
you to run any command that the operating system supports. They also include shell-specific
commands and programming features. The following list contains some examples of general purpose
command shells:
Expand Down
Loading