diff --git a/assets/MonadManifesto.pdf b/assets/MonadManifesto.pdf new file mode 100644 index 000000000000..c4fa225d0454 Binary files /dev/null and b/assets/MonadManifesto.pdf differ diff --git a/reference/docs-conceptual/developer/monad-manifesto.md b/reference/docs-conceptual/developer/monad-manifesto.md new file mode 100644 index 000000000000..f97e7c5ad3bd --- /dev/null +++ b/reference/docs-conceptual/developer/monad-manifesto.md @@ -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. + + +[01]: https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/assets/MonadManifesto.pdf +[02]: https://www.jsnover.com/blog/2011/10/01/monad-manifesto/ diff --git a/reference/docs-conceptual/overview.md b/reference/docs-conceptual/overview.md index b3a24d352dbd..28583e9e5d4e 100644 --- a/reference/docs-conceptual/overview.md +++ b/reference/docs-conceptual/overview.md @@ -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 @@ -30,37 +30,47 @@ 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 @@ -68,52 +78,52 @@ enables you to manage your enterprise infrastructure with configuration as code. 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] -[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 diff --git a/reference/docs-conceptual/toc.yml b/reference/docs-conceptual/toc.yml index b789e30deca4..3aca7ac271ed 100644 --- a/reference/docs-conceptual/toc.yml +++ b/reference/docs-conceptual/toc.yml @@ -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 diff --git a/reference/docs-conceptual/what-is-a-command-shell.md b/reference/docs-conceptual/what-is-a-command-shell.md index f78ede4850c1..566df3b161ff 100644 --- a/reference/docs-conceptual/what-is-a-command-shell.md +++ b/reference/docs-conceptual/what-is-a-command-shell.md @@ -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: