使用 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn