在 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
我已按照以下指南创建 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.