2

この関数は、Windows Server 2003 および 2008 R2 で実行する必要があります。コマンド ラインを使用して 1 行ずつ実行すると成功します。スクリプトによる実行は失敗します。

function addUser2Group([string]$user,[string]$group)
{    
    $cname = gc env:computername
    $objUser = [ADSI]("WinNT://$user")
    $objGroup = [ADSI]("WinNT://$cname/$group,group")  
    $members = $objGroup.PSBase.Invoke('Members')
    $found = $false

    foreach($m in $members)
    {
        if($m.GetType().InvokeMember('Name', 'GetProperty', $null, $m, $null) -eq $user)
        {
            $found = $true
        }
    }

    if(-not $found)
    {
        $objGroup.PSBase.Invoke('Add',$objUser.PSBase.Path)
    }

    $members = $objGroup.PSBase.Invoke('Members')
    $found = $false
    foreach($m in $members)
    {
        if($m.GetType().InvokeMember('Name', 'GetProperty', $null, $m, $null) -eq $user)
        {
            $found = $true
        }
    }

    return $found
}

addUser2Group('MyGlobalMonitoringUser',"SomeDBGroup")

ユーザーをローカル グループに追加する必要があります。しかし、それは私に次のエラーを与えるだけです:

Exception calling "Invoke" with "2" argument(s): "Unknown error (0x80005000)"
+     $members = @($objGroup.PSBase.Invoke <<<< ("Members"))
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException





編集: /add で発生するエラー メッセージは

The following exception occurred while retrieving member "Add": "Unknown error (0x80005000)"


コードは次のとおりです。

function addUser2Group([string]$user,[string]$group)
{
    $cname = gc env:computername
    try
    {
        ([adsi]"WinNT://$cname/$group,group").Add("WinNT://$cname/$user,user")
    }
    catch
    {
        write2log($_)
        return $false
    }

    return $true
}
4

5 に答える 5

14

PowerShell が自動的に実行してくれるのに、なぜ熟考の苦痛を経験するのでしょうか? 例:

$group = [ADSI]"WinNT://./Power Users,group"
$group.Add("WinNT://SYSTEM,user")

上記により、SYSTEM ローカル アカウントがローカルの Power Users グループに追加されます。上記の特定のエラーが発生する理由はわかりませんが、この省略された構文でもエラーが発生する可能性があります。使用されている特定の COM インターフェイスは IADsGroup です

注: 実際には .NET オブジェクトにラップされた COM オブジェクトを使用しているため、Dispose作成された ADSI オブジェクトの処理が完了したら、そのメソッドを呼び出すことをお勧めします。

于 2013-01-10T16:15:42.853 に答える
2

net localgroup /add見栄えの悪い WMI の代わりに、スクリプトでを使用しないのはなぜですか。PowerShell はシェルであり、オペレーティング システムではありません :)

于 2012-12-19T12:20:35.000 に答える
0

•0x80005000 (「指定されたディレクトリ サービスの属性または値は存在しません」)。

おそらくパラメーターバインディングまたは環境の犯人ですか?

net localgroup の問題については、エラー メッセージを注意深く調べてください。

メンバー「追加」の取得中に次の例外が発生しました

メンバー名として解釈されているため、/addフラグが適切に設定されていないことは明らかですが、コードが提供されていないため、その理由はわかりません。

于 2013-01-10T15:33:31.347 に答える