在dsquery命令身份验证中使用SecureString密码对象

时间:2018-04-03 17:05:18

标签: powershell securestring dsquery

我已按照以下指南创建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对象,我无法进行身份验证。 我尝试了一些选项,但无法让它运行。

你有想法吗?

1 个答案:

答案 0 :(得分:1)

唯一的方法是解密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个对象提供的保护。

如果您坚持使用SecureString命令,这是唯一的选项,因为它需要在其命令行上使用纯文本密码。这本质上是不安全的。

相反,我建议使用可以直接使用.append的Active Directory cmdlet,而无需转换为纯文本。