Active Directory

「Active Directory」の編集履歴(バックアップ)一覧に戻る

Active Directory - (2009/02/04 (水) 10:53:58) のソース

PageLastUpdate:&date()/total:&counter()/today:&counter(today)/yesterday:&counter(yesterday)
#openclose(show=クリックすると見出し一覧を表示します){
#contents()
}
*&aname(Domain Computersのローカル管理者パスワードを任意の値に変更する){Domain Computersのローカル管理者パスワードを任意の値に変更する}
2009/02/04

スタートアップ スクリプトとタスク スケジューラーを併用することで実現しています。

ここに辿り着くまでの経緯
-Administratorは使用不可にしてもセーフモードで起動すると使えてしまう。対策はパスワードを困難なものにするしかない。できれば定期的に変更する。
-Windowsの基本機能のみで実装する。
-100台以上のDomain Computersすべてをループしてチェックすると、電源の入っていないPCなどの応答待ちでスクリプトの実行時間が長すぎる。
-スタートアップ スクリプトを使用して、起動したコンピュータのみチェックすることで負荷を軽減する。
-コンピューターから見えないスクリプトは実行できないが、スクリプトにパスワードを書くと閲覧される危険性がある。
-パスワードを変更するたびにexeを差し替えたりするのは望ましくない。exeから逆コンパイルされる可能性も高い。
-タスク スケジューラーであれば、コンピューターから見えないスクリプトを実行可能。
-タスク スケジューラーはウィザードでは1日単位しか設定できないが、設定した後にプロパティで「9:00から17:00まで1時間ごとに繰り返し実行」のような指定ができる(不親切。最初にタスク登録しようとしたときは「1日単位しかできないのかよ!」と思って諦めていた。)

**1.Domain Computersのみ閲覧可能な共有フォルダを作成
 \\MyServer\LocalAdminCheck

**2.スタートップスクリプトで起動時にローカル管理者パスワードの変更チェック用ファイルを生成
#highlight(vb){Set net = CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")

donePath = "\\MyServer\LocalAdminCheck\Done\" & net.ComputerName & ".txt"
undonePath = "\\MyServer\LocalAdminCheck\Undone\" & net.ComputerName & ".txt"

IF fso.FileExists(donePath) = False Then
    set fp = fso.CreateTextFile(undonePath,True) 
    fp.Close
End If
}

**3.タスクスケジューラーが1時間に1回LocalAdminChange.vbsを実行
このスクリプトは共有されていないフォルダに置きます。
#highlight(vb){Set fso = CreateObject("Scripting.FileSystemObject")

doneFolder = "\\MyServer\LocalAdminCheck\Done"
undoneFolder = "\\MyServer\LocalAdminCheck\Undone"

For Each file In fso.GetFolder(undoneFolder).Files
    targetName = fso.GetBaseName(file.Path)
    donePath = doneFolder & "\" & targetName & ".txt"
    undonePath = undoneFolder & "\" & targetName & ".txt"

    On Error Resume Next
    Set objUser = GetObject("WinNT://" & targetName & "/Administrator, user")
    Select Case Err
        Case 0
            objUser.SetPassword "ここにパスワードを記述"
            objUser.SetInfo
            set fp = fso.CreateTextFile(donePath,True)
            'パスワードが設定できたら、このスクリプトの更新日をDoneフォルダのコンピュータ名.txtに出力
            fp.Writeline fso.GetFile(Wscript.ScriptFullName).DateLastModified
            fp.Close

            'Undoneフォルダから削除
            file.Delete
        Case Else
            '設定できなかったら、エラーコードをUndoneフォルダのコンピュータ名.txtに出力
            set fp = fso.CreateTextFile(undonePath,True)
            fp.writeline Err
            fp.Close
    End Select
Next}

**備考
まあここまでできれば、パスワードを定期的に変更しつつそれをログに記録していくとかどうにでも組めますね。
1台づつパスワード変えたければ日時とコンピュータ名でハッシュ化しちゃうとかいろいろ。
懸念として意図しないコンピュータ名をフォルダに送り込まれる可能性がありますが、ローカル管理者のパスワードを推測不能なものに変更されてもそれほどダメージはないのでよしとしておきます。

*&aname(Acrobat Reader 8が「内部エラー 2753。Updater.api_NON_OPT」でアンインストールできない){Acrobat Reader 8が「内部エラー 2753。Updater.api_NON_OPT」でアンインストールできない}
2009/01/09 検索後:アップデート
http://www.adobeforums.com/webx/.3c05d1a2
グループポリシーでAcrobat Reader 9を配布したら、なぜかこける。
ログを確認したらでAcrobat Reader 8のアンインストールでこけている。
手作業でアンインストールしてみると「内部エラー 2753。Updater.api_NON_OPT」。
エラーメッセージで検索すると、パッチが当たっているとアンインストールできないらしい。馬鹿だ。
Adobeのサイトにはめんどくさい方法が書いてあったけど、下記レジストリを削っちゃえばOK。
#highlight(){
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Features\68AB67CA7DA71401B7448A0100000030
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\68AB67CA7DA71401B7448A0100000030
}
*&aname(Excelファイルの個人情報を削除してもプリンタのパスが残る){Excelファイルの個人情報を削除してもプリンタのパスが残る}
2008/06/17
Excel 2002を元に記述していますので、2003は同じだと
とりあえず下記を参考にすると、ファイルのプロパティ情報を消して、下記設定をすればいいように読めます。
http://office.microsoft.com/ja-jp/excel/HP010503321041.aspx
>[ツール]→[オプション]→[セキュリティ] タブ→[保存時にファイルのプロパティから個人情報を削除する] チェック ボックスをオンに。
ところがこれだけだと不完全で、メモ帳で開いてみるとわかりますが、プリンタのパスが残っています。
ドメイン環境で使っていると、どこの会社から出たものかモロバレですねw
会社名が残るとまずい場合は、ローカルプリンタで印刷してから上書き保存しましょう。

*&aname(Bullzip PDF Printerのサイレントインストール){Bullzip PDF Printerのサイレントインストール}
2008/05/30
フリーのPDF生成プリンタドライバ。商用利用も無料。
-ダウンロード → http://www.bullzip.com/products/pdf/info.php#download
-ドキュメント → http://www.biopdf.com/guide/
セットアップファイルはexeのみ。msiは提供されていないので、サイレントインストールをするには少し準備が必要。
1.[[http://www.bullzip.com/products/pdf/info.php#download>http://www.bullzip.com/products/pdf/info.php#download]]から本t内をダウンロード。解凍して、適切な配布用フォルダに置く。
2.[[http://www.bullzip.com/download/gsl/gslite.exe>http://www.bullzip.com/download/gsl/gslite.exe]]からgslite.exeをダウンロード。本体と同じ配布用フォルダに置く。
3.何らかの方法で
#highlight(dos){BullzipPDFPrinter_5_0_0_609.exe /VERYSILENT /NORESTART}
をクライアントに実行させます。管理者権限が必要なのでスタートアップスクリプトがよいと思いますが、実行するたびにプリンタが増えていくので注意。
**関連記事
http://gigazine.net/index.php?/news/comments/20080116_bullzip_pdf_printer/
**2008/12/17追記
今日気づいたけど最新版は商用利用は10ユーザーに制限されているっぽい。
過去のバージョンまで遡及適用かどうかこれから調査。
*&aname(VBScriptでフォルダのアクセス権におけるユーザーの継承元を調べる){VBScriptでフォルダのアクセス権におけるユーザーの継承元を調べる}
2008/05/26
http://q.hatena.ne.jp/1210910352
*&aname(「Word/Excel/PowerPoint 2007 ファイル形式用 Microsoft Office 互換機能パック」をWSUSで配布する){「Word/Excel/PowerPoint 2007 ファイル形式用 Microsoft Office 互換機能パック」をWSUSで配布する}
2008/05/16
互換機能パックは下記からダウンロードできますが、配布形態はexeのみでmsiがありません。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466
コマンドラインで次のように入力しmsiファイルと関連データを取り出します。
#highlight(dos){FileFormatConverters.exe /extract:c:\temp\}
→[マイクロソフト ソフトウェア ライセンス条項に同意するにはここをクリックしてください]にチェックを入れて[次へ]→「ファイルが正常に解凍されました。」
/extract:で指定したパスにmsiファイルと関連ファイルが解凍されるので、配布用のフォルダにすべてコピーします。
あとは普通にグループポリシーで配布設定をすればOKです。

ちなみにサービスパックが出ているので、WSUSでサービスパックの配布をするのも忘れないようにしましょう。

*&aname(コンピュータ名の一覧を元にローカルAdministratorのパスワードを変更するスクリプト){コンピュータ名の一覧を元にローカルAdministratorのパスワードを変更するスクリプト}
2008/05/14
はてなの質問に回答。
すべての端末の電源が入っているとは限らないので、ログを取れるようにした。
失敗しているものだけ再度リストにして流す必要あり。
パスワードを直接記述している以上、このスクリプトを見られることは深刻な脆弱性に繋がるので注意。
#highlight(vb){
'【書換必須】コンピュータを列挙したファイルパス。コンピュータごとに改行。
strListPath = "C:\Documents and Settings\Administrator\デスクトップ\List.txt"
'【書換必須】結果を出力するログファイルパス。
stLogPath = "C:\Documents and Settings\Administrator\デスクトップ\Log.txt"
'【書換必須】指定したい管理者パスワード
strPWD  = "czBnkbe+47i"

Set fso = CreateObject( "Scripting.FileSystemObject" )
Set ts = fso.OpenTextFile( strListPath, 1 )
    lines = Split( ts.ReadAll, vbCrLf )
    ts.Close

set tsLog = fso.CreateTextFile(strLogPath,True)

On Error Resume Next
For i = 0 to Ubound(lines) - 1
    strComputer = lines(i)
    Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
    objUser.SetPassword strPWD
    objUser.SetInfo

    tsLog.WriteLine(strComputer & "," & Err.Number & ":" & Err.Description)
    Err.Clear
Next

tsLog.Close

Msgbox "Finish!"}


*&aname(ローカル管理者としてドメインユーザーを追加/削除する){ローカル管理者としてドメインユーザーを追加/削除する}
2008/04/18
遠隔地のPCにリモートで繋がらない。プリンタドライバをインストールしたいだけなんだけど。
とりあえず緊急回避としてユーザーに自分でインストールしてもらうことに。
Domain Admin権限を与えるのはイヤだったので、スクリプトで一時的にローカル管理者にすることに。
最初LDAPでユーザーオブジェクト取得して突っ込もうとするとコケる。下の関数がその名残ですw
調べてみたら、WinNTプロバイダを使わなくちゃいけないんですってさ。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/oct04/hey1008.mspx
#highlight(vb){
strComputer = "hoge"
strUser = "moge"

Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")
Set objUser  = GetObject("WinNT://example.co.jp/" & strUser)
objGroup.Add(objUser.AdsPath)
'objGroup.Remove(objUser.AdsPath)

MsgBox "終了しました"
}
*&aname(LDAPとログインIDを指定してユーザーオブジェクトを取得する関数){LDAPとログインIDを指定してユーザーオブジェクトを取得する関数}
2008/04/18
**呼び出し方
#highlight(vb){
strLDAP = "LDAP://DC=example,DC=co,DC=jp"
strName = "username"
Set objUser = GetUserObject(strLDAP,strName)
MsgBox objUser.Name}
**関数本体
#highlight(vb){
Function GetUserObject (strLDAP,strName)

    Const ADS_SCOPE_SUBTREE = 2
 
    Set objConnection = CreateObject("ADODB.Connection")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open "Active Directory Provider"
 
    Set objCommand = CreateObject("ADODB.Command")
    Set objCommand.ActiveConnection = objConnection
        objCommand.Properties("Page Size") = 1000
        objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
        'samAccountNameは一意のはず(たぶん。調査した範囲では間違いなく。)
        objCommand.CommandText = "SELECT distinguishedName FROM '" & strLDAP _
                               & "' WHERE objectCategory='user' AND samAccountName='" & strName & "'"

    Set objRecordSet = objCommand.Execute

    IF objRecordSet.RecordCount = 1 Then
        objRecordSet.MoveFirst
        strDN = objRecordSet.Fields("distinguishedName").Value
        Set objUser = GetObject("LDAP://" & strDN)
        Set GetUserObject = objUser
    Else
        Set GetUserObject = Nothing
    End If

End Function}
*&aname(ファイルサーバーリソースマネージャ用にSMTPサーバーを立てる){ファイルサーバーリソースマネージャ用にSMTPサーバーを立てる}
2008/04/17
ファイルサーバーリソースマネージャでメール通知を出させようと思ったら、smtpサーバーの設定がほんとにアドレスしか設定できない。
匿名アクセスのみって、大丈夫なのかよと思いつつ、やむなくsmtpサービスを有効にすることに。
なにかしらドメイン内だけに限定するような設定あるだろ、たぶん。
ということで↓
[[Windows Server 2003 の IIS SMTP 仮想サーバーでメールの中継を防ぐ方法>http://support.microsoft.com/kb/324281/ja]]

1.[プログラムの追加と削除]→[Windows コンポーネントの追加と削除]→[アプリケーション サーバー]→[詳細]→[インターネット インフォメーション サービス(IIS)]→[詳細]→[SMTPService]をチェック。
結構深い。CDは要求されたけど再起動は不要(これ結構重要)。
2.IISマネージャに[既定の SMTP 仮想サーバー]が追加されるので
[既定の SMTP 仮想サーバー]を右クリック→[プロパティ]→[アクセス]タブで以下の2点を設定
-[接続]→[以下のリストに含まれるコンピュータのみ]をチェックして、127.0.0.1とサーバーのアドレスを追加
-[中継]→[以下のリストに含まれるコンピュータのみ]をチェックして、127.0.0.1とサーバーのアドレスを追加

この記事も参考になった↓
[[実例で学ぶSBS 2003ネットワーク構築と運用 第2回 SBS 2003のメール設定 4.メールのオープン・リレー対策(2)>http://www.atmarkit.co.jp/fwin2k/operation/sbs200302/sbs200302_04.html]]

*&aname(WSHで配列の比較にScripting.Dictionaryを使って高速化){WSHで配列の比較にScripting.Dictionaryを使って高速化}
2008/04/05 検索後:リニアサーチ、Linear Search、ハッシュテーブル
Active Directoryつか、WSHだけど、WSHをADの管理にしか使ってないからとりあえずココで。
二つの配列の内容を比較するのに馬鹿ループ(リニアサーチ)とDictionaryでどのくらい速度が違うのかを計測。
|データ数|1000×1000|65536×65536|h
|Dictionaly|0.98秒|1.97秒|
|リニアサーチ|113.16秒|終わらないから強制終了w|
**サンプルソース
#highlight(vb){
Set fso = CreateObject( "Scripting.FileSystemObject" )

'lines1にテキストファイルからリスト1を読み込み
Set ts = fso.OpenTextFile( "List1.txt", 1 )
lines1 = Split( ts.ReadAll, vbCrLf )
ts.Close

'lines2にテキストファイルからリスト2を読み込み
Set ts = fso.OpenTextFile( "List2.txt", 1 )
lines2 = Split( ts.ReadAll, vbCrLf )
ts.Close

'■Dictonaryを使用した存在確認
start1 = timer 
Set dic = CreateObject( "Scripting.Dictionary" )
For i = 0 to Ubound(lines) - 1
    dic.Add lines(i) , 0
Next
For i = 0 to Ubound(lines2) - 1
    If dic.Exists(lines2(i)) = True Then
    End If
Next
elapsed 1= timer1 - start
'■リニアサーチを使用した存在確認
start2 = timer
For i = 0 to Ubound(lines) - 1
    For j = 0 to Ubound(lines2) - 1
        IF lines(i)=lines2(j) Then Exit For
    Next
Next
elapsed2 = timer - start2

'■結果表示
MsgBox "Dictionaly:" & elapsed1 & vbcrlf & "リニアサーチ:" & elapsed2}

*&aname(テキストファイルからユーザーの一覧を読み込んで「ユーザーは次回ログオン時にパスワード変更が必要」に設定){テキストファイルからユーザーの一覧を読み込んで「ユーザーは次回ログオン時にパスワード変更が必要」に設定}
2008/04/05 検索語:スクリプト、WSH
とりあえず組んだ。エラー処理とかしてないけど。
#highlight(vb){
strPath = "C:\Documents and Settings\Administrator\デスクトップ\Users.txt"
strLDAP = "LDAP://dc=example,dc=co,dc=jp"

Const ADS_SCOPE_SUBTREE = 2

Set fso = CreateObject( "Scripting.FileSystemObject" )
Set ts = fso.OpenTextFile( strPath, 1 )
    lines = Split( ts.ReadAll, vbCrLf )
    ts.Close

Set dicUsers = CreateObject( "Scripting.Dictionary" )
For i = 0 to Ubound(lines) - 1
    dicUsers.Add lines(i) , 0
Next

Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

Set objCommand =   CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
    objCommand.CommandText = "SELECT distinguishedName,CN FROM '" & strLDAP & "' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    strDN = objRecordSet.Fields("distinguishedName").Value
    IF dicUsers.Exists(objRecordSet.Fields("CN").Value) Then
        Set objUser = GetObject("LDAP://" & strDN)
        objUser.pwdLastSet = 0
        objUser.SetInfo
    End If
    objRecordSet.MoveNext
Loop}

**参考アドレス
[[Hey, Scripting Guy! ある OU のすべてのユーザーが次にログオンしたときにパスワードの変更を要求する方法はありますか>http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/may07/hey0516.mspx]]
[[テキストファイル一括入力と連想配列>http://winofsql.jp/VA003334/vbsguide060812052548.htm]]

*&aname(グループポリシーオブジェクトエディタで設定した項目がレポートで正しい名称で表示されない){グループポリシーオブジェクトエディタで設定した項目がレポートで正しい名称で表示されない}
2008/04/02
グループポリシー管理コンソールのレポートで、[管理用テンプレート]-[レジストリの追加設定]という項目が表示され
#blockquote(){いくつかの設定の表示名が見つかりません。グループ ポリシーの管理が使用している .ADM ファイルを更新すると、この問題を解決できる場合があります。
Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ListBox_Support_ZoneMapKey 1 
Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMapKey\...}
と表示されている。
調べてみると
[コンピュータの構成]-[管理用テンプレート]-[Windows コンポーネント]-[Internet Explorer]-[インターネットコントロールパネル]-[セキュリティページ]
内の項目
[サイトとゾーンの割り当て一覧]
に設定した内容だった。
*&aname(コンピュータのSIDの取得){コンピュータのSIDの取得}
2008/01/29
以前から調査していたコンピュータのSIDの取得方法がやっとわかった。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=34260&forum=6&start=0

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Aliases\Members\
HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\Aliases\Members\ 
管理者アカウントでも見ることはできなくて、システムアカウントでアクセスする必要がある。
問題はこの後で、これを読み出すのはいいとして、ファイルとして保存したとすると、漏洩したときにどのぐらいセキュリティにダメージがあるのかがわからない。暗号化フォルダなどはこれで解析できそうだけど。
普通のユーザーのSIDはレジストリエディタで丸見えだけど。どうなのかな。
2008/01/30 追記:とりあえず暗号化フォルダの復号もできないし、SIDは公開されるのが前提のようなのでちょっと安心。

*&aname(SIDについての詳細な記事があったのでメモ){SIDについての詳細な記事があったのでメモ}
2008/01/29 検索語:セキュリティID
http://codezine.jp/a/article/aid/434.aspx
*&aname(Windows 2000 と Windows XP のコンピュータ アカウントのリセット){Windows 2000 と Windows XP のコンピュータ アカウントのリセット}
2008/01/29
ときどきPCがドメインから追い出されることがあるのはたぶんこのせいか。
resetは知らなかったのでとりあえずメモ。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B216393

*&aname(ローカル管理者のパスワードを一括で更新するスクリプト){ローカル管理者のパスワードを一括で更新するスクリプト}
ドメインに所属するクライアントのローカル管理者のパスワードを一括で更新します。
ドメインの管理者権限を持つユーザーでログインして実行します。
実際にはクライアントが起動していないと変更されませんので、スタートアップスクリプトを併用することも考えたほうがよいかも。
でもパスワード文字列を読み取れるファイルに記録してしまうとまずいので悩んでいるところです。
データベースを使って変更の成否を記録しながら一定間隔で個別に流すかなぁ。
なにかいい方法を知っている人がいれば教えてください。

#highlight(VB){
strLogPath="Log.txt"
strPWD="ExamplePassword"

Const ADS_SCOPE_SUBTREE = 2

'ADODBコネクションの作成
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
'ADODBコマンドでドメインに所属するコンピュータを問い合わせ
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "SELECT Name,OperatingSystem FROM 'LDAP://DC=example,DC=co,DC=jp' WHERE objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute

'各クライアントの成否を記録するログファイルを生成
set fso = CreateObject("Scripting.FileSystemObject")
set fp = fso.CreateTextFile(strLogPath,True)

On Error Resume Next
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value
    'サーバーの管理者パスワードを変えてしまわないようにOSで限定しています。
    'これはまあOU使ってもいいですし、絞り方はいろいろ。
    If objRecordSet.Fields("OperatingSystem").Value="Windows XP Professional" Then
        Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
        objUser.SetPassword strPWD
        objUser.SetInfo
        fp.WriteLine(strComputer & "," & Err.Number & ":" & Err.Description)
    End If

    objRecordSet.MoveNext
Loop

fp.Close
Msgbox "Ok"}
*&aname(SQLServer200のサイレントインストール){SQLServer200のサイレントインストール}
http://support.microsoft.com/kb/257716/ja
http://hehao1.seesaa.net/article/5454554.html
*&aname(setup.exeでサイレントインストール){setup.exeでサイレントインストール}
2007/11/08 検索語:インストールシールド Install Shield 応答ファイル
http://www33.ocn.ne.jp/~loreley/FSB/installs01.html
#blockquote(){Setup.exe -a -r -f1c:\testSet.iss}
で応答ファイルを作成して
#blockquote(){Setup.exe -s -f1c:\testSet.iss}
でサイレンとインストール、という感じ。
関連URL:http://www.microsoft.com/japan/technet/desktopdeployment/bdd/2007/AppMgmt_6.mspx
*&aname(Windows Server 2003 R2 でファイル サーバー リソース マネージャを有効にする){Windows Server 2003 R2 でファイル サーバー リソース マネージャを有効にする}
2007/10/26
ファイルサーバーでクォータを使おうと思ったら、2003R2からあるはずのFSRMが見当たらず。
ああでもないこうでもないといじりまわしても見つけられず、検索をかけたら下記サイトが
http://www.microsoft.com/japan/technet/itsolutions/msit/valuecard/msfsrmvc.mspx
#blockquote(){

ファイル サーバー リソース マネージャを有効にします。
}
って・・・俺はどうやって有効にするか知りたいんだよ!

結局TeckNetで
「ファイル サーバー リソース マネージャのコンポーネントを使用する」
http://www.microsoft.com/japan/technet/windowsserver/2008/library/0cd724af-b8c7-4fe8-bcd7-0889f35b5ec8.mspx
を見つけました。

ああ、[プログラム の追加と削除] の [管理ツール]ね。
そういえばグレーになってたけど中を開けて見なかった私が悪いのです。
*&aname(アプリケーションログに5分おきにイベント1030と1058が記録される。){アプリケーションログに5分おきにイベント1030と1058が記録される。}
2007/10/22
#blockquote(){イベントID 1030:グループ ポリシー オブジェクトの一覧を照会できません。このエラーの理由を説明するようなメッセージをポリシー エンジンが記録していないかどうか、イベント ログを確認してください。

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。}
#blockquote(){{イベントID 1058:GPO cn={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX},cn=policies,cn=system,DC=example.co.jp,DC=example,DC=co,DC=jp 用のファイル gpt.ini にアクセスできません。ファイルは場所 <\\example01.co.jp\sysvol\example01.co.jp\Policies\[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\gpt.ini> に存在する必要があります (アクセスが拒否されました。 )。グループ ポリシーの処理は中止されました。
詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。}}

いつのころからかこのエラーが5分置きに記録されていてうっとおしかったんで、調べたらKBにありました。
http://support.microsoft.com/kb/842804/ja
「グループ ポリシーの処理が機能せず、ドメイン コントローラのアプリケーション ログにイベント 1030 および 1058 が記録される」
ただ、最初読んだときは「最新のService Packで解決する。」と書いてあったので、「ウチは最新だからちがうのかなぁ」とスルーしてしまった。
かなり時間を使ってしまってから舞い戻り、精読したら、「注:Service Pack のインストール後でも、「レジストリ情報」に記載されている手順を実行する必要があります。」と書かれていたorz。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\WaitForNetwork]にDWORD値で1を設定し、再起動したら解決。
レジストリファイルが必要な方はどうぞ→[[http://www31.atwiki.jp/memo77/?cmd=upload&act=open&page=Active+Directory&file=WaitForNetwork.zip]]

*&aname(dsadd userを使ってActive Directoryにユーザーを追加する){dsaddを使ってActive Directoryにユーザーを追加する}
2007/10/22 自分用のサンプル構文

#blockquote(){dsadd user "CN=山田 太郎,OU=部門1,OU=Domain Users,DC=example01,DC=example,DC=or,DC=jp" -ln 山田 -fn 太郎 -display 山田 太郎 -upn taro-yamada@example.co.jp -pwd Example01 -mustchpwd yes -memberof "CN=総務部,OU=Security Groups,DC=example01,DC=example,DC=co,DC=jp" "CN=総務部長,OU=Security Groups,DC=example01,DC=example,DC=co,DC=jp" "CN=防火責任者,OU=Security Groups,DC=example01,DC=example,DC=co,DC=jp" "CN=プロジェクトチーム1,OU=Security Groups,DC=example01,DC=example,DC=co,DC=jp" -disabled no}

*&aname(グループポリシーオブジェクトエディタでびっくり){グループポリシーオブジェクトエディタでびっくり}
2007/08/28
ソフトウェアインストールのところにmsiファイルをドラッグ&ドロップできるのね。知らなかった。
*&aname(レジストリの配布をグループポリシーでやるべきか){レジストリの配布をグループポリシーでやるべきか}
2007/08/23
スクリプト中でregedit /S "filepath" の方がシンプルで見通しがよく、即効性があるが・・・
|手法|対象|特徴|h
|グループポリシー|HKLM|ローカル管理者でも変更できない。|
|グループポリシー|HKCU|ローカル管理者でも変更できない。|
|スタートアップスクリプト|HKLM|ユーザーは変更できない。|
|ログオンスクリプト|HKCU|ユーザーが変更できる。|

従って、
1.ユーザーが変更してもよいがデフォルト値を配布したい場合は一回だけregedit /s filename *1
2.HKCU対象でユーザーに変更させたくない値はグループポリシー(HKCU)
3.HKLM対象はスタートアップスクリプトでもグループポリシーでもよい。
 手間を考えるとスクリプト。ローカル管理者にも変更させたくなければグループポリシー。

MEMO:試してないけど疑問
1.Policyの下ってスクリプトで配布できるんだろか。
2.ローカル管理者ってほんとにPolicyを無効化することできない?

*&aname(無線環境のPCにグループポリシーでアプリケーションを配布する。){無線環境のPCにグループポリシーでアプリケーションを配布する。}
2007/08/20 グループポリシーで設定してみても下記のエラーで失敗している。
「コンピュータ ネットワークためのドメイン コントローラ名を取得できません。(指定されたドメインがないか、またはアクセスできません。 )。グループ ポリシーの処理は中止されました。」
http://support.microsoft.com/kb/840669/ja
この記述にしたがってレジストリを修正すると成功した ⇒ [[【regファイルダウンロード】>http://www31.atwiki.jp/memo77?cmd=upload&act=open&pageid=13&file=GpNetworkStartTimeoutPolicyValue.zip]]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"GpNetworkStartTimeoutPolicyValue"=dword:0000003c

*&aname(){admファイルを使用してレジストリを配布する}
この辺を参考に http://tod.cocolog-nifty.com/diary/2007/07/active_director_450e.html
例えばユーザーのログイン時にOnlyDetlを実行するレジストリを設定するなら
#highlight(){
CLASS USER 
CATEGORY !!CustomRegistry
 CATEGORY !!PathOfRun

  KEYNAME "Software\Policies\Microsoft\Windows\CurrentVersion\Run"

  POLICY !!OnlyDetl_Title
   EXPLAIN !!OnlyDetl_Explain
   PART !!OnlyDetl_Path   EDITTEXT
    VALUENAME OnlyDetl
    MAXLEN 60
   END PART

  END POLICY

 END CATEGORY
END CATEGORY

[strings]

CustomRegistry="配布レジストリ"
PathOfRun="ログイン時に実行するアプリケーション"

OnlyDetl_Title="OnlyDetl"
OnlyDetl_Explain="OnlyDetlの実行パスを設定します。"
OnlyDetl_Path="実行パス:"}
という感じです。
注意事項として、コピペした使ったときに[strings]の後ろにスペースが入っていると、「[strings]セクションに文字列xxxが見つかりません」みたいなエラーで蹴られます。
かならず余分なスペースは除去しましょう。前後も1行空行のほうがよいかも。

*&aname(ローカルセキュリティポリシーはDefault Domain Controllers Policyでなければ有効にならない?){ローカルセキュリティポリシーはDefault Domain Controllers Policyでなければ有効にならない?}
2007/08/14
できるだけDefault Domain Controllers Policyをいじりたくないので、リモート専用のユーザーを別のGPOで指定してみたが有効にならなかった。
ローカルセキュリティポリシーはDefault Domain Controllers Policyでなければいけないのかもしれない。
※資料を見つけているわけではないので未確定情報です。もしご存知の方がいれば情報をいただけるとありがたいです。
*&aname(Acrobat Reader 8.1をmsiファイルで配布する){Acrobat Reader 8.1をmsiファイルで配布する}
2007/08/07
いまや Acrobat Reader は必須といってよいと思いますが、msiファイルとしては提供されていません。
しかし内部的にはmsiファイルで構成されており、下記の手順で抽出することができます。

-[[Extract the Adobe Reader 8 msi installer for enterprise deployment>http://kb.adobe.com/selfservice/viewContent.do?externalId=kb400540&sliceId=2]]
-[[Acrobat 8.x/Adobe Reader 8.x をコマンドラインからインストールまたはアンインストールする方法(Windows)>http://support.adobe.co.jp/faq/faq/qadoc.sv?231981+002+3]]

間単に書くとこんな感じです。
1.[[http://ardownload.adobe.com/pub/adobe/reader/win/8.x/8.1/jpn/AdbeRdr810_ja_JP.exe]]をダウンロード
2.ダウンロードしたファイルをコマンドラインオプションをつけて実行
 AdbeRdr810_ja_JP.exe -nos_ne-nos_ne
3.[C:\Documents and Settings\[ユーザー名]\Local Settings\Temp\Adobe Reader 8]に下記ファイルが出力される。
 abcpy.ini
 AcroRead.msi
 Data1.cab
 Setup.exe
 setup.ini
4.AcroRead.msiとData1.cabを同じフォルダにおいて、グループポリシーで配布する。
**Flash Player をmsiファイルで配布する
2007/08/08 adobeへの無料登録をするとダウンロードサイトのアドレスを貰えるようです。
http://d.hatena.ne.jp/tkssoft/20070602/p1
*&aname(コンピュータ名の長さの制限など){コンピュータ名の長さの制限など}
2007/07/08
http://technet2.microsoft.com/WindowsServer/ja/library/8ec96981-6b1a-48ec-bd3e-d8d43bc814311041.mspx?mfr=true
とりあえずドメイン名まで含めてnvarchar(256)だけど、15文字以内に収めておくのが揉めない。
*&aname(ADSI関連で物凄く参考になるサイト){ADSI関連で物凄く参考になるサイト}
2007/07/08
http://blog.livedoor.jp/mokurin/archives/cat_50022192.html
*&aname(スクリプトでOutlook Expressのアカウントを修正する){スクリプトでOutlook Expressのアカウントを修正する}
2007/07/02
契約してるホスティングサービスからメールアカウントのサーバー名を変更してくれと通知。
1台1台やってられないのでスクリプト作ってみた。
Outlook Expressのアカウントって、CurrentUserが使えないのね。SIDまで取らなきゃいけなかった。
グループポリシーでログオンスクリプトに設定して解決。

 'ログインアカウントのSIDをWMIを使用して取得
 Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
 Set WshNetwork = WScript.CreateObject("WScript.Network")
 
 Set oAccount = oWMI.Get ("Win32_UserAccount.Name='" & WshNetwork.UserName & "',Domain='" & WshNetwork.UserDomain & "'")
 
 strKeyBase = oAccount.SID & "\Software\Microsoft\Internet Account Manager\Accounts"
 
 'SIDに登録されたインターネットアカウントをレジストリから列挙
 const HKEY_USERS = &H80000003
 Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
 oReg.EnumKey HKEY_USERS, strKeyBase, arrSubKeys
 
 '各アカウントの値をチェックして更新
 For Each subkey In arrSubKeys
     strKeyPath = strKeyBase & "\" & subkey
 
     strValueName = "POP3 Server"
     oReg.GetStringValue HKEY_USERS, strKeyPath , strValueName, strValue
     If Not IsNull(strValue) Then
         If strValue="mail.example.co.jp" Then
             oReg.SetStringValue HKEY_USERS, strKeyPath , strValueName , "pop.example.co.jp"
         End IF
     End If
 
     strValueName = "SMTP Server"
     oReg.GetStringValue HKEY_USERS, strKeyPath , strValueName, strValue
     If Not IsNull(strValue) Then
         If strValue="mail.example.co.jp" Then
             oReg.SetStringValue HKEY_USERS, strKeyPath , strValueName , "smtp.example.co.jp"
         End IF
     End If
 
 Next

*&aname(ACLからフルコントロールを持つアカウントを削除してしまった場合の対処){ACLからフルコントロールを持つアカウントを削除してしまった場合の対処}
2007/06/06
http://support.microsoft.com/kb/308421/ja
管理者アカウントで上位フォルダにて「サブコンテナとオブジェクトの所有者を置き換える」を行うと、アクセス権を変更できるようになる。
もともと所有者に管理者アカウントが表示されていても、これをやるのとやらないので挙動が違います。
検索語:NTFS/消せない/ファイル/継承/読み取り/変更/削除/SYSTEM/Administrators/フォーマット

*&aname(ちゃうねん){ちゃうねん}
2007/05/17
 oがないのがレジストリ……
 oがあるのがアクティブディレクトリ……
 
 ちょっと時々ごっちゃになるねん
 わかってるねん わかってるねんで? バカにしたらあかん
 oがあるのがレジストリ それがごっちゃに……
 
 わかってるねんで!?
正:Registry
誤:Registory

正:Active Directory
誤:Active Directry
*&aname(信頼関係){信頼関係}
2007/05/07 検索語:一方向の信頼関係/外部信頼関係
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28249&forum=6&8
2007/05/15 検索語:セキュリティグループ/グローバル/ドメインローカル/ユニバーサル
グループ・アカウントの種類を知る
http://www.atmarkit.co.jp/fwin2k/win2ktips/737groups/groups.html

*&aname(Defaul Domain Policyの 復旧){Defaul Domain Policyの 復旧}
2007/05/16
オペレートミスで[Defaul Domain Policy]を削除してしまうという失態。復旧について調査すると、dcgpofixというコマンドを使えばよいらしい。
http://www.atmarkit.co.jp/fwin2k/win2ktips/625dcgpofix/dcgpofix.html

やってみると下記エラーが出て復元に失敗する。
>このドメインの Active Directory スキーマ バージョンと、このツールによってサポートされているバージョンが一致しません。GPO は /ignoreschema コマンド ライン パラメータを使用すると復元できます。ただし、このツールの更新バージョンを取得することをお勧めします。このツールの更新バージョンには、Active Directory スキーマの更新バージョンが含まれている可能性があります。間違ったスキーマで GPO を復元すると、予期しない動作が発生する場合があります。

原因は http://support.microsoft.com/kb/932445/ja
『Windows Server 2003 R2-based ドメインで Dcgpofix.exe コマンド ライン ツールを使用すると、エラー メッセージ:「このドメインのスキーマの Active Directory バージョンとこのツールによってサポートされたバージョンが一致しません」』

R2だと出るということ。/ignoreschemaオプションで強行する。

>次のドメインの既定のドメイン ポリシーを復元しようとしています。
>xxx.yyy.zzz.jp
>続行しますか: <Y/N>? y
>警告: この操作を行うと、選択された GPO で行われた 'ユーザー権利の割り当て' がすべて置き換えられます。これにより一部のサーバー アプリケーションでエラーが発生する可能性があります。 続行しますか: <Y/N>?
で[y]を押して実行。
>既定のドメイン ポリシーは正しく復元されました
>注意: 既定のドメイン ポリシーの内容のみが復元されました。このグループ ポリシーオブジェクトへのグループ >ポリシー リンクは変更されませんでした。
>既定では、既定のドメイン ポリシーはドメインにリンクされています。

ドメインコントローラポリシーだと元にもどらない部分を手動で補正しなければいけないらしい。
http://support.microsoft.com/kb/833783/ja
今回はドメインポリシーなので無関係。

あとはポリシーオブジェクトをドメインにバインドして終了。
変な影響が出なければいいけど。

----
*comment
このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。
#comment_num2
----