Невидимый скрипт powershell для создания локальной учетной записи администратора с защищенным паролем - PullRequest
0 голосов
/ 10 июня 2019

Я не очень хорошо знаком ни со стеком, ни с Powershell. Извините за форматирование, пожалуйста, дайте мне знать, как улучшить мой пост для большей наглядности.

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

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

Пока что скрипт не молчит (невидим) и пароль не сохраняется. Учетная запись действительно создана, но при вводе пароля появляется сообщение об ошибке. Если я установлю пароль незащищенным способом, он будет работать и попросит меня изменить его при следующем входе в систему.

К сожалению, если учетная запись уже существует, она не выходит из сценария, а меняет пароль.

Создание пароля:

Read-Host -Prompt "Saisir mot de passe " -AsSecureString | ConvertFrom-SecureString | Out-File C:\script2\init.pwd

Основной сценарий:

$Password = cat C:\script2\init.pwd | ConvertTo-SecureString

$group = "Administrators"

$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"
$existing = $adsi.Children | where {$_.SchemaClassName -eq 'user' -and $_.Name -eq $Username }

if ($existing -eq $Username) {
        exit
}
else {
        NET USER $Username $Password /add /y /expires:never
        NET LOCALGROUP $group $Username /add

}

$Username = "su"
$Usrstring = "WinNT://localhost/"+$Username  
$usr=[ADSI] $Usrstring  
$usr.passwordExpired = 1  
$usr.setinfo()

1 Ответ

0 голосов
/ 10 июня 2019

Я думаю, что вы можете использовать метод try-catch и New-localuser, чтобы сделать это.

$username = "TestUser"
$Password = cat C:\script2\init.pwd | ConvertTo-SecureString
#Changing this back to what would work for you. I was supplying a plaintext password
#$Password = Read-Host -Prompt "Password" -AsSecureString

try
{
    Get-LocalUser -Name $username -ErrorAction Stop
    #"User Already exists"
}
catch
{
    New-LocalUser -Name $username -Password $Password
    Add-LocalGroupMember -Group "Administrators" -Member $username

    $usr=[ADSI]"WinNT://localhost/$username"
    $usr.passwordExpired = 1
    $usr.setinfo()
}

Если это сохранено как скрипт, скажем Create-localUser.ps1, вы можете вызвать его из Run, Task Scheduler или logon batch script, используя команду

powershell.exe -windowstyle Hidden -file C:\temp\create-Localuser.ps1

И держать его скрытым от зарегистрированного пользователя. Я предположил, что вы имели в виду невидимое.

...