2

我正在尝试获取当前用户并将其添加到管理员组。到目前为止,我能够获取当前用户并将它们传递给管理员添加,但我不确定如何使用管理员凭据调用它以实际添加它们。

$user = [Environment]::Username
$group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/administrators,group")
$group.add("WinNT://$env:USERDOMAIN/$User,user")

任何帮助,将不胜感激。

4

3 回答 3

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
于 2012-06-18T13:03:19.833 回答
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 巴特克

于 2012-05-21T15:24:31.457 回答
0

这可能不适用于当前用户,但对于一般用户或组,您可以使用 Powershell Remoting (WinRM) 和Invoke-Command和 net.exe 程序将用户作为管理员添加到多台计算机:

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"

于 2014-01-10T17:07:10.417 回答