「Active Directory」の編集履歴(バックアップ)一覧はこちら
Active Directory - (2009/12/01 (火) 13:30:38) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
PageLastUpdate:&date()/total:&counter()/today:&counter(today)/yesterday:&counter(yesterday)
#openclose(show=クリックすると見出し一覧を表示します){
#contents()
}
*&aname(グループ ポリシー オブジェクトにクリスタル レポートの64bit向けmsiパッケージを追加しようとするとエラー){グループ ポリシー オブジェクトにクリスタル レポートの64bit向けmsiパッケージを追加しようとするとエラー}
2009/12/01
Windows 7の64bit版導入に伴ってクリスタル レポートをGPOで配布しようとしたところ
#highlight(){追加操作でエラーが発生しました。パッケージから展開情報を抽出できませんでした。
パッケージが正しいことを確認するためにパッケージの確認を実行してください。
GPO を作成できません。}
と怒られる。
[[KB324886>http://support.microsoft.com/kb/324886/ja]]が出ているけれど、これはWindows2000向けで特に64bitとか関係なさそう。Windows2003で関連する情報を見つけることはできなかった。
専用のGPOを作成したので32bitと64bitの混在とかそういう問題ではないっぽい。
もしかしてサーバーが32bitOSだと、64bit用のパッケージは展開できないのだろうか。
とりあえず1台だけだったので手動で設定したが、今後台数が増えるとめんどくさい。
未解決なのでわかる方がいましたら教えてください。
ドメインコントローラー:Windows Server 2003 R2(32bit)
対象クライアント:Windows 7 Professonal 64bit Japanese
使用したパッケージ:CRRedist2005_X64.msi、CRRedist2005_X64_JP.msi
*&aname(レジストリの有無を確認した上で、存在すればレジストリを削除){レジストリの有無を確認した上で、存在すればレジストリを削除}
2009/11/10
#highlight(){On Error Resume Next
strRegValue = wss.RegRead("レジストリのパス")
On Error Goto 0
If strRegValue <> "" Then
wss.RegDelete("レジストリのパス")
End If}
*&aname(Windows 2000 では「gpupdate /force」ではなく「secedit /refreshpolicy」){Windows 2000 では「gpupdate /force」ではなく「secedit /refreshpolicy」}
2009/04/27
http://www.atmarkit.co.jp/fwin2k/win2ktips/616gpupdate/gpupdate.html
#highlight(){secedit /refreshpolicy}
*&aname(XPクライアントに特定のユーザー/グループのみログインを許可する){XPクライアントに特定のユーザー/グループのみログインを許可する}
2009/04/02
1.[コンピュータの管理]-[ローカル ユーザーとグループ]-[グループ]を開く
2.Usersから下記の3グループを削除
#highlight(){Domain Users
NT AUTHORITY\Authenticated Users (S-1-5-11)
NT AUTHORITY\INTERACTIVE (S-1-5-4)}
3.ログインさせたいユーザー/グループを追加
いちおうこの手順でできた。[Domain Users]だけではダメ。
[NT AUTHORITY\Authenticated Users (S-1-5-11)]を抜いてもダメ。
[NT AUTHORITY\INTERACTIVE (S-1-5-4)]まで抜いたら期待通りに動作しました。
ただし、まだ様々な動作で不具合が出るかどうか未検証。
*&aname(WSUSで承認された更新プログラムをすぐにクライアントに反映させる){WSUSで承認された更新プログラムをすぐにクライアントに反映させる}
2009/04/01
基本は更新プログラムの承認時に[更新の承認]→[期日]で日時指定をしておくことですが、コマンドラインからやりたい場合は
>wuauclt.exe /resetauthorization /detectnow
でできる。
*&aname(DHCPでルーティングを設定){DHCPでルーティングを設定}
2009/02/17
xxx.yyy.0.0のネットワークでデフォルトゲートウェイはxxx.yyy.0.250だとする。
xxx.zzz.0.0への接続だけxxx.yyy.0.251のゲートウェイ(ルーター)に振り分けたい。
1.まずDHCPではなくコマンドラインで設定してテストして見る
#highlight(){route add xxx.yyy.0.0 mask 255.255.0.0 xxx.yyy.0.251}
2.設定できたか確認
#highlight(){route print}
3.経路情報を確認
#highlight(){tracert xxx.yyy.0.0}
4.テスト用の接続情報を削除
#highlight(){route delete xxx.yyy.0.0}
5.DHCPにてスコープオプションに「249 クラスレス静的ルート」にチェックを入れて下記の通り設定。
-宛先:xxx.zzz.0.0
-マスク:255.255.0.0
-ルーター:xxx.yyy.0.251
6.経路情報を確認
#highlight(){tracert xxx.yyy.0.0}
#Blockquote(){とりあえず俺がわかっていなかったので超簡略化して書いておく。
aaa.bbb.0.0で0を指定した後ろ二つは1-255の範囲を指すことになる。サブネットマスクは255.255.0.0。
aaa.bbb.ccc.0に対してならサブネットマスクは255.255.255.0のようにすればよい。
この理解だけだと間違いなので、この記事とか読んで理解してから設定しないと痛い目みるかも。
http://www.atmarkit.co.jp/fnetwork/netcom/route/route.html}
*&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台づつパスワード変えたければ日時とコンピュータ名でハッシュ化しちゃうとかいろいろ。
懸念として意図しないコンピュータ名をフォルダに送り込まれる可能性がありますが、ローカル管理者のパスワードを&s(){推測不能}「こちらに既知で相手に未知」なものに変更されてもそれほどダメージはないのでよしとしておきます。
*&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
----
PageLastUpdate:&date()/total:&counter()/today:&counter(today)/yesterday:&counter(yesterday)
#openclose(show=クリックすると見出し一覧を表示します){
#contents()
}
*&aname(Windows Server 2008からはドメイン内で複数のパスワードポリシーを設定できる){Windows Server 2008からはドメイン内で複数のパスワードポリシーを設定できる}
2010/04/30
http://technet.microsoft.com/ja-jp/library/cc770394(WS.10).aspx
これしらなかったのでメモ。
*&aname(グループ ポリシー オブジェクトにクリスタル レポートの64bit向けmsiパッケージを追加しようとするとエラー){グループ ポリシー オブジェクトにクリスタル レポートの64bit向けmsiパッケージを追加しようとするとエラー}
2009/12/01
ドメインコントローラー:Windows Server 2003 R2(32bit)
対象クライアント:Windows 7 Professonal 64bit Japanese
使用したパッケージ:CRRedist2005_X64.msi、CRRedist2005_X64_JP.msi
Windows 7の64bit版導入に伴ってクリスタル レポートをGPOで配布しようとしたところ
#highlight(){追加操作でエラーが発生しました。パッケージから展開情報を抽出できませんでした。
パッケージが正しいことを確認するためにパッケージの確認を実行してください。
GPO を作成できません。}
と怒られる。
[[KB324886>http://support.microsoft.com/kb/324886/ja]]が出ているけれど、これはWindows2000向けで特に64bitとか関係なさそう。Windows2003で関連する情報を見つけることはできなかった。
専用のGPOを作成したので32bitと64bitの混在とかそういう問題ではないっぽい。
もしかしてサーバーが32bitOSだと、64bit用のパッケージは展開できないのだろうか。
とりあえず1台だけだったので手動で設定したが、今後台数が増えるとめんどくさい。
未解決なのでわかる方がいましたら教えてください。
→ 2010/10/13解決
2008R2、64bitのサーバーをメンバサーバーとして追加。グループポリシー管理エディタを機能として追加。
そのサーバーからGPOを設定することで回避できました。ドメコンではなくメンバサーバーでよいので助かった。
ただ誰でも使える方法ではないので本当は解決とは言い難いですね。
*&aname(レジストリの有無を確認した上で、存在すればレジストリを削除){レジストリの有無を確認した上で、存在すればレジストリを削除}
2009/11/10
#highlight(){On Error Resume Next
strRegValue = wss.RegRead("レジストリのパス")
On Error Goto 0
If strRegValue <> "" Then
wss.RegDelete("レジストリのパス")
End If}
*&aname(Windows 2000 では「gpupdate /force」ではなく「secedit /refreshpolicy」){Windows 2000 では「gpupdate /force」ではなく「secedit /refreshpolicy」}
2009/04/27
http://www.atmarkit.co.jp/fwin2k/win2ktips/616gpupdate/gpupdate.html
#highlight(){secedit /refreshpolicy}
*&aname(XPクライアントに特定のユーザー/グループのみログインを許可する){XPクライアントに特定のユーザー/グループのみログインを許可する}
2009/04/02
1.[コンピュータの管理]-[ローカル ユーザーとグループ]-[グループ]を開く
2.Usersから下記の3グループを削除
#highlight(){Domain Users
NT AUTHORITY\Authenticated Users (S-1-5-11)
NT AUTHORITY\INTERACTIVE (S-1-5-4)}
3.ログインさせたいユーザー/グループを追加
いちおうこの手順でできた。[Domain Users]だけではダメ。
[NT AUTHORITY\Authenticated Users (S-1-5-11)]を抜いてもダメ。
[NT AUTHORITY\INTERACTIVE (S-1-5-4)]まで抜いたら期待通りに動作しました。
ただし、まだ様々な動作で不具合が出るかどうか未検証。
*&aname(WSUSで承認された更新プログラムをすぐにクライアントに反映させる){WSUSで承認された更新プログラムをすぐにクライアントに反映させる}
2009/04/01
基本は更新プログラムの承認時に[更新の承認]→[期日]で日時指定をしておくことですが、コマンドラインからやりたい場合は
>wuauclt.exe /resetauthorization /detectnow
でできる。
*&aname(DHCPでルーティングを設定){DHCPでルーティングを設定}
2009/02/17
xxx.yyy.0.0のネットワークでデフォルトゲートウェイはxxx.yyy.0.250だとする。
xxx.zzz.0.0への接続だけxxx.yyy.0.251のゲートウェイ(ルーター)に振り分けたい。
1.まずDHCPではなくコマンドラインで設定してテストして見る
#highlight(){route add xxx.yyy.0.0 mask 255.255.0.0 xxx.yyy.0.251}
2.設定できたか確認
#highlight(){route print}
3.経路情報を確認
#highlight(){tracert xxx.yyy.0.0}
4.テスト用の接続情報を削除
#highlight(){route delete xxx.yyy.0.0}
5.DHCPにてスコープオプションに「249 クラスレス静的ルート」にチェックを入れて下記の通り設定。
-宛先:xxx.zzz.0.0
-マスク:255.255.0.0
-ルーター:xxx.yyy.0.251
6.経路情報を確認
#highlight(){tracert xxx.yyy.0.0}
#Blockquote(){とりあえず俺がわかっていなかったので超簡略化して書いておく。
aaa.bbb.0.0で0を指定した後ろ二つは1-255の範囲を指すことになる。サブネットマスクは255.255.0.0。
aaa.bbb.ccc.0に対してならサブネットマスクは255.255.255.0のようにすればよい。
この理解だけだと間違いなので、この記事とか読んで理解してから設定しないと痛い目みるかも。
http://www.atmarkit.co.jp/fnetwork/netcom/route/route.html}
*&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台づつパスワード変えたければ日時とコンピュータ名でハッシュ化しちゃうとかいろいろ。
懸念として意図しないコンピュータ名をフォルダに送り込まれる可能性がありますが、ローカル管理者のパスワードを&s(){推測不能}「こちらに既知で相手に未知」なものに変更されてもそれほどダメージはないのでよしとしておきます。
*&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"
'【書換必須】結果を出力するログファイルパス。
strLogPath = "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
----