首页 > 解决方案 > 使用安全密码创建本地管理员帐户的隐形 powershell 脚本

问题描述

我对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()

标签: windowspowershelladminadministrator

解决方案


我认为您可以使用该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

并使其对登录用户隐藏。我以为这就是你所说的隐形。


推荐阅读