-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Define common terminology and styling #12632
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
3daa1b8
Define common terminology and styling
sdwheeler c8b8e92
Apply suggestions from code review
sdwheeler 0fcc404
Add not about Env:
sdwheeler adfb685
Add section for $_/$PSItem
sdwheeler 4e5c8e7
Apply suggestions from code review
sdwheeler 54e3ef2
Apply suggestions from code review
sdwheeler 35018f7
Update terminology.md
sdwheeler 1f373f6
More feedback edits
sdwheeler ff24440
Add TabExpansion2 example
sdwheeler File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,241 @@ | ||
| --- | ||
| ms.date: 01/05/2026 | ||
| --- | ||
| # Terminology and format guidelines | ||
|
|
||
| When writing about PowerShell, use the following terminology guidelines to ensure consistency across | ||
| documentation. This is a draft document that's subject to change. Eventually, we will move this | ||
| content to the PowerShell-Docs style guide. | ||
|
|
||
| ## Punctuation | ||
|
|
||
| For general rules, see [Punctuation - Microsoft Style Guide][01]. | ||
|
|
||
| For PowerShell-specific terminology, see [PowerShell-Docs style guide][03]. | ||
|
|
||
| ### Hyphenation | ||
|
|
||
| See [Hyphens - Microsoft Style Guide][08]. | ||
|
|
||
| In general, don't include a hyphen after prefixes unless omitting the hyphen could confuse the | ||
| reader. See the style guide for specific examples. | ||
|
|
||
| - _subexpression_ not _sub-expression_ | ||
|
|
||
| Hyphenate two or more words that precede and modify a noun. | ||
|
|
||
| - dot-source | ||
|
|
||
| Use the _dot-source operator_ to _dot-source_ a script. | ||
|
|
||
| - _built-in_ drive | ||
| - _high-level-language_ compiler | ||
| - _member-access_ operator | ||
|
|
||
| ## Capitalization and space conventions | ||
|
|
||
| For general guidelines, see [Capitalization - Microsoft Style Guide][07]. For PowerShell: | ||
|
|
||
| Microsoft product names have specific capitalization requirements that must be followed. See | ||
| [Microsoft Product Style Guide][05]. | ||
|
|
||
| All keywords should be lowercase and backticked in a paragraph. See [about_Language_Keywords][02]. | ||
| When referring to statements that consist of multiple keywords, use slashes to separate the | ||
| keywords rather than spaces or dashes. | ||
|
|
||
| - `do/until` | ||
| - `do/while` | ||
| - `try/catch/finally` | ||
| - `if/elseif/else` | ||
|
|
||
| Example: | ||
|
|
||
| > A `do/until` loop consists of a `do` statement block followed by `until` and a | ||
| > conditional expression. | ||
|
|
||
| Command names and parameters usually use PascalCase, but verify the correct casing by inspecting the | ||
| command definitions. | ||
|
|
||
| For example, the parameters of the `TabExpansion2` function don't use PascalCase: | ||
|
|
||
| ```powershell | ||
| TabExpansion2 -inputScript "TabExpansion2 -" | Select-Object -ExpandProperty CompletionMatches | ||
| ``` | ||
|
|
||
| ```Output | ||
| CompletionText ListItemText ResultType ToolTip | ||
| -------------- ------------ ---------- ------- | ||
| -inputScript inputScript ParameterName [string] inputScript | ||
| -cursorColumn cursorColumn ParameterName [int] cursorColumn | ||
| -ast ast ParameterName [Ast] ast | ||
| -tokens tokens ParameterName [Token[]] tokens | ||
| -positionOfCursor positionOfCursor ParameterName [IScriptPosition] positionOfCursor | ||
| -options options ParameterName [hashtable] options | ||
| -Verbose Verbose ParameterName [switch] Verbose | ||
| -Debug Debug ParameterName [switch] Debug | ||
| -ErrorAction ErrorAction ParameterName [ActionPreference] ErrorAction | ||
| -WarningAction WarningAction ParameterName [ActionPreference] WarningAction | ||
| -InformationAction InformationAction ParameterName [ActionPreference] InformationAction | ||
| -ProgressAction ProgressAction ParameterName [ActionPreference] ProgressAction | ||
| -ErrorVariable ErrorVariable ParameterName [string] ErrorVariable | ||
| -WarningVariable WarningVariable ParameterName [string] WarningVariable | ||
| -InformationVariable InformationVariable ParameterName [string] InformationVariable | ||
| -OutVariable OutVariable ParameterName [string] OutVariable | ||
| -OutBuffer OutBuffer ParameterName [int] OutBuffer | ||
| -PipelineVariable PipelineVariable ParameterName [string] PipelineVariable | ||
| ``` | ||
|
|
||
| ### Specific examples | ||
|
|
||
| - _file system_ | ||
| - _file name_ | ||
| - _localhost_ - lowercase | ||
| - _CIM session_ - refers to the concept of a CIM session | ||
| - _CimSession_ - refers to the PowerShell object of type `[CimSession]` | ||
| - _PSSnapin_ - refers to an instance of a PowerShell snap-in assembly (such as | ||
| Microsoft.PowerShell.Core) | ||
| - _snap-in_ - the general term for a PowerShell snap-in assembly | ||
| - _SDDL_ - abbreviation of Security Descriptor Definition Language | ||
| - _WSMan_ and _WinRM_ | ||
| - _WSMan_ - Microsoft's abbreviation for the WS-Management (Web Services-Management) open standard | ||
| - _WinRM_ - Windows Remote Management - Microsoft's implementation of the WSMan standard | ||
| - Use lowercase instances only where the name is lowercase in the service interfaces (such as | ||
| `winrm` command-line tool, or in schema URIs and other properties). | ||
| - Variable scopes and scope modifiers | ||
|
|
||
| See [Appendix A - Grammar - B.1.6 Variables][04]. | ||
|
|
||
| Scope names and modifiers are capitalized: | ||
|
|
||
| - `Global:` and **Global** scope | ||
| - `Local:` and **Local** scope | ||
| - `Script:` and **Script** scope | ||
| - `Private:` | ||
| - `Using:` | ||
| - `Workflow:` | ||
|
|
||
| PowerShell drive names such as `Env` are capitalized. | ||
|
|
||
| ```powershell | ||
| Get-Item -Path Env:COMPUTERNAME | ||
|
|
||
| Name Value | ||
| ---- ----- | ||
| COMPUTERNAME COMPUTER01 | ||
| ``` | ||
|
|
||
| `Env` is a special case when used in variable namespace notation. | ||
| Use lowercase for `$env:`. For all other PowerShell drives, use normal | ||
| capitalization. | ||
|
|
||
| ```powershell | ||
| $env:COMPUTERNAME | ||
| COMPUTER01 | ||
|
|
||
| $Alias:dir | ||
| Get-ChildItem | ||
| ``` | ||
|
|
||
| ## Terms | ||
|
|
||
| ### Declare vs. initialize | ||
|
|
||
| _Initialize_ is the correct term to use when referring to assigning a value to a variable for the | ||
| first time. | ||
|
|
||
| The `New-Variable` cmdlet is used to declare variables. This is the only way to create a variable | ||
| without a value. When you don't provide a value, the value is set to `$null` by default. | ||
|
|
||
| When you reference a variable that hasn't been declared yet (such as `$var`) for the first time, | ||
| PowerShell creates the variable. If you didn't initialize the variable, PowerShell assigns a default | ||
| value depending on its type. Variables that are not explicitly typed are assigned a value of | ||
| `$null`. In practice, it's difficult to create a variable without initializing it. | ||
|
|
||
| ### Native vs. external commands | ||
|
|
||
| Not all external commands are native commands. A PowerShell script can be an _external command_, but | ||
| it's not a native command. | ||
|
|
||
| _Native commands_ are executables that can be run from any shell or other invocation method | ||
| supported by the OS. | ||
|
|
||
| ### Scalar vs. single vs. singleton | ||
|
|
||
| See [Scalar data type - Wikipedia][10]. | ||
|
|
||
| A scalar data type, or just scalar, is any non-composite value. | ||
|
|
||
| Generally, all basic primitive data types are considered scalar: | ||
|
|
||
| - The Boolean data type (bool) | ||
| - Numeric types (int, the floating point types float and double) | ||
| - Character types (char) | ||
|
|
||
| The term _single_ should only refer to a single-precision floating point type `[single]`. | ||
|
|
||
| A _singleton_ is a single instance of an object that may be scalar or complex. | ||
|
|
||
| ## Language elements and terms | ||
|
|
||
| ### Null values | ||
|
|
||
| See [null, NULL, Null - Microsoft Style Guide][06]. | ||
|
|
||
| Use lowercase _null_ to refer to a null value. Better yet, use _null value_ to avoid confusion with | ||
| the constant. | ||
|
|
||
| Use `$null`, `NULL`, or `Null` (depending on the language context) only to refer to the constant. | ||
| Use `DBNull` to refer to the `[System.DBNull]` type. | ||
|
|
||
| ### Boolean values | ||
|
|
||
| It's preferred to use `$true` and `$false` (all lowercase) when referring to the boolean values. | ||
| Alternatively, you can ise _FALSE_ or _TRUE_ (all uppercase) to refer to boolean values in general | ||
| writing. Showing boolean values in output should always match the output. For example: | ||
|
|
||
| ```powershell | ||
| PS> $true | ||
| True | ||
| ``` | ||
|
|
||
| ### Hash tables | ||
|
|
||
| - Use _hash table_ (two words, all lowercase) to refer to the computer science concept in general | ||
| writing. See [Hash table - Wikipedia][09]. | ||
| - Use _hashtable_ (all lowercase) when referring to the PowerShell objects of type `[hashtable]`. | ||
| May be capitalized as _Hashtable_ when it begins a sentence. | ||
sdwheeler marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| - `[hashtable]` (with backticks) when referring to the type more specifically. | ||
| - Full type names should match the .NET definition: `[System.Collections.Hashtable]` | ||
|
|
||
| ### Statements and script blocks | ||
|
|
||
| A _script block_ is a generic description we have used historically, but can be a source of | ||
| confusion. Use the following terminology instead: | ||
|
|
||
| - A _statement block_ refers to `{}` expressions in a statement. This is how the AST refers to | ||
| them. Statement blocks don't take parameters or create new scopes. | ||
| - _scriptblock_ should be used to refer to `{}` expressions of type `[scriptblock]`. For example, | ||
sdwheeler marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| the **FilterScript** parameter of `Where-Object` expects a scriptblock. Scriptblocks can take | ||
| parameters and create new scopes. | ||
|
|
||
| ### `$_` vs. `$PSItem` | ||
|
|
||
| `$_` and `$PSItem` are automatic variables that refer to the current object in the pipeline. | ||
| Technically, neither variable is an alias. Both variables contain the same value. | ||
|
|
||
| `$PSItem` was added to PowerShell later in an attempt to provide a clearer purpose to the name. | ||
| However in practice, the _dollar underscore_ form `$_` is most commonly used. | ||
|
|
||
| `$_` is the preferred usage. | ||
|
|
||
| <!-- link references --> | ||
| [01]: https://learn.microsoft.com/en-us/style-guide/punctuation/ | ||
| [02]: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_keywords | ||
| [03]: https://learn.microsoft.com/powershell/scripting/community/contributing/powershell-style-guide | ||
| [04]: https://learn.microsoft.com/powershell/scripting/lang-spec/chapter-15#b16-variables | ||
| [05]: https://learn.microsoft.com/product-style-guide-msft-internal/welcome/ | ||
| [06]: https://learn.microsoft.com/style-guide/a-z-word-list-term-collections/n/null | ||
| [07]: https://learn.microsoft.com/style-guide/capitalization | ||
| [08]: https://learn.microsoft.com/style-guide/punctuation/dashes-hyphens/hyphens | ||
| [09]: https://wikipedia.org/wiki/Hash_table | ||
| [10]: https://wikipedia.org/wiki/Scalar_processor#Scalar_data_type | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.