如何在Powershell中将用户添加到本地管理员组?

时间:2017-12-22 19:50:26

标签: powershell

我正在尝试使用Powershell在远程计算机上创建用户。创建帐户后,我想在本地管理员组中添加该帐户。

帐户已创建,但未在管理员组中添加。以下是我正在使用的代码。

  cls
  $username = "test_user"
$password = "password"
$computer1 = hostname
  $users = $null
   $computer = [ADSI]“WinNT://$computer1”
   Try {
      $users = $computer.psbase.children | select -expand name  
      if ($users -like $username) {
         Write-Host "$username already exists"
      } 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://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:localhost/$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)"
   }

我做错了什么?

3 个答案:

答案 0 :(得分:1)

$env:computername是您的本地计算机。 $env:localhost不存在。 $computer1是您为将用户添加到之前的计算机定义的变量。

$group = [ADSI]("WinNT://$computer1/administrators,group")
$group.add("WinNT://$computer1/$username,user")

答案 1 :(得分:1)

我用这个

$computername = "computername"  # place computername here for remote access
$username = 'user'
$password = 'P@ssw0rd1' #password
$desc = 'Local admin account'
$computer = [ADSI]"WinNT://$computername,computer"
$user = $computer.Create("user", $username)
$user.SetPassword($password)
$user.Setinfo()
$user.description = $desc
$user.setinfo()
$user.UserFlags = 65536
$user.SetInfo()
$group = [ADSI]("WinNT://$computername/administrators,group")
$group.add("WinNT://$username,user")

答案 2 :(得分:1)

这是一大堆代码,只是为了做到这一点。

Invoke-Command -ComputerName SomeRemoteComputerName -ScriptBlock { net user SomeNewUserName SomePassword net localgroup administrators SomeNewUserName / add }

Yeppers,我知道,并非所有纯粹的PoSH。当然,你可以通过PoSH中的更多代码(更多内容)来实现这一点,但有时你只需要完成任务。

但是从头开始这样做(好吧,除非你只是想学习东西)。有一整套预先构建的脚本和模块供您利用。参见:

'gallery.technet.microsoft.com/scriptcenter/site/search?f%5B0%5D.Type=RootCategory&f%5B0%5D.Value=localaccount'

当然,如果所有计算机都在PoSH v5 +上,那么您只需使用内置cmdlet进行本地用户/组管理。

'docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts/?view=powershell-5.1'

至于另一个问题: '检查服务帐户是否存在'

假设您在询问这是否适用于远程计算机,则采用相同的方法。

Invoke-Command -ComputerName SomeRemoteComputerName -ScriptBlock { Get-Service -Name SomeServiceName Get-Service -DisplayName SomeServiceDisplayName }