将当前用户添加到管理员组

时间:2012-06-13 20:10:46

标签: powershell powershell-v2.0

我正在编写一个脚本,用于检查用户是否是管理员,然后如果他们不是,它会在现场添加它们,注销,然后我可以重新登录进行测试。这是我遇到问题的部分:

$Cred = Get-Credential ("$env:COMPUTERNAME\Administrator")
$Group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/Administrators,Group")
$User = $env:USERNAME
$Domain = $env:USERDOMAIN
Invoke-Command -Computername localhost -Cred $Cred -ScriptBlock {$Group.add("WinNT://$Domain/$User,user")} 

每次我运行此操作时都会出现以下错误:

You cannot call a method on a null-valued expression.

我可以采取哪些措施来解决这个问题?

工作解决方案:

$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 :(得分:4)

Invoke-Command对$ Group变量一无所知,这就是为什么它不能那样工作的原因。您需要使用-ArgumentList参数将变量传递给scriptblock。

另外:我宁愿在这个scriptblock中定义像$ Group这样的东西:

$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

HTH

鲍尔泰克

PS:只有一个问题:为什么不用简单的方式,用:

net localgroup administrators domain\user /add