我有一些参数存储在本地硬盘上的加密文本文件中。这些参数必须保密。
如何读取/解密文件中的参数并将它们传递给powershell函数,其方式是变量永远不会暴露/以纯文本形式显示?
我想使用安全字符串,但是如何将它们传递给powershell函数?我试过这个:
function Create-Securestring
{
$my_secure_password = convertto-securestring "password" -asplaintext -force
return $my_secure_password
}
function Accept-Securestring
{
param($secure)
$cast = [string]$secure ## maybe cast works?
$test = "$cast test string"
if ($secure -eq "password"){ write "works fine" }
return $test
}
$secure = Create-Securestring
$test = Accept-Securestring $secure
$test # -> System.Security.SecureString test string
我在这里给出了一个外部文件的例子,但是接受了如上所述存储和使用秘密数据的任何方法。
答案 0 :(得分:1)
您的问题是将安全字符串转换回常规字符串。您可以将其转换为PScredential
并使用GetNetworkCredential().Password
类似Ansgar链接,或者您可以使用[System.Runtime.InteropServices.Marshal]
中的某些方法。
function Create-Securestring {
convertto-securestring "password" -asplaintext -force
}
function Accept-Securestring {
$secure = Create-Securestring
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
$cast = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
"$cast test string"
if ($cast -eq "password"){ write "works fine" }
}
但请注意,将它们转换回来会使它们成为"明文"。这会让你回到第一条评论中的安斯加的观点,如果它现在应该是安全的,那么现在就让它变得不安全了。