0

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

你有想法吗?

4

1 回答 1

1

唯一的方法是解密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命令,这是唯一的选择,因为它需要在其命令行上输入纯文本密码。这本质上是不安全的。

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

于 2018-04-03T19:59:26.320 回答