我已经编写了多个与Web上的REST API交互的PowerShell模块,因此我必须解决这个问题!我喜欢使用的技术涉及将对象存储在用户的本地凭据存储中,就像在我的
PSReddit PowerShell模块中所看到的那样。
首先,要以加密状态导出密码。我们需要使用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
}
Export-CLIXML
。 - TessellatingHeckler