2017-01-11 20 views
0

У меня есть небольшой сценарий 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 

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

+0

Вы не можете распечатать прямую ссылку на экран непосредственно – bluuf

+0

Спасибо @Hackerman, я не был уверен, как сформулировать свою проблему и не смог найти другую тему. –

ответ

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'." 
+0

Это решило проблему, спасибо большое. Я бы отметил это как лучший ответ, но я думаю, что это слишком скоро после публикации, и нет никакого выбора :) –

+1

Если ответ решает вашу проблему, вы должны принять ответ. – BenH

+0

Как сказал Бенх, вы не можете увидеть безопасную строку. Это по дизайну. Другими словами, распечатайте '$ password', прежде чем преобразовать его в безопасную строку. – YanivK

 Смежные вопросы

  • Нет связанных вопросов^_^