2012-02-08 19 views
1

私は、Active Directoryに大きく依存しているVB.NETのソリューションのアップグレードに取り組んでいます。今のところ、私はユーザーの作成時に新しいADユーザーにPC制限を追加しようとしています。基本的には、1つ以上のPCを含むようにLogon To属性を更新する必要がありますが、これをどうやって行うのですか?VB.NETのAD属性にユーザー "ログオン"を設定する方法

IADsUserプロパティ「LoginWorkstations」(http://msdn.microsoft.com/en-us/library/Aa746340のおかげ)に興味があることを知りました。今のところ、どのADユーザーからもこの属性を取得できるコードがありますが、設定できません。

ここで私は、属性を取得する必要があるコードです:

Dim userADObject As new DirectoryEntry(ADPath) 
Dim logonToPC as String = userADObject.InvokeGet("LoginWorkstations")(0).ToString 

(1が存在する場合)最初に制限されたPCをフェッチし、logonToPCでそれを保存し、「PC10000」のようになりますでしょう

は、ただ

Dim userADObject As new DirectoryEntry(ADPath) 
Dim args() As Object = {"PC100001"} 
userADObject.InvokeSet("LoginWorkstations", args) 

しかし、それは動作しません...それは:

素晴らしい作品なので、直感的に、私はこのような何かがうまくいくと仮定しますむしろ役に立たない例外をスローします。

私はこのアプローチを別の属性でテストしようとしましたが、うまく動作します。残念なことにGoogleにはそれほど多くはありません...

ご協力いただければ幸いです。

答えて

0

解決策が見つかりました。私はmarc_sのコードを取り、正しく動作するように少し修正しました。ここで私が持っているものだ。私はその私はあなたが追加された文字列内のスペースを持つことはできませんどのようないくつかのかなり良い悲しみを与えた

Dim userADObject As New DirectoryEntry(Me.ADPath) 
'Grab the previous restriction, because we may have to clear it first in the future 
Dim priorRestriction As String = userADObject.Properties("userWorkstations").Value 

If priorRestriction = "" Then 
    'Simply add 
    userADObject.Properties("userWorkstations").Add("PC001,PC002") 
Else 
    'Important - We have to clear the old restriction before adding the new 
    userADObject.Properties("userWorkstations").Remove(priorRestriction) 
    'Now add the new restriction 
    userADObject.Properties("userWorkstations").Add(priorRestriction & ",PC003") 
End If 
'Commit! 
userADObject.CommitChanges() 

何か。例:.Add("PC001, PC002").Add("PC001,PC002")

0

これはかなり簡単に行うことができます。userWorkstations LDAP属性(see note here)を使用する必要があります。これは複数値です(例:複数の入力が可能です。

Dim userADObject As new DirectoryEntry(ADPath) 

userADObject.Properties("userWorkstations").Add("PC001") 
userADObject.Properties("userWorkstations").Add("PC002") 
userADObject.Properties("userWorkstations").Add("PC003") 

userADObject.CommitChanges() 

Active Directoryを更新するために必要なアクセス許可がある場合は、基本的にそれを実行する必要があります。

+0

である必要があります。私は正常に最初のPCを追加することができます(ユーザーにはまだ制限がありません)が、2番目または3番目のPCを追加してコミットしようとすると、「指定されたディレクトリサービスの属性または値は既に存在します。私は明らかにADで、ユーザーが実際にこれらのPC割り当てを持っていないことを確認しました。何か案は? – Boeckm

+0

marc_sを見つけました。私の答えをチェックしてください。正しい方向に私を指してくれてありがとう! – Boeckm

関連する問題