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

これを実行するたびに、次のエラーが発生します。

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

1 に答える 1

4

Invoke-Command は $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

HTH

バルテック

PS: 1 つだけ質問があります。

net localgroup administrators domain\user /add
于 2012-06-13T21:32:55.857 に答える