首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell,如何比较用户输入

Powershell,如何比较用户输入
EN

Server Fault用户
提问于 2019-01-16 05:06:19
回答 1查看 1.1K关注 0票数 2

我正在制作一个“快捷”PS1脚本来更新域用户的密码。我想两次提示用户输入新密码,而不显示屏幕上的密码。当我使用具有相同输入(例如'1‘)的$Text1=Read-Host ; $Text2=Read-Host ; $Text1 -eq $Text2时,该一行的输出是"True“。然而,

代码语言:javascript
复制
$Text1=Read-Host -AsSecureString ; $Text2=Read-Host -AsSecureString ; $Text1 -eq $Text2

代码语言:javascript
复制
$Text1=Read-Host -AsSecureString ; $Text2=Read-Host -AsSecureString ; (ConvertFrom-SecureString $Text1) -eq (ConvertFrom-SecureString $Text2)

还假。

现在的脚本没有两次提示,也没有比较用户的输入,它的工作原理是重置用户的密码。

代码语言:javascript
复制
$UserName = Read-Host "User name "
$NewPass = Read-Host -AsSecureString
Set-ADAccountPassword `
    -NewPassword $NewPass `
    -Verbose `
    -Identity ( (Get-ADUser -Filter "SamAccountName -like '$UserName'").DistinguishedName )
$NewPass.Dispose()
EN

回答 1

Server Fault用户

回答已采纳

发布于 2019-01-16 13:31:22

根据Technet,您必须使用以下方法“解密”secureString:

代码语言:javascript
复制
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($text1)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

首先,这会将安全字符串转换为“基本字符串”数据类型(BSTR),并将其转换回可读字符串。这将为您提供用户输入的纯文本密码。例如,您可以将它放在一个小函数中,您可以调用这两个密码,如下所示:

代码语言:javascript
复制
 function Decrypt-Password ($secureString){
   $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
   $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
   return $PlainPassword
  }

$Text1=Read-Host -AsSecureString
$Text2=Read-Host -AsSecureString    
(Decrypt-Password -secureString $text1) -eq (Decrypt-Password -secureString $text2)

这将像预期的那样起作用。

您还可以创建一个函数,直接比较两个给定的SecureStrings,但具体实现由您决定。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/949289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档