看不见的Powershell脚本可使用安全密码创建本地管理员帐户

时间:2019-06-10 17:27:36

标签: windows powershell admin administrator

我对stackoverflow和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 :(得分:0)

我认为您可以使用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,您可以使用以下命令从RunTask Schedulerlogon batch script调用

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

并将其对登录用户隐藏。我以为那就是你所说的不可见。