首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨会话保存Powershell对象

跨会话保存Powershell对象
EN

Stack Overflow用户
提问于 2016-07-13 20:18:40
回答 1查看 1.4K关注 0票数 2

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

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

耽误您时间,实在对不起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 20:38:45

我已经编写了许多PowerShell模块,它们与web上的REST交互,所以我不得不解决这个问题!

我喜欢使用的技术包括将对象存储在用户的本地凭据存储中,如我的PSReddit PowerShell模块所示。

首先,以加密状态导出密码。我们需要同时使用ConvertTo和ConvertFrom cmdlet来实现这一点。

为什么都是cmdlet?

ConvertTo-SecureString将我们的明文转换成一个加密的对象,但是我们不能导出它。然后,我们使用ConvertFrom-SecureString将加密的对象转换回加密的文本,然后我们可以导出这些文本。

我要从我非常安全的火腿密码开始。

代码语言:javascript
复制
$password = "ham"
$password | ConvertTo-SecureString -AsPlainText -Force | 
  ConvertFrom-SecureString | Export-CliXML $Mypath\Export.ps1xml

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

我们如何解密文本?

现在,假设我们想让相同的纯文本恢复使用,我们可以将它添加到我们的PowerShell配置文件中,您可以像这样导入您的密码。

代码语言:javascript
复制
$pass = Import-CliXML $Mypath\Export.ps1xml | ConvertTo-SecureString
Get-DecryptedValue -inputObj $pass -name password

$password 
>"ham"

这将创建一个名为$password的变量,其中包含您的密码。解密取决于此函数,因此请确保它在您的配置文件:Get-DecryptedValue中。

代码语言:javascript
复制
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

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38360998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档