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
28 changes: 27 additions & 1 deletion reference/docs-conceptual/community/2026-updates.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: List of changes to the PowerShell documentation for 2026.
ms.date: 07/02/2026
ms.date: 08/06/2026
title: What's New in PowerShell-Docs for 2026
---
# What's new in PowerShell Docs for 2026
Expand All @@ -15,6 +15,32 @@ get started.
[01]: contributing/overview.md
<!-- --------------- -->

## 2026-July

Updated content

- Release notes for monthly maintenance releases of PowerShell
- More updates to PSScriptAnalyzer rules
- `New-Guid` changed in PowerShell 7.7 to create v7 format UUIDs

GitHub stats

- 23 PRs merged (2 from Community)
- 38 issues opened (7 from Community, 30 Spam)
- 38 issues closed (8 from Community, 30 Spam)

Top Community Contributors

The following people contributed to PowerShell docs this month by submitting pull requests or
filing issues. Thank you!

Special thanks to @ArieHein for another large PR to clean up 160 articles.

| GitHub Id | PRs merged | Issues opened |
| ---------------- | :--------: | :-----------: |
| janv8000 | 1 | |
| SufficientDaikon | 1 | |

## 2026-June

Updated content
Expand Down
30 changes: 13 additions & 17 deletions reference/docs-conceptual/community/hall-of-fame.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: List of the GitHub users that have the most contributions to PowerShell documentation.
ms.date: 07/02/2026
ms.date: 08/06/2026
title: Community contributor Hall of Fame
---
# Community Contributor Hall of Fame
Expand All @@ -18,16 +18,16 @@ Pull Requests help us fix those issues and make the documentation better for eve

| PRs Merged | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | Total |
| ------------------ | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ----: |
| Community | 8 | 189 | 452 | 468 | 321 | 165 | 101 | 134 | 117 | 95 | 160 | 28 | 2238 |
| Community | 8 | 189 | 452 | 468 | 321 | 165 | 101 | 120 | 108 | 83 | 149 | 26 | 2190 |
| matt9ucci | | | 157 | 80 | 30 | 1 | 6 | | | | | | 274 |
| nschonni | | | | 14 | 138 | 10 | | | | | | | 162 |
| kiazhi | | 25 | 79 | 12 | | | | | | | | | 116 |
| alexandair | | 57 | 7 | 24 | 2 | 1 | | | | 1 | | | 92 |
| alexandair | | 57 | 7 | 24 | 2 | 1 | | | | | | | 91 |
| sethvs | | | 1 | 42 | | 20 | 1 | 10 | | 6 | 2 | 1 | 83 |
| doctordns | | 5 | 32 | 20 | 7 | 9 | 5 | | 1 | | | | 79 |
| surfingoldelephant | | | | | | | | | | | 58 | 5 | 63 |
| ehmiiz | | | | | | | | 22 | 14 | | | | 36 |
| ArieHein | | | | | 1 | | | | | 8 | 25 | 1 | 35 |
| ArieHein | | | | | 1 | | | | | 7 | 25 | 1 | 34 |
| yecril71pl | | | | | | 21 | 3 | 3 | | | | | 27 |
| changeworld | | | | | | | | 3 | | | 22 | | 25 |
| skycommand | | | 1 | 3 | 3 | 6 | | 1 | 4 | 1 | 4 | | 23 |
Expand All @@ -36,29 +36,27 @@ Pull Requests help us fix those issues and make the documentation better for eve
| it-praktyk | | | | 16 | 1 | | | | | | | | 17 |
| vors | | 15 | 1 | | | | | | | | | | 16 |
| kvprasoon | | 2 | 1 | 6 | 2 | 2 | 2 | | | | | | 15 |
| purdo17 | | | | 13 | | | | | | | | | 13 |
| k-takai | | | | 5 | 1 | 7 | | | | | | | 13 |
| bergmeister | | | 1 | 3 | 3 | 1 | 1 | 2 | 1 | 1 | | | 13 |
| purdo17 | | | | 13 | | | | | | | | | 13 |
| markekraus | | | 11 | 1 | | | | | | | | | 12 |
| exchange12rocks | | | 7 | 3 | | | 1 | | | | | 1 | 12 |
| hrxn | | | | | | | 2 | 2 | 2 | 5 | | | 11 |
| baardhermansen | | | | | 2 | 1 | | 1 | 2 | | | 5 | 11 |
| bergmeister | | | 1 | 3 | 3 | 1 | 1 | 1 | 1 | | | | 11 |

## GitHub issues opened

GitHub issues help us identify errors and gaps in our documentation.

| Issues Opened | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | Total |
| ------------------ | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ----: |
| Community | 6 | 52 | 96 | 213 | 567 | 563 | 367 | 244 | 291 | 243 | 182 | 74 | 2898 |
| Community | 6 | 52 | 96 | 214 | 568 | 564 | 364 | 230 | 276 | 232 | 162 | 88 | 2852 |
| mklement0 | | | 19 | 60 | 56 | 61 | 28 | 8 | 20 | 24 | 2 | | 278 |
| ehmiiz | | | | | | | | 21 | 14 | | | | 35 |
| ehmiiz | | | | | | | | 20 | 14 | | | | 34 |
| iRon7 | | | | | | 2 | 2 | 2 | 10 | 8 | 8 | | 32 |
| iSazonov | | | 1 | 4 | 10 | 8 | 4 | 3 | | 1 | | | 31 |
| jszabo98 | | | | 2 | 15 | 6 | 1 | | 1 | 2 | | 1 | 28 |
| jszabo98 | | | | 2 | 15 | 6 | 1 | | 1 | 2 | | 2 | 29 |
| surfingoldelephant | | | | | | | | | | 6 | 19 | 2 | 27 |
| kilasuit | | | | | 3 | 2 | 1 | 4 | 1 | 4 | 5 | 3 | 23 |
| juvtib | | | | | | 15 | 7 | | | | | | 22 |
| kilasuit | | | | | 3 | 2 | 1 | 4 | 1 | 3 | 4 | 4 | 22 |
| peetrike | | | | 1 | | 4 | 2 | 6 | 4 | 3 | 1 | | 21 |
| doctordns | | | 5 | 3 | 5 | 7 | 1 | | | | | | 21 |
| JustinGrote | | | | 1 | 3 | 6 | 1 | 1 | 3 | 2 | 3 | | 20 |
Expand All @@ -68,14 +66,12 @@ GitHub issues help us identify errors and gaps in our documentation.
| alexandair | | 9 | 4 | 2 | | | | | | | | | 15 |
| clamb123 | | | | | | | 14 | | | | | | 14 |
| tabad | | | | | | | | | 11 | 2 | | | 13 |
| ThomasNieto | | | | | | 3 | | 2 | 4 | 3 | | | 12 |
| trollyanov | | | | | | | 11 | 1 | | | | | 12 |
| LaurentDardenne | | | 3 | 2 | | | | 5 | 2 | | | | 12 |
| Liturgist | | | | | 1 | 1 | 1 | 2 | 5 | 2 | | | 12 |
| LaurentDardenne | | | 3 | 2 | | | | 5 | 2 | | | | 12 |
| jsilverm | | | | | | 8 | | | 4 | | | | 12 |
| CarloToso | | | | | | | | | 11 | | | | 11 |
| vors | 1 | 6 | 2 | 1 | | | | | | | | | 10 |
| UberKluger | | | | | | 1 | 7 | 2 | | | | | 10 |
| matt9ucci | | | 2 | 5 | | | 2 | | 1 | | | | 10 |
| vors | 1 | 6 | 2 | 1 | | | | | | | | | 10 |
| o-l-a-v | | | | | 1 | | 1 | | 4 | 2 | 2 | | 10 |
| ArmaanMcleod | | | | | | | | | 4 | 6 | | | 10 |
| matt9ucci | | | 2 | 5 | | | 2 | | 1 | | | | 10 |
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
---
title: Add Credential support to PowerShell functions
description: How to add credential parameters to your PowerShell scripts, functions, and cmdlets.
ms.date: 11/16/2022
ms.date: 08/06/2026
ms.custom:
- contributor-JoshDuffney
- sfi-image-nochange
---
# Add Credential support to PowerShell functions

> [!NOTE]
> The [original version][original version] of this article appeared on the blog written by [@joshduffney][@joshduffney]. This
> article has been edited for inclusion on this site. The PowerShell team thanks Josh for sharing
> this content with us. Please check out his blog at [duffney.io][duffney.io].
> The [original version][08] of this article appeared on the blog written by [@joshduffney][12].
> This article has been edited for inclusion on this site. The PowerShell team thanks Josh for
> sharing this content with us. Please check out his blog at [duffney.io][09].

This article shows you how to add credential parameters to PowerShell functions and why you'd want
to. A credential parameter is to allow you to run the function or cmdlet as a different user. The
Expand All @@ -23,7 +23,7 @@ PowerShell session doesn't have that access already.

## Creating credential object

The [PSCredential][PSCredential] object represents a set of security credentials such as a user name and
The [PSCredential][03] object represents a set of security credentials such as a user name and
password. The object can be passed as a parameter to a function that runs as the user account in
that credential object. There are a few ways that you can create a credential object. The first way
to create a credential object is to use the PowerShell cmdlet `Get-Credential`. When you run without
Expand Down Expand Up @@ -103,16 +103,16 @@ things you can add to make it more robust.
> [!TIP]
> Some cmdlets that accept a credential parameter do not support
> `[System.Management.Automation.PSCredential]::Empty` as they should. See the
> [Dealing with Legacy Cmdlets](#dealing-with-legacy-cmdlets) section for a workaround.
> [Dealing with Legacy Cmdlets][05] section for a workaround.

## Using credential parameters

The following example demonstrates how to use credential parameters. This example shows a function
called `Set-RemoteRegistryValue`, which is out of [The Pester Book][The Pester Book]. This function defines the
credential parameter using the techniques describe in the previous section. The function calls
`Invoke-Command` using the `$Credential` variable created by the function. This allows you to change
the user who's running `Invoke-Command`. Because the default value of `$Credential` is an empty
credential, the function can run without providing credentials.
called `Set-RemoteRegistryValue`. This function defines the credential parameter using the
techniques describe in the previous section. The function calls `Invoke-Command` using the
`$Credential` variable created by the function. This allows you to change the user who's running
`Invoke-Command`. Because the default value of `$Credential` is an empty credential, the function
can run without providing credentials.

```powershell
function Set-RemoteRegistryValue {
Expand Down Expand Up @@ -140,7 +140,7 @@ Using `Get-Credential` in parentheses `()` at run time causes the `Get-Credentia
are prompted for a username and password. You could use the **Credential** or **UserName**
parameters of `Get-Credential` to pre-populate the username and domain. The following example uses a
technique called splatting to pass parameters to the `Set-RemoteRegistryValue` function. For more
information about splatting, check out the [about_Splatting][about_Splatting] article.
information about splatting, check out the [about_Splatting][04] article.

```powershell
$remoteKeyParams = @{
Expand All @@ -153,7 +153,7 @@ $remoteKeyParams = @{
Set-RemoteRegistryValue @remoteKeyParams -Credential (Get-Credential)
```

![Get a credential at runtime](./media/add-credentials-to-powershell-functions/GetCredAtRunTime.gif)
![Get a credential at runtime][01]

Using `(Get-Credential)` seems cumbersome. Normally, when you use the **Credential** parameter with
only a username, the cmdlet automatically prompts for the password. The
Expand All @@ -170,7 +170,7 @@ $remoteKeyParams = @{
Set-RemoteRegistryValue @remoteKeyParams -Credential duffney
```

![Prompt for credentials](./media/add-credentials-to-powershell-functions/GetCredsPrompt.gif)
![Prompt for credentials][02]

> [!NOTE]
> To set the registry value shown, these examples assume you have the **Web Server** features of
Expand All @@ -183,7 +183,7 @@ You can also populate a credential variable ahead of time and pass it to the **C
parameter of `Set-RemoteRegistryValue` function. Use this method with Continuous Integration /
Continuous Deployment (CI/CD) tools such as Jenkins, TeamCity, and Octopus Deploy. For an example
using Jenkins, check out Hodge's blog post
[Automating with Jenkins and PowerShell on Windows - Part 2][Automating with Jenkins and PowerShell on Windows - Part 2].
[Automating with Jenkins and PowerShell on Windows - Part 2][11].

This example uses the .NET method to create the credential object and a secure string to pass in the
password.
Expand All @@ -202,10 +202,9 @@ $remoteKeyParams = @{
Set-RemoteRegistryValue @remoteKeyParams -Credential $Cred
```

For this example, the secure string is created using a clear text password. All of the
previously mentioned CI/CD have a secure method of providing that password at run time. When using
those tools, replace the plain text password with the variable defined within the CI/CD tool you
use.
For this example, the secure string is created using a clear text password. All of the previously
mentioned CI/CD have a secure method of providing that password at run time. When using those tools,
replace the plain text password with the variable defined within the CI/CD tool you use.

### Run without credentials

Expand Down Expand Up @@ -264,7 +263,7 @@ function Set-RemoteRegistryValue {
This example uses parameter splatting to call the legacy cmdlet. The `$Credential` object is
conditionally added to the hash table for splatting and avoids the need to repeat the
`Invoke-Command` script block. To learn more about splatting inside functions, see the
[Splatting Parameters Inside Advanced Functions][Splatting Parameters Inside Advanced Functions] blog post.
[Splatting Parameters Inside Advanced Functions][10] blog post.

```powershell
function Set-RemoteRegistryValue {
Expand Down Expand Up @@ -347,21 +346,23 @@ Get-AllSQLDatabases -SQLServer SQL01 -Credential $Credential
Creating and storing credential objects securely can be difficult. The following resources can help
you maintain PowerShell credentials.

- [BetterCredentials][BetterCredentials]
- [Azure Key Vault][Azure Key Vault]
- [Vault Project][Vault Project]
- [SecretManagement module][SecretManagement module]
- [BetterCredentials][13]
- [Azure Key Vault][06]
- [Vault Project][14]
- [SecretManagement module][07]

<!-- link references -->
[original version]: https://duffney.io/addcredentialstopowershellfunctions/
[@joshduffney]: https://twitter.com/joshduffney
[duffney.io]: https://duffney.io/posts/
[BetterCredentials]: https://www.powershellgallery.com/packages/BetterCredentials/
[Azure Key Vault]: https://azure.microsoft.com/services/key-vault/
[Vault Project]: https://www.vaultproject.io/
[Splatting Parameters Inside Advanced Functions]: https://duffney.io/Splatting-Parameters-Within-AdvancedFunctions
[Automating with Jenkins and PowerShell on Windows - Part 2]: https://hodgkins.io/automating-with-jenkins-and-powershell-on-windows-part-2
[PSCredential]: /dotnet/api/system.management.automation.pscredential
[The Pester Book]: https://leanpub.com/the-pester-book
[about_Splatting]: /powershell/module/microsoft.powershell.core/about/about_splatting
[SecretManagement module]: https://devblogs.microsoft.com/powershell/secretmanagement-and-secretstore-updates/
[01]: ./media/add-credentials-to-powershell-functions/GetCredAtRunTime.gif
[02]: ./media/add-credentials-to-powershell-functions/GetCredsPrompt.gif
[03]: /dotnet/api/system.management.automation.pscredential
[04]: /powershell/module/microsoft.powershell.core/about/about_splatting
[05]: #dealing-with-legacy-cmdlets
[06]: https://azure.microsoft.com/services/key-vault/
[07]: https://devblogs.microsoft.com/powershell/secretmanagement-and-secretstore-updates/
[08]: https://duffney.io/addcredentialstopowershellfunctions/
[09]: https://duffney.io/posts/
[10]: https://duffney.io/Splatting-Parameters-Within-AdvancedFunctions
[11]: https://hodgkins.io/automating-with-jenkins-and-powershell-on-windows-part-2
[12]: https://twitter.com/joshduffney
[13]: https://www.powershellgallery.com/packages/BetterCredentials/
[14]: https://www.vaultproject.io/