Система возвращает имя класса вместо переменной

У меня есть небольшой скрипт PowerShell, который я пишу, который позволяет мне выбрать пользователя из Active Directory и случайным образом сгенерировать для него пароль.

$Alphabet=$NULL
for ($a=48; $a –le 70; $a++) {
    $Alphabet += ,[char][byte]$a
}

function Get-TempPassword() {
    Param (
        [int]$Length=10,
        [string[]]$Source
    )

    for ($loop=1; $loop –le $length; $loop++) {
        $TempPassword += ($Source | Get-Random) 
    }
    return $TempPassword
}

$Password = Get-TempPassword -Length 10 -Source $Alphabet
$NewPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force

Set-ADAccountPassword -Identity $User -NewPassword $NewPassword
Set-ADUser –Identity $User –ChangePasswordAtLogon $true
Unlock-ADAccount $User | Out-Null

$Name = (Get-ADUser $User -Properties Name).Name
Write-Host "Okay, $Name's new password has been set to '$NewPassword'."

Вместо возврата последней строки

Хорошо, новый пароль пользователя был установлен на "[Пароль]".

это возвращается

Хорошо, новый пароль пользователя был установлен как "System.Security.SecureString".

Я верю, что он возвращает этот класс и не устанавливает его в качестве пароля, потому что я не могу войти с этим паролем для пользователя. Я предполагаю, что я что-то упускаю, но я довольно долго смотрю на это и не вижу, что мне не хватает. Я также попытался закомментировать строку

$NewPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force

и это, кажется, не помогает, что я ожидал ошибкой, потому что переменные больше не совпадают.

1 ответ

Решение

В этой строке вы делаете пароль:

$Password = Get-TempPassword -Length 10 -Source $Alphabet

Затем вы превращаете его в безопасную строку

$NewPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force

Так что если вы хотите увидеть пароль, то выведите $Password а не безопасная строка $NewPassword

Write-Host "Okay, $Name's new password has been set to '$Password'."
Другие вопросы по тегам