在Windows 10上将本地用户创建为Administrator组的一部分

时间:2018-06-19 14:37:14

标签: powershell

设置:

我们都处于域环境中。 Active Directory是Windows Server 2012 R2

客户端工作站是Windows 10版本(1703和1709)的组合

需要在所有工作站上创建用户“ Servis”,并将其放置到本地Administrator组。我将输入一个带有主机名的文本文件。

这是我试图使其运行的脚本,但没有成功。

已创建用户,但未将用户添加到本地管理员组。

这是我得到的错误:

  

在WinNT:// WS-TEST上创建Service23时出错:检索成员“添加”时发生以下异常:“找不到网络路径。

$computers = Get-Content -path C:\Scripts\CreateLocalUser\New\Computers.txt
$username = "Servis"
$password = "P4$$w0rd!@#"
Foreach ($computer in $computers) {
    $users = $null
    $computer = [ADSI]"WinNT://$computername"
    Try {
        $users = $computer.psbase.children | select -expand name
        if ($users -like $username) {
            Write-Host "$username already exists"  -ForegroundColor Green
        }
        Else {
            $user_obj = $computer.Create("user", "$username")
            $user_obj.SetPassword($password)
            $user_obj.SetInfo()

            $user_obj.Put("description", "$username")
            $user_obj.SetInfo()
            $user_obj.psbase.invokeset("AccountDisabled", "False")
            $user_obj.SetInfo()
            $users = $computer.psbase.children | select -expand name
            if ($users -like $username) {
                Write-Host "$username has been created on $($computer.name)"

                $group = [ADSI]("WinNT://" + $computername + "/administrators,group")
                $group.add("WinNT://" + $computername + "/" + $username + ",user")
            }
            Else {
                Write-Host "$username has not been created on $($computer.name)"
            }
        }
    }
    Catch {
        Write-Host "Error creating $username on $($computer.path):  $($Error[0].Exception.Message)"
    }
}

1 个答案:

答案 0 :(得分:1)

使用 SecureString 格式的密码正确定义了凭据之后,创建本地管理员的过程分为两步:

  1. 创建用户

  2. 将该用户添加到“本地管理员”组

以下几行是所需的powershell代码:

$username = "Servis"
$password =  ConvertTo-SecureString  -AsPlainText "P4$$w0rd!@#" -Force
New-LocalUser "$username" -Password $password -FullName "$username" -Description "Local admin $username"
Add-LocalGroupMember -Group "Administrators" -Member "$username"

如果要使脚本更健壮,应考虑创建一些Pester测试并将这些检查添加到脚本中:

  • 验证文件是否存在
  • 验证文件的内容(如果是带有正则表达式的IP或FQDN)
  • 在连接之前测试主机是否可访问(例如Test-Connection -computername $ computer -count 1 -quiet)
  • 使用带有计算机名和参数列表(用户名,密码)的invoke-command
  • 如果未引发错误,请检查用户是否已成功创建并且是管理员组的成员
  • 写一个日志文件以跟踪所有完成的任务(由谁,何时在什么主机上等等)。

如果您感兴趣,我在blog post上写了www.scriptinglibrary.com,介绍了完成此任务的几种更好方法。