Powershell 在dsquery命令身份验证中使用SecureString密码对象
我按照以下指南创建了密码。 现在,我需要使用dsquery选项-s(服务器)-u(用户)和-p(密码)登录到外部域控制器 当我以明文形式输入密码时,我得到了身份验证。 一旦使用SecureString对象,我就无法进行身份验证。 我尝试了几个选项,但无法运行Powershell 在dsquery命令身份验证中使用SecureString密码对象,powershell,securestring,dsquery,Powershell,Securestring,Dsquery,我按照以下指南创建了密码。 现在,我需要使用dsquery选项-s(服务器)-u(用户)和-p(密码)登录到外部域控制器 当我以明文形式输入密码时,我得到了身份验证。 一旦使用SecureString对象,我就无法进行身份验证。 我尝试了几个选项,但无法运行 你有什么想法吗?唯一的方法是解密SecureString对象并将其作为字符串获取 下面是一个示例函数: function ConvertTo-String { param( [Security.SecureString] $se
你有什么想法吗?唯一的方法是解密
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 cmdlet,它可以直接使用
SecureString
,而无需转换为纯文本。dsquery
是一种命令行可执行文件。它不能解释对象,只能解释纯文本,因此您需要将securestring
转换为纯文本
,并以这种方式传递。我建议阅读以使用powershell
与AD
交互。感谢您对AD cmdlet的提示。我要试试那些。
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)
}
}
}