Я делаю "ярлык" PS1 скрипт для обновления пароля пользователя домена. Я хотел бы дважды запросить у пользователя новый пароль, не показывая пароль на экране. Когда я использую $Text1=Read-Host ; $Text2=Read-Host ; $Text1 -eq $Text2
при том же вводе - например, «1» - вывод этого однострочника будет «True». Тем не мение,
$Text1=Read-Host -AsSecureString ; $Text2=Read-Host -AsSecureString ; $Text1 -eq $Text2
и
$Text1=Read-Host -AsSecureString ; $Text2=Read-Host -AsSecureString ; (ConvertFrom-SecureString $Text1) -eq (ConvertFrom-SecureString $Text2)
вернуть False.
Скрипт в том виде, в каком он есть сейчас, без двойных запросов и сравнения вводимых пользователем данных, представлен ниже, и он работает для сброса пароля пользователя.
$UserName = Read-Host "User name "
$NewPass = Read-Host -AsSecureString
Set-ADAccountPassword `
-NewPassword $NewPass `
-Verbose `
-Identity ( (Get-ADUser -Filter "SamAccountName -like '$UserName'").DistinguishedName )
$NewPass.Dispose()
В соответствии с Технет, вам необходимо «расшифровать» secureString следующим методом:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($text1)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Во-первых, это преобразует защищенную строку в тип данных «Базовая строка» (BSTR), а затем обратно в читаемую строку. Это даст вам простой текстовый пароль, введенный пользователем. Вы можете, например, поместить это в небольшую функцию, которую вы можете вызывать для обоих паролей следующим образом:
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)
Это будет работать, как ожидалось.
Вы также можете создать функцию, которая будет напрямую сравнивать два заданных SecureString, но я оставлю вам точную реализацию.