AD上のオブジェクトのプロパティを一括で変更する@ADSI
後から後からごちゃごちゃ追加していったらなんだか訳のわからないVBスクリプトになってしまいました。
たぶん動くと思いますがエラー処理をほぼやっていないので過信しないでください。
このスクリプトは
ADSIを使ってAD上のコンピュータのプロパティの管理者の値をテキストファイルから一括で入れる(削除する)スクリプト
です。
そもそもPCViewなんかを使ってコンピュータを管理していたことがあったんですが、そこから一括でActive Directory上に値を入れられないものかと思って作ってみたわけです。
とりあえずコンピュータオブジェクトの管理者タブに最後にログインしたユーザの名前を入れたくて作ったので
managedBy
以外の値には対応していないです。男らしいでしょ。
テキスト文書を適当に作ってタブ区切りで
PC名 ユーザ名
の一覧を作ればあとはVBSを実行するだけです。
管理者タブに値を入力する場合、ユーザのdistinguishedNameを入れないといけないのでそのへんがややこしくなっています。プログラマーの人ならサクッと作るんだろうなーなんて思いながらHey, Scripting Guy!を読みつつ書いていました。
もし使うのであれば“’”が全角になってしまっているのでそこだけ半角に置換して使ってください。
実行にはAD上のオブジェクトを変更できる権限が必要です。
ちなみにこのスクリプトを実行してAD上のオブジェクトがおかしくなったなんて言われても責任取れませんのでよろしくお願いします。
‘AD上のコンピュータのプロパティの管理者の値をテキストファイルから一括で入れる(削除する)スクリプト
‘追加する場合はWriteStatus、削除する場合はDeleteStatusを実行。
‘2008.05.10
‘cscript C:\Script\一発でADSIの値更新.vbsOption Explicit
Const ADS_SCOPE_SUBTREE = 2
‘テキストにあるかどうか検索
Dim objFS,objText
Dim strPCList
Dim strReadLine‘↓PCとユーザ一覧を記載するテキストのパス
‘(例)PC-001 pnpk
strPCList = “C:\Script\list.txt”Set objFS = WScript.CreateObject(”Scripting.FileSystemObject”)
Set objText = objFS.OpenTextFile(strPCList) ‘除外するリストのパスを入力‘↓テキストから文字列を読み込んでタブで区切って配列にする
Do Until objText.AtEndOfStream
strReadLine = UCase(objText.ReadLine)‘ Wscript.Echo strReadLine
Dim strValue
Dim strPCDN
Dim strUserDN
Dim strPropertyName
Dim strPropertyValue
Dim lngLoop
Dim QueryPCNAME2DN
Dim QueryUserNAME2DNstrValue = Split(strReadLine, ” “, -1, vbTextCompare)
‘コンピュータ名からDNを探し出すクエリ
QueryPCNAME2DN = “SELECT distinguishedName FROM ‘LDAP://dc=pnpk,dc=local’ WHERE objectCategory=’computer’ AND name = ‘” & strValue(0) & “‘”
‘ユーザ名(sAMAccountName)からDNを探し出すクエリ
QueryUserNAME2DN = “SELECT distinguishedName FROM ‘LDAP://dc=pnpk,dc=local’ WHERE objectCategory=’user’ AND sAMAccountName = ‘” & strValue(1) & “‘”‘ Wscript.Echo QueryPCNAME2DN
‘ Wscript.Echo QueryUserNAME2DNstrPCDN = QueryADSI(QueryPCNAME2DN)
strUserDN = QueryADSI(QueryUserNAME2DN)
strPropertyName = “managedBy”
‘↓書き込む場合
Call WriteStatus(strPCDN,strPropertyName,strUserDN)
‘↓削除する場合
‘ Call DeleteStatus(QueryADSI(QueryPCNAME2DN),”managedBy”)Loop
objText.Close
‘ADSIにクエリを投げてDN名を返す
‘QueryADSI(SQL文)
‘戻り値 DN名
Function QueryADSI(SQL)
Dim objConnection,objCommand,objRecordSetSet objConnection = CreateObject(”ADODB.Connection”)
Set objCommand = CreateObject(”ADODB.Command”)
objConnection.Provider = “ADsDSOObject”
objConnection.Open “Active Directory Provider”
Set objCommand.ActiveConnection = objConnectionobjCommand.Properties(”Page Size”) = 1000
objCommand.Properties(”Searchscope”) = ADS_SCOPE_SUBTREEobjCommand.CommandText = SQL
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOFQueryADSI = ShowStatus(objRecordSet.Fields(”distinguishedName”).Value)
objRecordSet.MoveNext
LoopSet objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
End Function‘DNからその他の情報を取得
Function ShowStatus(DN)
Dim objDNSet objDN = GetObject(”LDAP://” & DN )
ShowStatus = objDN.distinguishedName
Set objDN = Nothing
End Function‘コンピュータオブジェクトに管理者を追加
‘WriteStatus(コンピュータDN名,対象のプロパティ名,対象の値)
‘(例)
‘WriteStatus(”CN=PC003,OU=コンピュータ,”managedBy”,DC=pnpk,DC=local”,”CN=pnpk,OU=ユーザ,DC=pnpk,DC=local”)
Sub WriteStatus(strPCDN,strProperty,strValue)
Dim objADSysInfo,objUser
Dim strUser,strGivenNameSet objUser = GetObject(”LDAP://” & strPCDN)
‘ Wscript.Echo strPCDN
‘ Wscript.Echo strProperty
‘ Wscript.Echo strValueobjUser.Put strProperty,strValue
objUser.SetInfo
objUser.GetInfoWscript.Echo strProperty & “に” & objUser.Get(strProperty) & “が書き込まれました。”
Set objADSysInfo = Nothing
Set objUser = Nothing
End Sub‘項目を削除する場合
‘DeleteStatus(コンピュータDN名,削除対象のプロパティ名)
‘(例)
‘DeleteStatus(”CN=PC003,OU=コンピュータ,DC=pnpk,DC=local”,”managedBy”)
Sub DeleteStatus(strPCDN,strProperty)
‘On Error Resume Next
Const ADS_PROPERTY_CLEAR = 1‘ Wscript.Echo strPCDN
‘ Wscript.Echo strPropertyDim objPC
Dim strPropSet objPC = GetObject(”LDAP://” & strPCDN)
objPC.PutEx ADS_PROPERTY_CLEAR,strProperty, 0
objPC.SetInfoWscript.Echo strProperty & “の値削除は成功しました”
Set objPC = Nothing
End Sub
Popularity: 3%
トラックバック URI : http://pnpk.net/cms/archives/415/trackback/
【関連記事】
CGI・PHPスクリプト検索・登録…
フリー、シェアCGI・PHPスクリプトをキーワード、96のカテゴリーから検索できます。ダウンロードランキングの実施による人気度の評価もあり! シェアスクリプトでも、登録 (more…)
トラックバック by scriptEYE — 2008/5/18 日曜日 @ 12:44:53