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

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

作者:精品下载站 日期:2024-12-14 07:50:42 浏览:14 分类:玩电脑

以 JSON 格式存储 PowerShell 凭据


有时我在 PowerShell 中做一些事情只是为了看看会发生什么。这是了解新 cmdlet 和技术的好方法。有时这些实验会产生有用的结果。有时它们可能最终成为教学设备。当然,结果可能会同时满足这两个目的,今天当我考虑在 JSON 文件中存储凭据时,您可能必须做出决定。

自 PowerShell 早期以来,我们就一直在宣扬在脚本中硬编码凭据的危险。如果您需要密码,您应该提示输入密码,或者编写 PowerShell 工具来接受凭据对象。但在某些情况下,您可能需要自动化流程并使用备用或特定凭证。一种方法是使用 cliXML cmdlet 安全地存储凭据。

$secure = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force
$cred = New-Object -typename PSCredential -ArgumentList @('company\admin',$secure)
$cred | Export-clixml c:\work\admin.xml

我手动创建了一个凭据,以便您可以看到密码。当您使用 Export-Clixml 时,PowerShell 会自动转换安全字符串密码。

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

密码使用本机加密 API 进行加密。您只能在同一台计算机上反转该过程。

$in = Import-clixml C:\work\admin.xml

如果我将文件复制到另一台计算机并尝试该过程,我会收到错误消息。

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

哦,为了证明导入在本地有效:

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

但是,如果出于某种原因您想使用 JSON 文件来存储凭据怎么办?你会怎么做?

PowerShell 不会自动插入转换步骤,但您自己实现它们并不困难。首先,您必须选择用户名并将密码从安全字符串转换回来。

$cred | Select Username,@{Name="Password";Expression = { $_.password | ConvertFrom-SecureString }}

现在可以将该对象通过管道传输到 Convertto-Json:

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

此 cmdlet 不会创建文件,因此您需要通过管道传输到 Out-File 或 Set-Content。

json 相对于 XML 的一个小优点是文件开销更小。

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

但现在让我们看看如何让它复活。首先,将内容从 JSON 转换。

$in = Get-Content -Path c:\work\admin.json | ConvertFrom-Json

接下来,将密码值转换回安全字符串。

$secure = ConvertTo-SecureString $in.Password -ErrorAction Stop

最后,创建一个凭证对象。

$newcred = New-Object -TypeName PSCredential $in.username,$secure

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

整个过程确实没有那么麻烦,但我继续创建了一个名为 PSJsonCredential 的 PowerShell 模块。

该模块具有用于导出、导入和报告的命令。

Export-PSCredentialToJson -Path c:\work\admin.json -Credential $cred

此命令还有一个 -NoClobber 参数,以避免覆盖现有文件。我还添加了一个元数据属性来指示谁、何地和何时。您可以使用 Get-PSCredentialFromJson 获取此数据:

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

导入命令可以忽略元数据。

$admin = Import-PSCredentialFromJson -Path C:\work\admin.json

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

如果您想尝试一下或更仔细地查看代码,我已将该模块发布到 PowerShell 库。

[玩转系统] 以 JSON 格式存储 PowerShell 凭据

正如我在一开始提到的,这个模块很难说是开创性的,可能没有实际用途。但至少它可能会提供一些有关使用凭据和 JSON 文件的见解。

请注意,以*任何*形式将凭证存储到磁盘存在潜在的安全风险,某些组织可能不允许这样做。由您决定这些技术在您的公司中是否适合。

我希望您能让我知道您的想法,特别是如果您找到了实际应用。

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

取消回复欢迎 发表评论:

关灯