使用安全密码创建本地管理员帐户的隐形 powershell 脚本
Invisible powershell script to create local admin account with secured password
我对 Whosebug 和 Powershell 不是很熟悉。
抱歉格式化,请让我知道如何改进我的 post 以获得更多可见性。
我一直在尝试获取一个不可见的 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()
我想你可以使用 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
并对登录用户隐藏它。我假设这就是你所说的隐形的意思。
我对 Whosebug 和 Powershell 不是很熟悉。 抱歉格式化,请让我知道如何改进我的 post 以获得更多可见性。
我一直在尝试获取一个不可见的 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()
我想你可以使用 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
并对登录用户隐藏它。我假设这就是你所说的隐形的意思。