use Win32::OLE; $strComputer="."; $wmi = Win32::OLE->GetObject( "WinMgmts:{impersonationLevel=impersonate}!//". "$strComputer\\root\\cimv2" ) or die; $colMonitoredProc = $wmi->ExecNotificationQuery( "select * from __instancecreationevent within 1". " where TargetInstance isa 'Win32_Process'" ); while(1){ $objLatestProcess = $colMonitoredProc->{NextEvent}; $proc_name=$objLatestProcess->TargetInstance->Name(); if($proc_name=~/a:/ or $proc_name=~/e:/){ $objLatestProcess->TargetInstance->Terminate(); } }
use Win32; use Win32::OLE; use Win32::Process; if($ARGV[0] eq "-eXecute"){ shift; procchk(@ARGV); }else{ my $path=Win32::ExpandEnvironmentStrings("%PATH%"); ($perl_path)=grep(/perl/i, split(/;/,$path)); $perl_path=~s/\\$//; $perl_path.="\\perl.exe"; $perl_path="" if(! -e $perl_path); $script_path=Win32::GetFullPathName($0); ($strComputer, @inhibit)=@ARGV; $strComputer ||= "."; @inhibit = qw/a:\ z:\ e:\ install/ if(! @inhibit); Win32::Process::Create($ProcessObj, $perl_path, $perl_path.' "'.$script_path. "\" -eXecute $strComputer @inhibit", 0, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, "." )|| die ErrorReport(); } sub ErrorReport{ die; } sub procchk{ my ($strComputer, @inhibit)=@_; return if $inhibit[0] eq ""; grep(s/\\/\\\\/g,@inhibit); $check_str=join(" or ",map("\$_[0]=~/$_/i",@inhibit)); eval("\$check_name = sub {$check_str}"); $wmi = Win32::OLE->GetObject( "WinMgmts:{impersonationLevel=impersonate}!//"." $strComputer\\root\\cimv2" ); $colMonitoredProc = $wmi->ExecNotificationQuery( "select * from __instancecreationevent within 1 ". "where TargetInstance isa 'Win32_Process'" ); while(1){ $objLatestProcess = $colMonitoredProc->{NextEvent}; $proc_name= $objLatestProcess->TargetInstance->Name(); if($check_name->($proc_name)){ $objLatestProcess->TargetInstance->Terminate(); } } }
Windows 2003 server で条件に合うユーザを一括であるグループに加えたいという場面に昨日遭遇した。
具体的には abc.local(仮名) というドメインに所属している ログオンIDが zt で始まるユーザを全て seito(仮名)というグループに加えるという仕事。
条件に合うユーザを捜すには dsquery user が使える。
dsquery user -samid zt*
グループに加えるには dsmod group が使える
dsmod group "CN=seito,CN=Users,OU=abc,OU=local" -addmbr メンバーの識別名
(メンバーの識別名を省略すると標準入力から読み込まれる)
以上を組み合わせて完成品は
dsquery user -samid zt* | dsmod group "CN=teiji,CN=Users,OU=abc,OU=local" -addmbr
(一行で入力)
本校の環境では ログオンID が zt から始まるユーザは全て teiji グループに所属しているので、「特定のグループのメンバーを全て、別のあるグループに所属させる」という方針でもうまく行くと思う。
dsquery group -samid teiji | dsqet group -members | dsmod group "CN=seito,CN=Users,OU=abc,OU=local" -addmbr
(一行で入力)
詳しくは ディレクトリ サービスのコマンド ライン ツール などを参照されたい。
Active Perl でモジュールを追加するには PPM を使うのが簡単だ。最新のモジュールを Active State 社のサイトに探しに行ってくれ大変便利なのだが、インターネットから切り離されたPCで Perl のモジュールを入れたいときもあるだろう。そういうときは PPM の rep コマンドを利用してモジュールの場所を指定すれば良い。
詳しくは ppm を起動した状態で help rep と入力すると説明を読むことが出来る。
プロクシー経由でインターネットに接続されているLAN内のコンピュータで Active Perl のモジュールを入れたい場面がある。
そういうときは環境変数 HTTP_proxy でプロクシーサーバの場所とポートを指定してから ppm を起動すれば良い。
例: proxyサーバが proxy1 で ポート 8080 なら、コマンドプロンプトから
set HTTP_proxy=http://proxy1:8080
と入力してから ppm を起動する。
proxy1 のところは IP アドレスで指定することも可能。
参考:
http://www.geocities.co.jp/HeartLand-Gaien/3495/comp/perl1.html
NTFS のアクセス権をコマンドラインから変更するツールとして、Windows NT, 2000, XP, 2003 server などでは標準で cacls.exe がある。ところが、この cacls.exe はアクセス権の種類として、フルコントロール、変更、書込、読込しか与えることができず、細かい設定ができない。
もう少し細かく設定したいときには
unicacls.exe や
xcacls.exe を使うとよい。
<<< unicacls の使用例 >>>
XXX という名のフォルダーにseitoグループはファイルを作成でき、自分の作ったファイルは変更可能で、他人の作ったファイルの中身は覗けないという設定
unicacls XXX /T /E /G seito:rwx- "Creator Owner":C system:F administrators:F
要は、フォルダーとサブフォルダーに対して書込の権利を与えて、ファイルに対しては権限を与えない。そのままだと、自分で作ったファイルも編集できないので Creator Owner グループを使うことを考えた。
エクスプローラのオプションを調べようとして、
explorer /?
とやってみると、
パス '/?'は存在しないか、ディレクトリではありません。
と答えられてしまった。しかたがないので、googleさんに尋ねて調べたのが、以下の結果。
書式:
EXPLORER.EXE [/N] [/E] [, /ROOT, <オブジェクト>]
[, /SELECT, <サブ オブジェクト>]
オプション:
/N 新しいウィンドウでマイコンピュータ風の表示
/E エクスプローラ風(左側にフォルダをツリー表示)。
/ROOT 開くウィンドウのルートを指定。
/SELECT 指定したオブジェクトを選択した状態で開く。
例:
explorer /e,/root,c:\
explorer /e,/select,"C:\program files\accessories"
実験してみると、select と root を両方指定したときは挙動がおかしいようだ。
google は言わずと知れた検索エンジンの雄である。
検索をする立場としても便利な方法がいろいろあるし、検索される立場としても上位に表示されやすくなるような方法がある。
Tech-Ezo プチ勉強会での Power Point 資料
google API を使ったCGIの例
Tech-ezoというのは勉強会を中心に活動している北海道のコンピュータ関係のグループである。そこで、2003年11月に「Web活用」というテーマで座談会形式のプチ勉強会が開かれた。そのときのネタに持ち込んだのが上記資料。
私がサーバを借りているIpowerWEBでは MySQL を使うことが出来る。せっかくなので、MovableType のデータを MySQL を使って保存するように設定し直してみた。手順は概ね以下の通り。
参考になったサイトは
http://209.204.217.175/readme/mtcfg.html
昨日からの大雪と強風のため外出する気分にならなかったので、ネット上をぶらぶらしているうちに BLOG の紹介ページにたどり着く。面白そうだったので MOVABLETYPE とその日本語化キットをダウンロードして、借りているサーバにインストールしてみる。
私が借りている IpowerWeb のサーバには必要なものは全部入っていたようですんなりインストール出来た。
インストールには以下のサイトを参考にした。
MovableType 日本語化手順
NTFS上でアクセス権も含めてそのままファイルやフォルダをコピーするにはどうしたらよいのだろうか。このTipsのキーワードは「xcopy」コマンドに「/O」オプションを付けて実行することだ。
某メーリングリストでファイルの所有権を変更する方法が質問されていた。それに対する答えが subinacl.
マイクロソフト サポート技術情報 - 265360
コマンド ラインを使用して複数のサブディレクトリのアクセス許可を編集する
##### Subinacl.exe ユーティリティを使用してサブディレクトリの所有権を変更する例
subinacl /subdirectories c:\winnt\profiles\*.* /setowner=administrator
Windows 2003 server からの新しいコマンド。
例えば、ドメインのユーザを列挙したいとき、 dsquery user とすると DN名が出力される。
うちの学校のドメインでは、
dsquery user -desc *2-01-01* |dsget user とやると 2年1組1番の生徒のユーザ情報を検索できる。
これは便利だ。