PowerShell:创建本地用户帐户

57

我需要创建一个新的本地用户账户,然后将其添加到本地管理员组。这可以在PowerShell中完成吗?

编辑:

# Create new local Admin user for script purposes
$Computer = [ADSI]"WinNT://$Env:COMPUTERNAME,Computer"

$LocalAdmin = $Computer.Create("User", "LocalAdmin")
$LocalAdmin.SetPassword("Password01")
$LocalAdmin.SetInfo()
$LocalAdmin.FullName = "Local Admin by Powershell"
$LocalAdmin.SetInfo()
$LocalAdmin.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD
$LocalAdmin.SetInfo()

我有这个,但想知道是否有更符合PowerShell的选项。

8
那里面哪些部分不像PowerShell的风格?并不是所有的代码都是cmdlet(命令),但这并不意味着你不能将上面的代码封装在你自己的函数中,以使其看起来像一个命令。 - alroc
2
PowerShell-esque 是 cmdlets 和 pipelines;这是 C++。 - bwerks
3
如果对于你来说,PowerShell 只是一些 cmdlets 和 pipelines,那么你完全忽略了 PowerShell "power" 的部分-- .NET、COM 接口、反射、平台调用等等。 - thepip3r
我不得不使用你的ADSI方法,因为“New-LocalUser”会抛出有关未满足密码复杂性要求的错误。 - woter324
6个回答

75

另一种选择是老派的NET USER命令:

NET USER用户名 "密码" /ADD

可以设置的选项不够完备,但对于简单用户创建来说更加简单易用,Powershell脚本编写也更加容易。

NET LOCALGROUP "组名" "用户名" /add可用于设置组成员身份。


3
对于我来说,调用net.exe命令并不像原始的ADSI代码一样具有PowerShell风格;这些命令中没有任何体现出PowerShell的迹象,你可以将它们放入一个批处理文件中,然后它们仍然能够正常工作。在我看来,这种方法避免了面向对象Shell的强大之处,并且重新回到了必须处理特定应用程序命令语法、退出代码和错误消息的情况。不过,公平地说,这里实际上有两个不同的问题:“如何在PowerShell中完成此操作?”和“我可以使用PowerShell完成此操作。如何更好地完成它?” - Lance U. Matthews
2
就我所知,我遇到了一个问题,这个问题与我编写的一个PowerShell函数有关,该函数用于包装“NET USER /ADD”调用。具体来说,如果密码超过14个字符,NET USER命令行将提示用户确认Y/N。在NET USER中没有命令行选项提供该确认,因此会“冻结”非交互式运行的PS脚本。 - Jaans
1
@Jaans,你可以通过在结尾处使用"/Y"来覆盖该提示: net user $name $password /add /fullname:$full /passwordchg:no /Y - Desktop

45

从PowerShell 5.1开始,有一个cmdlet New-LocalUser 可以创建本地用户账户。

使用示例:

创建一个用户账户

New-LocalUser -Name "User02" -Description "Description of this account." -NoPassword

或者创建一个带有密码的用户账户

$Password = Read-Host -AsSecureString
New-LocalUser "User03" -Password $Password -FullName "Third User" -Description "Description of this account."

或者创建与Microsoft账户相关联的用户账户

New-LocalUser -Name "MicrosoftAccount\usr name@Outlook.com" -Description "Description of this account." 

值得一提的是,PowerShell 5.1仍然只有预览版发布。 - kls
1
PowerShell 5.1 包含在 Windows Server 2016 中。 :-) - Gert van den Berg
1
已验证此在Windows 10企业版,PowerShell版本5.1 Build 14393上运行。 - RoninEngineer
在安装了WMF5.1之后,可以在Windows 7上运行。 - stijn

12

尝试使用Carbon安装用户添加组成员功能:

Install-User -Username "User" -Description "LocalAdmin" -FullName "Local Admin by Powershell" -Password "Password01"
Add-GroupMember -Name 'Administrators' -Member 'User'

免责声明:我是Carbon项目的创建者/维护者。


你好,你的get carbon正是我在寻找的,它是否也适用于2k12r2上asp网站的mod-security脚本呢?希望能够看到一些关于IIS安全模块和服务器防御方面的建议。 - aggie
@aggie 请查看Carbon文档以获取其全部功能列表。 - Aaron Jensen
我喜欢这个,看起来维护得很好。不久之后,我将为部署脚本碳化我们的基本模块。未来可能会有一些贡献。感谢@aaronjensen等人! - sonjz

8
截至2014年,来自微软代表(脚本小子)的一份声明如下:

尽管我们可能不愿承认,但微软仍未提供任何Windows PowerShell cmdlet,允许创建本地用户帐户或本地用户组。我们终于有了一个期望状态配置(DSC)提供程序可以实现这一点 - 但迄今为止,没有cmdlet。


1
Import-Csv C:\test.csv |
Foreach-Object {
  NET USER    $ _.username   $ _.password /ADD
  NET LOCALGROUP "group" $_.username  /ADD
}

编辑csv文件,将用户名和密码更改为你自己的,并将"group"更改为你的组名。

:) 在2012 R2上工作


0
$sec_pass = ConvertTo-SecureString -String "SomePasword" -AsPlainText -Force
New-LocalUser -Name username -FullName username -PasswordNeverExpires -Password $sec_pass
Add-LocalGroupMember -Group Administrators -Member username

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接