Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 将当前用户添加到管理员组_Powershell_Powershell 2.0 - Fatal编程技术网

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

Powershell 将当前用户添加到管理员组,powershell,powershell-2.0,Powershell,Powershell 2.0,我正在编写一个脚本,该脚本将检查用户是否是管理员,如果不是,它将当场添加他们,注销,然后我可以重新登录进行测试。这就是我遇到的问题: $Cred = Get-Credential ("$env:COMPUTERNAME\Administrator") $Group = [ADSI]("WinNT://"+$env:COMPUTERNAME+"/Administrators,Group") $User = $env:USERNAME $Domain = $env:USERDOMAIN Invoke

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

$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

Invoke命令对$Group变量一无所知,这就是为什么它不能这样工作的原因。您需要使用-ArgumentList参数将变量传递给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

巴特克

PS:只有一个问题:为什么不用简单的方法来做呢

net localgroup administrators domain\user /add

Invoke命令对$Group变量一无所知,这就是为什么它不能这样工作的原因。您需要使用-ArgumentList参数将变量传递给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

巴特克

PS:只有一个问题:为什么不用简单的方法来做呢

net localgroup administrators domain\user /add