当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell Get-Credential Cmdlet 和所有凭证

作者:精品下载站 日期:2024-12-14 12:36:00 浏览:15 分类:玩电脑

使用 PowerShell Get-Credential Cmdlet 和所有凭证


凭据是 PowerShell 中无处不在的对象。让我们深入了解如何使用 PowerShell Get-Credential cmdlet,以及如何在没有提示的情况下创建 PSCredential 对象。

PSCredential 对象是一种安全存储凭据并将其传递给各种服务的创造性方法。许多内置和第三方 cmdlet 在许多不同的命令上都需要 PSCredential 对象。

使用获取凭证

通常,要创建 PSCredential 对象,您可以使用 Get-Credential cmdlet。 Get-Credential cmdlet 是 PowerShell 接收输入以创建 PSCredential 对象(例如用户名和密码)的最常见方式。

[玩转系统] 使用 PowerShell Get-Credential Cmdlet 和所有凭证

Get-Credential cmdlet 工作正常,但它是交互式的。没有办法无缝地将值传递给它。每次运行时,它都会在控制台提示输入用户名和密码,或者弹出一个对话框要求输入用户名和密码。

在没有提示的情况下创建凭证

如果您正在开发在计划任务或某些更重要的自动化框架的一部分中运行的自动化脚本,该怎么办?在这种情况下,没有人在控制台输入用户名和密码。现在是时候从头开始创建一个 PSCredential 对象了!

要构建没有交互的PSCredential对象,首先需要对密码进行加密。 PSCredential 对象需要一个纯文本用户名和一个加密字符串作为密码。

要加密密码,您需要将字符串转换为安全字符串。您可以使用 ConvertTo-SecureString cmdlet 来完成此操作。将纯文本密码传递给此 cmdlet,因为它是纯文本,所以我们还必须使用 PlainTextForce 参数。 PowerShell 无意中明确表明您确实在此处传递纯文本密码。

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

创建安全字符串后,就可以构建 PSCredential 对象了。为此,请使用定义 System.Management.Automation.PSCredential 对象类型的 New-Object cmdlet。 PSCredential 类有一个构造函数,它接受用户名和一个安全字符串,我们可以通过将两者括在一组括号中来使用。

$credential = New-Object System.Management.Automation.PSCredential ('root', $password)

我们现在保存了一个PSCredential对象来执行我们想要的操作。此时,我们可以使用 Credential 参数将 $credential 变量传递给许多不同的命令,并且效果很好。要检查它是否是使用预期的用户名和密码创建的,我们可以引用 UserName 属性,该属性应显示您之前使用的用户名。

PS> $credential.UserName
root

密码是加密的,但如果您在同一台计算机上读取密码并登录用户,则可以使用 GetNetworkCredential() 方法以纯文本形式查看密码。只需将 GetNetworkCredential() 附加到凭证对象的末尾,但请注意,您不会立即看到密码。

PS> $credential.GetNetworkCredential()

UserName Domain
-------- ------
root

要查看密码,您需要使用 GetNetworkCredential() 返回的对象上的 Password 属性。

PS51> $credential.GetNetworkCredential().Password
MySecretPassword

返回的密码应该与您之前向 PSCredential 构造函数提供的密码相同。

概括

您可以看到,在不使用 Get-Credential cmdlet 的情况下创建 PSCredential 对象并不是太糟糕。事实上,防止其成为 PowerShell 单行代码的唯一任务就是创建安全字符串!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯