我按照下面的指南创建了一个SecureString密码。现在,我需要使用dsquery选项-s (服务器)、-u (用户)和-p (密码)登录到外部域控制器。
dsquery group -name $group -s $rmSrv -u $user -p $pass | dsget group -members -expand -c -s $rmSrv -u $user -p $pass | dsget user -samid -c -s $rmSrv -u $user -p $pass > $filename当我以明文输入密码时,我会得到身份验证。一旦使用了SecureString对象,我就无法进行身份验证。我试过几种选择,但没能让它运转起来。
你有主意吗?
发布于 2018-04-03 19:59:26
这样做的唯一方法是解密SecureString对象并将其作为字符串获取。
下面是一个示例函数:
function ConvertTo-String {
param(
[Security.SecureString] $secureString
)
try {
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
[Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
}
finally {
if ( $bstr -ne [IntPtr]::Zero ) {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
}
}
}警告:解密SecureString对象的绕过SecureString对象提供的保护。
如果坚持使用dsquery命令,这是唯一的选项,因为它在命令行上需要一个纯文本密码。这在本质上是不安全的。
相反,我建议使用Active Directory,它可以直接使用SecureString,而无需转换为纯文本。
https://stackoverflow.com/questions/49635574
复制相似问题