我正在尝试获取当前用户并将其添加到管理员组。到目前为止,我能够获取当前用户并将其传递给Admin添加,但我不确定如何使用管理员凭据调用它以实际添加它们。
$user = [Environment]::Username
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/$User,user")
任何帮助都将不胜感激。
答案 0 :(得分:3)
以下是工作解决方案:
$Cred = Get-Credential ("$env:COMPUTERNAME\Administrator")
$User = $env:USERNAME
$Domain = $env:USERDOMAIN
Invoke-Command -Computername localhost -Cred $Cred -ScriptBlock {
param ($User, $Domain, $ComputerName)
$Group = [ADSI]("WinNT://$ComputerName/Administrators,Group")
$Group.add("WinNT://$Domain/$User,user")
} -ArgumentList $User, $Domain, $ENV:COMPUTERNAME
答案 1 :(得分:0)
我不确定这是否是最好的方法,因为将ADSI用于备用信用卡 - 您需要以纯文本形式发送它们:
$Local = New-Object -TypeName ADSI -ArgumentList @(
"WinNT://$env:COMPUTERNAME/Administrators,group",
$AdminUser,
$AdminPass
)
$Local.Add("WinNT://$env:USERDOMAIN/$env:USERNAME")
用户名通常采用domain \ user(或$ env:ComputerName \ User)的形式。
以其他方式做到这样不是更好吗?从用户帐户检查谁登录并添加此帐户?有几种方法可以实现(包括检查explorer.exe进程的所有者等技巧)。
HTH 鲍尔泰克
答案 2 :(得分:0)
这可能对当前用户不起作用,但对于通用用户或组,您可以使用Powershell Remoting(WinRM)和Invoke-Command以及net.exe程序将用户作为管理员添加到多台计算机:< / p>
icm -ScriptBlock {& "$env:SystemRoot\system32\net.exe" localgroup Administrators /add AccountName} -ComputerName server1,server2,server3
其中 AccountName 是AD用户或组, Server1,Server2,Server3 是您要在其上运行脚本块的计算机列表。这对当前用户不起作用,因为您必须是管理员才能使用WinRM,但是当您需要将另一个用户或组作为管理员添加到服务器时,它会有所帮助。
如果您未启用WinRM,则可以使用PSEXEC远程启用它
psexec -s \ Server1 cmd / c“winrm quickconfig -quiet”