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

Use SecureString password object in dsquery command authentication

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

你有什么想法吗?

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

相反,我建议使用可以直接使用 SecureString 而无需转换为 plain-text.

的 Active Directory cmdlet