使用 PowerShell 获取凭证

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 中使用 Get-Credential 获取凭证
  2. 在 PowerShell 中使用 Get-Credential Cmdlet 而不提示获取凭证
使用 PowerShell 获取凭证

PSCredential 对象是一种创造性的方式,可以安全地存储凭证并将其传递给各种服务。许多本机和第三方 cmdlet 在许多不同的命令上都需要 PSCredential 对象。此外,凭证是 Windows PowerShell 中普遍存在的对象。

本文将讨论如何使用 Windows PowerShell Get-Credential cmdlet 并在没有任何提示的情况下获取凭证。

在 PowerShell 中使用 Get-Credential 获取凭证

通常,要创建 PSCredential 对象,我们会使用 Get-Credential cmdlet。上述 cmdlet 是 Windows PowerShell 接收输入以创建 PSCredential 对象的最常见方式。该对象主要由用户名和密码组成。

每次执行时,它都会在命令行中提示输入用户名和密码,或者会出现一个弹出对话框,询问用户的凭证。

在 PowerShell 中使用 Get-Credential Cmdlet 而不提示获取凭证

例如,我们正在开发一个在计划任务中运行的自动化脚本,或者是一些更强大的自动化框架的一部分。在这种情况下,没有人操作控制台来输入用户名和密码。因此,最好从头开始构建 PSCredential 对象。

创建没有交互的 PSCredential 对象涉及加密过程。PSCredential 对象需要纯文本用户名和加密密码。

要加密密码,我们需要将标准字符串转换为安全字符串。我们通过使用 ConvertTo-SecureString cmdlet 来做到这一点。我们可以将纯文本密码传递给这个 cmdlet,因为它是纯文本,所以我们必须使用 -PlainText-Force 参数。这两个参数都表明我们正在传递一个纯文本字符串,不需要确认。

$pass = ConvertTo-SecureString 'MySecretPassword' -AsPlainText -Force

创建安全字符串后,就该创建 PSCredential 对象了。为此,我们可以使用 New-Object cmdlet 来定义 System.Management.Automation.PSCredential 的对象。PSCredential 类有一个构造函数,它将接受纯文本用户名和我们可以用作参数的安全字符串密码。

$credential = New-Object System.Management.Automation.PSCredential ('user01', $pass)

我们现在有一个 PSCredential 对象,其中我们的纯文本用户名和安全字符串密码保存在一个变量中。我们现在可以将 $credential 变量传递给几个需要 -Credential 参数的命令,这将非常有效。要验证它是否是使用预期的用户名和密码创建的,我们可以引用 UserName 属性,显示你之前使用的用户名。

示例代码:

$credential.Username

输出:

user01

密码通过安全字符串加密,但如果你在同一台计算机上读取密码并登录用户,我们可以使用 GetNetworkCredential() 方法以纯文本形式查看密码。因此,在 $credential 变量的末尾附加 GetNetworkCredential(),但请注意,一旦执行,你将不知道控制台上打印的密码。

示例代码:

$credential.GetNetworkCredential()

输出:

UserName Domain
-------- ------
user01

要查看密码,你需要在 GetNetworkCredential() 返回的对象上使用 Password 属性。返回的密码应该与你提供给 PSCredential 构造函数的密码相同。

示例代码:

$credential.GetNetworkCredential().Password

输出:

MySecretPassword

现在我们已经验证了 $credential 变量包含我们的用户名和密码,我们可以使用该变量作为 Get-Credential cmdlet 中的参数。

Get-Credential -Credential $credential
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn