我正在尝试使用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)"
}
我做错了什么?
答案 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 }