ラベル Windows の投稿を表示しています。 すべての投稿を表示
ラベル Windows の投稿を表示しています。 すべての投稿を表示

2016年1月12日火曜日

Thunderbirdアドオン"External Editor"とsingleton.vimの相性が悪い(未解決)

以下、全部Windows版の話。

俺はvim勢なので、Windows上のエディタはKaoriYa版gvimを使っている。
gvimを多重起動したくないので、singleton.vimを入れている。
で、Thunderbirdのメールをgvimで編集したいので、アドオン"External Editor"を入れてみた。
この2つの相性が悪く、うまく動かなかったので、状況をメモしておく。

2015年7月28日火曜日

Windows版Thunderbird38.1でMuttatorを使う

下記の手順で、Windows版Thunderbird 38.1でMuttatorが動いたのでメモ。
2015年7月28日現在、MozillaのサイトからはMuttator 1.2しか落とせない。ところが、Githubから1.3のソースが入手できるので、これをmakeしてxpiを出力すればよいという話。
Windows環境でのmakeには、Cygwinを使った。また、Githubからソースを入手するためにGitも必要。というわけで、下記手順の前提として、CygwinとGitをインストールしておく必要がある。
Githubからソースを入手
Git Bashにて以下を実行。
$ git clone https://github.com/vimperator/vimperator-labs.git
Cloning into 'vimperator-labs'...
remote: Counting objects: 31911, done.
remote: Total 31911 (delta 0), reused 0 (delta 0), pack-reused 31911R
Receiving objects: 100% (31911/31911), 6.85 MiB | 180 KiB/s, done.

Resolving deltas: 100% (23822/23822), done.
Checking out files: 100% (181/181), done.
Cygwinでmake
Cygwinにて以下を実行。
※Git Bashの~(ホームディレクトリ)はC:\Users\<username>なので、そこに移動してからmakeを実行する。下記の例では、<username>は"dsp74118"。
$ cd /cygdrive/c/Users/dsp74118/
$ cd vimperator-labs/
$ cd muttator/
$ make xpi
Building XPI...
Including en-US documentation
Including ja documentation
Replacing ###VERSION### and ###DATE### tags
Packaging up muttator-1.3.xpi
SUCCESS: ../downloads/muttator-1.3.xpi
$ cd ../downloads/
$ ls
muttator-1.3.xpi
出力されたxpiファイルを、Thunderbirdのアドオンマネージャ画面にドラッグ&ドロップすればOK。

2014年2月24日月曜日

NTFSアクセス許可の「サブフォルダーとファイルの削除」が強すぎる

NTFSに詳しい人には当たり前の話かもしれないがメモ。

"test" というフォルダを作成し、そのフォルダの配下に "deleteTest.txt" というファイルを作成する。
 "test" フォルダにて "サブフォルダーとファイルの削除"の許可にチェックを入れる。
Fig.1 上位で "サブフォルダーとファイルの削除" 許可

"deleteTest.txt" にて 上位継承を切り、 "削除" の拒否にチェックを入れる。
Fig.2 下位で "削除" 拒否

ツリーで示すと下図のようになる。
Fig.3 アクセス権設定
この状態でどちらが勝つか。
結果は、"サブフォルダーとファイルの削除" の勝ち。つまり、"deleteTest.txt" は削除できてしまう。
下位のオブジェクトで "削除" を拒否しても全くの無駄
というわけで、あるフォルダの配下のサブフォルダ・ファイルに対して「原則消せるけど、特定のファイルだけ消されたくない」という要件がある場合、"サブフォルダーとファイルの削除" は使わず、
  • 上位フォルダからの継承で "削除" を許可しておく
  • 消されたくない下位フォルダ・ファイルだけ、継承を切って "削除" のチェックを外す
という方法を取る必要がある。
個人的には下位の設定が勝って欲しいんだけど。こういうのって普通は、まず上位の設定が適用された後、下位の設定で上書きされると思うじゃん?

2014年2月19日水曜日

VagrantでWindowsゲストを立ててChef-Soloのrecipeを実行する

2014.02.23 Boxの元の仮想マシン名とBoxの名前がカブってて具合悪かったので一部修正。

VagrantはWindows関連の情報が少ないので色々実践してみた。当ブログはWindows技術者の味方です(おおげさ)。
前回のVagrantの記事はあまりに色々端折っていたので、今回はVagrantを知らない人にも分かる様、少し詳しめに書こうと思う。

今回の目的を下記に定める。

  • ホストOSもWindows、ゲストOSもWindowsという環境
  • VagrantによるゲストOSの起動、ゲストOSに対するChef-Soloの自動インストールとrecipe自動実行まで行う
  • recipeは、とりあえずお試しということで、IISの自動インストールとする
  • ゲストOSはWindows Server 2012 R2 180日評価版とする
  • ゲストOSを複数台同時に立ち上げられるように、sysprepも実施する
  • sysprepの自動応答ファイルも作成することとする

ゲストを評価版にしたのは、元々Vagrantが開発環境を作ったり壊したりするためのツールであることから、ライセンスのアクティベーションが発生する製品版よりは評価版の方が適しているとの考えから。

2014年2月10日月曜日

SubInACLのFlagとAccessMask早見表

dsp74118の補完庫: Windows のオブジェクトのアクセス権を操作するコマンド subinacl が便利だった で触れたSubInACLのFlag、AccessMaskの早見表を作った。
俺の中ではアクセス権変更ツールとしてのSubInACLはオワコンだが、現在のACLを確認するツールとしてはまだまだ便利に使えると思う。

2014年2月7日金曜日

PowerShellでNTFSのACLをいじる(備忘録レベル)

2014.2.13修正 ACLの適用範囲や継承は既存の設定を引き継ぐよう修正

仕事で下記スクリプトを作ったので記録として残しておく。
機能は、引数で与えたフォルダに対し、セキュリティグループ "domainname\groupprefix*" の「サブフォルダーとファイルの削除」権限を削除するというもの。
このスクリプトをベースに、色々と応用が効くはず。
$Path = $args[0]
$acl = Get-Acl $Path
$groupAccess = $acl.access | where {$_.IdentityReference -like "domainname\groupprefix*"}
if ($groupAccess){
    $Access = $groupAccess.IdentityReference

    "Modifying Permissions For $Access"
    $Permission = $groupAccess.FileSystemRights
    "Before: $Permission"
    $Permission = ($Permission -replace "DeleteSubdirectoriesAndFiles(, )*","") -replace ", $", ""
    "After: $Permission"
    $inherit = $groupAccess.InheritanceFlags
    $propagation = $groupAccess.PropagationFlags
    $AccessRule = New-Object system.security.AccessControl.FileSystemAccessRule($Access, $Permission, $inherit, $propagation, "Allow")

    $AccessModification = New-Object system.security.AccessControl.AccessControlModification
    $AccessModification.value__ = 2
    $Modification = $False
    $acl.ModifyAccessRule($AccessModification, $AccessRule, [ref]$Modification) | out-null
}
Set-Acl -aclobject $acl -Path $Path

VagrantでWindowsゲストのBoxを作成


前々からVagrantをいじりたくてうずうずしていた私。最近ようやく触る時間ができたので、Windows Server 2012 R2ゲストのBox自作に挑戦した。
最初は[Vagrant] WindowsServer2012R2のBoxを自作する #Vagrant_ja - NAVER まとめを参考にさせてもらっていたが、このまとめの作者であるk-kukitaさんから「今はvagrant-windows使ったほうがよい」とアドバイスを頂いたので、早速vagrant-windowsを試してみた。

必要な手順はvagrant-windows/README.md at master · WinRb/vagrant-windows · GitHubにほとんど書いてある。
なお、VagrantやVirtualBoxのセットアップは、この記事では省略する。

2013年12月26日木曜日

Exchange 2007 の3ノードクラスタで、2番目のメールボックスサーバーへのメールボックス作成に失敗する

昨日、Exchange 2007 の既知不具合を踏んだ。
今頃 Exchange 2007 の情報かい、という感じで需要ないと思われるが記録を残しておく。
3ノードクラスタの動作確認で問題発生
Exchange 2007のメールボックスサーバーの高可用性構成には "ローカル連続レプリケーション (lcr)", "クラスタ連続レプリケーション (ccr)", "スタンバイ連続レプリケーション (scr)", "シングルコピークラスタ (scc)" の4種類がある。
高可用性: Exchange 2007 ヘルプ
今回担当したシステムでは、昔ながらの共有ディスク構成である scc を選択。ベストの選択かどうかはともかく、ディスクサイズ節約という観点では、scc 以外の選択肢は無いので。
サイジングの結果、Active-Active-Passive の3ノード構成になった。
3ノードって滅多に無いので、この時点でやや不安ではあった。

で、メールボックスを新規作成する試験を実施したところ、見慣れぬエラーが発生。
サーバー <servername> 上のプロキシの生成プログラム DLL が見つからないか、初期化に失敗しました。現在の受信者のプロキシ アドレスを計算できません。すべてのプロキシ アドレス生成プログラム DLL が対象となるサーバーにインストールされていることを確認してください。
2007 の既知の不具合だった
調査したところ、すぐに下記の情報に行き着いた。
シングル コピー クラスタのインストール: Exchange 2007 ヘルプ
複数のクラスタ化メールボックス サーバーが存在する SCC では、フェールオーバー クラスタにインストールされている 2 番目以降のクラスタ化メールボックス サーバーに新しいメールボックスを作成できないという、既知の問題があります。
なんで既に枯れてる 2007 にこんなしょぼいバグが残ってるんだ。
その対処方法は下記ページに書かれている。
Exchange 2007 シングル コピー クラスタ (SCC) の 2 台目以降のクラスタ化メールボックス サーバー (CMS) 上でメールボックス作成を有効にする方法
このページによると、どうやら、AD内に本来自動的に作られるべき "Microsoft MTA" オブジェクトが、クラスタの2番目以降のサーバでは作られないので、手作業で作ってくれということのようである。さっきのエラーメッセージの「プロキシの生成プログラムDLL」って、全然関係ないじゃん。Microsoft 製品のエラーメッセージは相変わらずアレだ。

というわけで、上記ページの手順に従って Microsoft MTA オブジェクトを作成して本件は解決した。
今後 Exchange 2007 で3ノード以上の scc を組む人の参考になれば幸いである。そんな人いないか。

2013年12月24日火曜日

2013年11月8日金曜日

Windows のオブジェクトのアクセス権を操作するコマンド subinacl が便利だった

Windows のファイル、レジストリ、SAMオブジェクト(ユーザー、グループ)等のアクセス権を操作する MS 製ツール "subinacl" が便利だったのでメモっておく。
当記事ではファイル/フォルダのアクセス権操作についてのみ言及する。

2013年11月1日金曜日

『ログオン後のNumLock状態はレジストリで制御できる』という大嘘

当記事はWindows7を対象に書いているので、他のバージョンでは動作に差異があるかもしれません。あらかじめご了承ください。
「NumLock状態を制御したい」という要件
ITインフラの(というか社内OA構築系の)仕事をしていると、顧客から「端末のNumLockは全台一律(On|Off)にしてよ」という要件が出ることがたまにある。
で、その方法をググると、「レジストリの値を変更すれば良い」という情報が山ほど出てくる。ところが、得られる情報は半分は正しくて、半分は嘘である。

2012年7月6日金曜日

BitLocker/Bitlocker To Goの自動ロック解除についてちょっと研究

BitLockerを常用するなら自動ロック解除は必須
Windows 7やWindows Server 2008には内蔵ドライブを暗号化するBitLockerと、外付ドライブ(HDD/USBメモリ)を暗号化するBitLocker To Goの2つの機能が備わっている(ただし、Windows7ではEnterprise EditionとUltimate Editionのみ)。
BitLockerでは、暗号化したドライブはロック状態になり、ロックを解除しなければ読み書きできない仕様であるが、PCを起動するたびにいちいち手動でロックを解除するのは猛烈に面倒なので、自動的にロックが解除されてシームレスに利用できることが望ましい。
幸いにも(?)、BitLockerには、そのままずばり「自動ロック解除」という名前の機能がある。こいつの挙動について色々調べたのでまとめてみた。
なお、本稿はVistaのBitLockerは対象外である。

2012年6月14日木曜日

Outlookの階層型アドレス帳が遅かったら、他サイトのADと通信しているのが原因かも。

階層型アドレス帳がクソ重い
本拠地にExchange Server 2007がある環境で、遠隔サイトより「Outlook2007で階層型アドレス帳を使うと、ちょお遅いんですけど」という申告があった。ツリーを展開するだけで数十秒固まるという深刻な状況とのこと。
(ちなみに遠隔サイトにもドメインコントローラは存在する)。

パケットを取ったりして調査した結果、遠隔サイトのOutlook2007にて階層型アドレス帳を操作すると、自サイトのドメインコントローラではなく本拠地のドメインコントローラ(グローバルカタログ=GC)に対して通信を行っていることが判明した。

Figure.1 デフォルト設定では、Outlookは本拠地のGCと通信する

2012年5月28日月曜日

WindowsのDNSサーバのAレコードの消失等を監視するPowerShellスクリプト

このエントリは、ほぼ自分用です。
設定ファイルの仕様など、かなり手抜きなので、コピペでの利用はおすすめしません。

WindowsのDNSサーバに静的に登録したAレコードが、なぜか動的レコードに突然変わったり、気がついたら消えているという現象に悩まされた(NETLOGONサービスが悪さをしている模様?)。
原因は追究できていないのだが、とりあえずレコードの状態を監視しようということでPowerShellスクリプトを書いた。

2012年5月2日水曜日

ファイラーから呼び出すFireFileCopyをElevation Powertoysで昇格する

ファイラーから呼び出すFireFileCopyの昇格をコントロールする
前回の続き。
私の環境では、ファイル操作にFireFileCopyを使っている(あふから呼び出す)。
こいつも状況によって一般権限と昇格した権限を使い分ける必要がある。フォルダリダイレクションの対象になっているフォルダ(system32とかProgram Filesとか)の下にファイルをコピーする場合には、昇格した権限を使う必要があるからである。

そこで私が用意したのが、下記2つのスクリプト。
ffc.vbsは、一般権限でFireFileCopyを起動するためのスクリプト。
ファイルのコピー先(Toオプション)がリダイレクション対象であった場合は警告ダイアログを出すようになっている。
ffcElevate.vbsは、昇格した権限でFireFileCopyを起動するためのスクリプト。FireFileCopyは32bitアプリケーションなので、64bit OSでのSystem32のリダイレクトに対する考慮を入れてある。
(「毎回ffcElevate.vbsを使えばいいじゃん!」と思うかもしれないが、ファイルコピーのたびにUACのダイアログが出たらたまらん。)

Elevation Powertoysで64bit Windows/UAC環境下のファイラーやランチャーを強化

2012.07.02 64bit版Console2に関する記述を修正しました。
2012.05.07 誤記など少し修正しました。
ファイラー派にとってUACは邪魔者!
私はランチャーにCraftLaunch(旧版2.x)を、ファイラーにあふwを使っている。
Vista以降のWindowsにはUAC(User Access Control)というウザいセキュリティを強化する機能が搭載され、デフォルトで有効になっているわけだが、こいつとファイラーやランチャーとの相性があまりよくない。
通常、アプリケーションを昇格した権限で起動するには、アイコンを右クリックして「管理者として実行」を選択しなければならないが、この操作をコマンドラインから実行する方法が用意されていないためである。
("runas"で権限昇格できると勘違いしている人がたまにいるけど、できませんよ。)
Figure.1 ファイラで右クリックし「管理者として実行」を選ぶのはダサい
ファイラーやランチャー自体を昇格した権限で起動してしまえば、そこから呼び出すアプリはすべて昇格権限で起動するのでラクチンだが、セキュリティ的には最低である。
また、タスクスケジューラを使う技(アプリをタスクとして登録し、"最上位の特権で実行する"を有効にし、schtasks /runで実行する)もあるが、あまりスマートな方法とは言い難い。

2012年4月16日月曜日

PC上の全ユーザのOutlookプロファイルを削除するスクリプト

必要だったので作った。
VBScriptで、かなり手抜きだけど、今後のために残しておく。
ロジックは、HKEY_USERS(HKU)の下に各ユーザのハイブをロードし、 \Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles の下をごっそり削除するという単純なもの。
加えて、ログオン中のユーザのレジストリ(既にHKUにロードされているハイブ)の同エントリも削除する。

関数DeleteRegEntryはMSのKBから拝借。

2012年3月25日日曜日

Active Directory レプリケーションが片方向だけエラーになる場合の対応手順

レプリケーションエラーの対応メモ(主に自分用)。
はじめに。
ADはマルチマスタなので、各ドメインコントローラが互いに双方向にデータのレプリケーションを行う。
いま面倒を見ているシステムにて、「片方向は問題なくレプリケーションできるが、反対方向のレプリケーションがある日突然エラーになる」という現象が起きている。これまで何度もこの障害に見舞われており、正直見飽きたぐらい。

2012年3月18日日曜日

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(2)

前回の続き。

オフラインアドレス帳とは
Exchange 2007にはオフライン アドレス帳というものがある。
これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
Figure.1 グローバル アドレス一覧(参考画像)

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(1)

グローバル アドレス一覧とは何か
グローバル アドレス一覧は、Exchange組織内の全Exchange Serverからメールアドレスを集めて来たリストである。
Exchange Serverを立てると、'既定のグローバル アドレス一覧'というのが自動的に作られる。こいつには組織内の全メールアドレスが入っている。そのため、一般的には'グローバル アドレス一覧'と言えば、全ユーザのアドレスを参照できるアドレス帳として利用されるケースが多い。
グローバル アドレス一覧は複数作成できる
しかし実は、ひとつのExchange組織内には'既定のグローバル アドレス一覧'以外にも複数のグローバル アドレス一覧を作成することができる。
グローバル アドレス一覧の作成には、Exchange管理シェルのNew-GlobalAddressListコマンドを使う。こいつの-RecipientFilterパラメータを使うと、作成するグローバル アドレス一覧に含むメンバを絞ることができる。
例えば部署単位でグローバルアドレス一覧を作ることにより、他部署のユーザのアドレスをOutlookのアドレス帳に表示させない、といったことが可能だ。
RecipientFilterの書式の詳細はここでは割愛するが、例えば"(<プロパティ名> -eq '<文字列>')"などと書く。フィルタに使えるプロパティの一覧はExchange 2007 SP1 および SP2 の -RecipientFilter パラメータでフィルタ可能なプロパティに載っている。部署名で絞る場合は例えば下記のようになる。
New-GlobalAddressList -Name '情シス' `
 -RecipientFilter "(Department -eq '情報システム部')"