gpt4 book ai didi

powershell - 跨 session 保存 Powershell 对象

转载 作者:行者123 更新时间:2023-12-02 23:25:25 25 4
gpt4 key购买 nike

我目前在 powershell 中有一个与 REST API 交互的项目,打开新的 powershell session 后的第一步是验证自己,这将创建一个 websession 对象,然后用于后续的 API 调用。

我想知道在所有 Powershell session 中存储此 token 对象的最佳方法是什么,因为现在如果我验证自己然后关闭并重新打开 powershell,我需要重新验证,这很不方便。我希望能够在理论上进行一次身份验证,然后每当我打开 powershell 时就能够使用我已经保存的 websession 对象。目前我将此 websession 对象存储在 $MyInvocation.MyCommand.Module.PrivateData.Session
谢谢你的时间。

最佳答案

我已经编写了许多与 Web 上的 REST API 交互的 PowerShell 模块,所以我必须解决这个问题!

我喜欢使用的技术是将对象存储在用户的本地凭证存储中,如我的 PSReddit PowerShell Module 中所示。 .

首先,以加密状态导出您的密码。我们需要同时使用 ConvertTo 和 ConvertFrom cmdlet。

为什么这两个 cmdlet?
ConvertTo-SecureString将我们的明文变成一个加密对象,但我们不能导出它。然后我们使用 ConvertFrom-SecureString将加密对象转回加密文本,我们可以将其导出。

我将从我非常安全的 ham 密码开始。

$password = "ham"
$password | ConvertTo-SecureString -AsPlainText -Force |
ConvertFrom-SecureString | Export-CliXML $Mypath\Export.ps1xml

此时,我在磁盘上有一个加密的文件。如果有人登录到他们无法解密的机器,只有我可以。如果有人将它从机器上复制下来,他们仍然无法解密它。只有我,只有这里。

我们如何解密文本?

现在,假设我们想要返回相同的纯文本以备后用,我们可以将其添加到我们的 PowerShell 配置文件中,您可以像这样导入您的密码。
$pass = Import-CliXML $Mypath\Export.ps1xml | ConvertTo-SecureString
Get-DecryptedValue -inputObj $pass -name password

$password
>"ham"

这将创建一个名为 $password 的变量。包含您的密码。解密取决于此功能,因此请确保它在您的个人资料中: Get-DecryptedValue .
Function Get-DecryptedValue{
param($inputObj,$name)

$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($inputObj)
$result = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
New-Variable -Scope Global -Name $name -Value $result -PassThru -Force

}

关于powershell - 跨 session 保存 Powershell 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38360998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com