2012-06-13 3 views
2

Я работаю над скриптом, который будет проверять, является ли пользователь администратором, а затем, если он не будет, он добавит их на месте, выйдет из системы, а затем я смогу войти в систему тестировать. Это та часть, я бегу в проблемы:Добавление текущего пользователя в группу администраторов

$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")} 

Everytime я запускаю это я получаю следующее сообщение об ошибке:

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 

ответ

4

Invoke-Command ничего не будет знать о переменной $ Group, это причина, почему он не работает так. Вам необходимо передать переменные в scriptblock с использованием параметра -ArgumentList.

Кроме того: я предпочел бы определить такие вещи, как $ Group в этом ScriptBlock:

$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

Bartek

PS: только один вопрос: почему бы не делать это простой способ, с:

net localgroup administrators domain\user /add 
Смежные вопросы