Carbon is a PowerShell module for automating the configuration of computers
running Windows 7, 8, 2008, and 2012. It can configure and manage:
* Local users and groups
* IIS websites, virtual directories, and applications
* File system, registry, and certificate permissions
* Hosts file
* INI files
* Performance counters
* .NET connection strings and app settings
* And much more!
All functions are designed to be idempotent: when run multiple times with the
same arguments, your system will be in the same state without failing or producing
PowerShell 4.0/5.0 and .NET Framework 4.5
Windows 7, 8, 2008, or 2012.
See the `about_Carbon_Installation` help topic for installation instructions.
See the `about_Carbon_Support` help topic for ways to ask questions about using
Only PowerShell [approved verbs](http://msdn.microsoft.com/en-us/library/windows/desktop/ms714428.aspx)
are used for command names. Carbon assigns special meaning to these verbs:
* Format: Escape (e.g. `Format-ADSearchFilterValue`).
* Install: Create a resource if it doesn't exist. If it does exist, update its
configuration to your desired state (e.g. `Install-User`, `Install-IisWebsite`,
* Split: Parse (e.g. Split-Ini)
* Uninstall: Remove a resource if it exists. If it doesn't exist, do nothing.
Carbon has no dependencies and is designed to work on a computer running a fresh
install of Windows. Some functions do interact with some Windows features. If those
features aren't installed, you'll get errors.
Carbon has an automated test suite that runs after every change on a computer
running Windows 2012 R2. Before release, the test suite is run automatically on a
computer running Windows 7 and PowerShell 5. No releases are made unless all tests
Carbon uses [semantic versioning](http://semver.org/). We use our version number
to communicate how Carbon changes from the last version. Carbon version numbers have
the form Major.Minor.Patch.
When upgrading to a new version, if:
* Just the patch number has changed (e.g. 1.5.0 -> 1.5.1) then we've only fixed bugs
in a 100% backwards-compatible way. You should feel comfortable upgrading with no
or limited testing.
* The Minor version has changed (e.g. 1.8.0 -> 1.9.0), then we've only fixed bugs or
introduced new functionality in a 100% backwards-compatible way. Again, you should
feel comfortable upgrading with light to limited testing.
When upgrading to a new minor version, always upgrade to the minor version with the
highest patch number.
* The Major version has changed (e.g. 1.9.0 -> 2.0.0), then we've broken
compatibility with previous versions of Carbon. You should carefully review the
release notes and update your code to work with the new version. You'll need to do
a thorough test of any changes to ensure your scripts still work.