2009/03/13

VBScriptで鯖管理 そにょ2・・・


このログのスクリプトは以後のログで更新しました。[ 20090411 1839 ]

鯖ってより、Windows(NT系2k以降)端末全般に云えるコトかも知らんが、
Windows起動時のアプリケーション自動起動・・・
[スタート]メニュー、[プログラム]配下の[スタートアップ]に登録したり、
レジストリの
   [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run]    
に登録したりと、やり方は様々だろう。

ただ、残念なことに、これらでは起動順序を指定できない。

唯一その機能を持つレジストリキー RunOnce も、既知と思うが、
システムレベルのファイル更新向けなので、初回起動時にのみ動作し、設定が消去される。

スタートアップ起動させたいが、起動タイミングがカブると具合の悪いものも、意外に少なくはナイようだ。
しかも、スタートアップフォルダ登録では、ログオン時にしか機能しない。

ココで 紛らわしいので一応の解説を入れると、[スタートアップ]フォルダ登録での起動と云うのは、
Windowsのブート後、ログオン画面が表示され、
  (オートログオンを設定している場合は少し違うが、実際は同じ。
   マシンがショボいと、一瞬ログオン画面が見えることがあるので判る)
ユーザーがログオンした後の自動起動をサポートしている。
で、グループポリシーで云うトコロの"スタートアップスクリプト"と云うのが動作するタイミングは、
前述にあるWindowsブートの後半で実行される、
つまり、ログオンより、スタートアップのほうが先行動作する・・・ なんて紛らわしい・・・

で、チョイと判ってるヒトなら、グループポリシーで、スタートアップ/ログオンスクリプトに
実行させたい対象を設定して、起動順序をある程度、制御下においてみることも試みていると思う。
本来はスクリプトを登録するのがスヂっポイのだが、実行ファイルも直接置けるし、パラメータの指定も出来る。

で、そのグループポリシーのスクリプト登録、スタートアップ/ログオン/ログオフ/シャットダウン
それぞれ、分けて設定できる、RAMドライブのような変り種利用者だったら、この意味は判るだろうし、
中々に嬉しい機能だろう。
ただ残念ながら、起動順は設定できるようだが、次の処理までの移行時間までは設定できないと見える・・・

しかしまぁ、ココでもVBScriptが使えるってコトで、だったら・・・とチョイっと作って実働させている。

   sScriptor.zip    
▲ を、右クリックしてファイルとして保存してください。


   {sScriptor}.vbe

名称変更 - 拡張子以外 可
iniファイル無しでの単独起動 - 無効
パラメータ - ナシ


   {sScriptor}.ini

名称変更 - 拡張子以外 可

iniファイル内 行書式)

{アプリケーションフルパス};{Parameter};{CallType DDE or 省略};WindowType 0 or 1;{mSec(Interval)};[Title(Memo)]


{アプリケーションフルパス} 起動したいアプリケーションをフルパスで指定
{Parameter} アプリケーションに対するパラメータを記述
{CallType} rundll32.exeほかを使用したアプリケーション起動時には DDE それ以外は指定不要
{WindowType} 0(非表示) or 1(通常)
{mSec(Interval)} 次の処理平衡するまでの時間を1/1000Sec単位で指定
[Title(Memo)] 機能には影響しない、タイトルなどのメモを記述

行頭に;セミコロン配置で、非実行行。



iniファイル例)
   C:\Applications\System Tools\ProcessorManegements\CrystalCPUID\CrystalCPUID.exe;/F22 /P1 /E;;1;4000;[CrystalCPUID]    
C:\Applications\System Tools\Desktop Extension\IconPositionControl\KH Software Factory\KH DeskKeeper\deskkeep.exe;;;1;2500;[KH DeskKeeper]
C:\Applications\System Tools\HardwareControls\Monitor Extension\CoolMonitorOff\cmoff.exe;;;;2000;[CoolMonitorOff]
C:\WINDOWS\system32\SxgTkBar.exe;;;1;3000;[SxgTkBar]
C:\Program Files\Microsoft Office\Office10\OSA.EXE;-b -l;;1;1500;[Microsoft Office]
C:\Applications\System Tools\FEP Extension\XLangBar\XLangBar.exe;;;1;1500;[X LangBar]
C:\Program Files\Windows Defender\MSASCui.exe;-hide;;;5000;[Windows Defender]
C:\Program Files\LSoft Technologies Inc\Active@ Hard Disk Monitor\DiskMonitor.exe;hide;;1;3000;[DiskMonitor]
C:\Applications\Maintenance Tools\Status Uty\Processor Information\ClockSpeed_D\ClockSpeed_D.exe;;;1;1500;[ClockSpeed D]
C:\Program Files\Common Files\Adobe\Calibration\Adobe Gamma Loader.exe;;;;2000;[Adobe Gamma Loader]
C:\WINDOWS\system32\rundll32.exe;shell32.dll,Control_RunDLL desk.cpl,,3;DDE;1;2500;[MonitorProperty DDE]
;C:\WINDOWS\system32\taskmgr.exe;;;1;2000;[TaskManeger]


ちなみにグループポリシーで登録するファイルは、

C:\WINDOWS\system32\GroupPolicy
├ Machine
│ └ Scripts
│ ├ Startup
│ └ Shutdown
└ User
└ Scripts
├ Logon
└ Logoff
に、保存するのが本来らしい、が、そうでなくても機能する。
しかし、[スタートアップ]フォルダのように、ココに直接ファイルを置いただけでは機能しない。
[管理ツール]-[グループポリシー (グループ ポリシー オブジェクト エディタ)]内の、

 [コンピュータの構成]-[Windowsの設定]-[スクリプト(スタートアップ/シャットダウン)]
 [ユーザーの構成]-[Windowsの設定]-[スクリプト(ログオン/ログオフ)]
 
に対し、任意の処理へGUIを使って登録する必要がある。
また、前述のように、既定フォルダ以外に配されている場合は、フルパスでの登録が必要となる。
って、設定がGUIになってるので、心配はナイが・・・

で、以下に、その設定画面の画像を並べてみたので参考にしてほしい。








なんか、このログ作るのに、また新たな副産物が出来てしまった・・・
おかげで、ソースを作ったままの見た目で うp出来るようになった。
と、云うのも、Bloggerの余計な処理のおかげで、preタグが思うように機能しなくてね(-_-;)

んで、今回分のソースなど・・・
    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
' Startup/ShoutdownScripting with out TestMode
'- Created by LazwardFox -

' Update 20090313 1709 パラメータ省略によるエラー処理を訂正
' Update 20090311 1634 inArray を inArrays に差し替え、必須の lArray を追加
' iniLoaderを合せて修正
' Update 20090226 1908 テストルーチン排除
' Update 20090226 1202 DDE式の記述にフラグで対応へ変更
' Update 20090226 1025 DDE式の記述に、通常呼び出しを""で囲んで対応
' Update 20090226 0630 テストモード追加
' Update 20090226 0605 ウィンドウタイプの指定と、インターバルタイム設定可能に。
' Release 20090226 0451
' Update 20090226 0346 iniファイル仕様に変更
' DevStart 20090226 0235 単純動作のみ機能

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Dim WSHShell, Fs
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル制御

'***** ↓↓↓Decralations↓↓↓ *********************************************************
Dim sTitle, artargets, iExe, sWq, rTarget, wType, sSec
Const vbWq = """"
sTitle = Fs.GetBaseName(Wscript.ScriptName)

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
arTargets = arIni(";")
If IsEmpty(arTargets) Then
Else
For Each iExe In arTargets
If IsEmpty(iExe(0)) or iExe(0) = "" Then
ElseIf iExe(0) = "" Then
ElseIf Fs.FileExists(iExe(0)) Then
sWq = vbWq
If IsEmpty(iExe(2)) or iExe(2) = "" Then
ElseIf Ucase(Cstr(iExe(2))) = "DDE" Then
sWq = ""
End If
rTarget = sWq & Cstr(iExe(0)) & sWq
If IsEmpty(iExe(1)) or iExe(1) = "" then
Else
rTarget = rTarget & " " & sWq & Cstr(iExe(1)) & sWq
End If
If IsEmpty(iExe(3)) or iExe(3) = "" Then
ElseIf IsNumeric(iExe(3)) Then
wType = Cint(iExe(3))
Else
wType = 0
End If

WSHShell.Run rTarget, wType
If IsEmpty(iExe(4)) or iExe(4) = "" Then
ElseIf IsNumeric(iExe(4)) Then
sSec = Cint(iExe(4))
WScript.Sleep sSec
Else
sSec = 0
End If
End If
Next
End If
Set Fs = Nothing
Set WSHShell = Nothing
Wscript.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
'arIni - スクリプトと同名のiniファイルがあれば、内容を配列で取得
'- Created by LazwardFox -

' Update 20090226 0330
' Update 20090223 0550 変則的フォルダ名回避のため修正
' Release 20090223 0509

Public Function arIni(lS)
Dim sNFull, rFolder, sN, iniFile
sNFull = Wscript.ScriptFullName
rFolder = Fs.GetParentFolderName(sNFull)
sN = Fs.GetBaseName(sNFull)
iniFile = Fs.BuildPath(rFolder,sN & ".ini")
If Fs.FileExists(iniFile) Then
arINI = iniLoader(iniFile,lS,0)
End If
End Function

'------------------------------------
'iniLoader - 対象をiniファイルより取得、既存iniファイルのみ指定可。
'- Created by LazwardFox -

' Update 20090311 1650 inArraysに合せて修正
' Update 20090226 1025 DDE式の記述に対応
' Update 20090226 0855 データ内にコンマを利用可能に
' Update 20090226 0356 多重配列向けに修正
' Update 20090223 0550 戻り値可変 [ 0 - 配列 ] [ 1 - lSplitterで指定した区切り文字で連結された文字列 ]
' Release 20090223 0509

Public Function iniLoader(iniFile, lSplitter, Control)
Dim nS
nS = Fs.GetFile(iniFile).size
If nS = 0 Then
iniLoader = Array(Fs.GetParentFolderName(iniFile))
Else
If IsEmpty(lSplitter) Then
lSplitter = ","
End If
Dim iFile, lResult, strResults, rL, iniLoaded
Set iFile = Fs.OpenTextFile(iniFile,1) 'iniファイルを読み取りモードで開く
WScript.Sleep 150
Do Until iFile.AtEndOfStream '読み込み
rL = iFile.ReadLine
lResult = lResult & "**" & rL & "**"
Loop
WScript.Sleep 150
iFile.Close 'Iniファイルを閉じる
strResults = Replace(Replace(lResult,"****","*"),"**","")
If Control = 0 Then
inArrays strResults, "*" & lSplitter, iniLoader
Else
iniLoader = Replace(strResults,"*",lSplitter)
End If
End If
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

'inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function

'------------------------------------
'文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function


ウチの鯖タンでは、
[HKEY_USERS\.DEFAULT] や [HKEY_CURRENT_USER] 他の
[Software\Microsoft\Windows\CurrentVersion\Run] の中身を全部移行して利用している。

コイツを使って、最速起動に繋がるBoot時のスタートアップパターンとか、見つけてみるのも一興かとw

・・・ただ、タスクマネージャだけはヤメといたほうがイイよ、最小化指定で起動すると、
起動自体は出来るケド、ウインドウとして開かなくなるからww

PowerBar(のて機やUPS接続機以外では不要)は、ココには"身"の記述無かったので、触れていない。
Dr.ワトソンも、敢えて触れずにおいている。(存在忘れてたってのが正しいが・・・)
<そのまま使えるVBscript 鯖管理 起動順序 グループポリシー スタートアップ ログオン ログオフ シャットダウン>

所詮ソノ程度か・・・


関係省庁や自動車メーカーってぇ程度でデキるコトなんてソンなモンだろうなε-( ̄ヘ ̄)┌ヤレヤレ

ITS:交通事故防止に先端情報技術、10年度実現へ - 毎日.jp [ 20090309 1434 ]

バカな御役所連中じゃ、金掛けて無用に規模の大きなハコを作りたがるキライがあるので、
こう云うハナシが出てきたら、注意して推移を見ていかないと、
JHと結託した企業らに、無駄に金を取られる結果となったETCの二の舞となるのだが、
どのくらいのイパーン人が、そう云ったコトを理解しているコトやら・・・
ま、アタマの悪いヤシらが、いくらボられようと知ったこっちゃナイけどネww

はっきり云って、普及も安易な最良策には、そんな大掛かりな設備も費用も、全く必要ない。

★ETC車載器に、WiFiとWiMAX、そしてナビと共用可能なGPSのアンテナを組み込み、
 車ごとにIPv6のUniqueアドレスを割り当てWebサーバとして機能させる。

★車同士がFONのような、WiFiのアクセスポイント 及び 中継局として機能するようにする。

★それぞれのユニット(車)が近接することで通信を開始、それぞれの移動方向を識別し、
 交差点などでの、見通し外位置の車両接近を感知し、警告を表示できるようにする。

コレだけでも、出会い頭の事故などは、カナリ減らせると云うのは、想像に易しい。
ついでに、フラッシュメモリに近接車両のIPをログするようにしておけば、
当て逃げなどの事故の際にも、犯人検挙に寄与できるだろう。

そこで更に、

★安価なUSBカムを接続できるようにし、フラッシュメモリレコーダ回路も搭載し、
 上記Webサーバ機能を利用して、ドライブレコーダ/移動Webカムとして稼動させる。
 
この、Webカム化っては、コレが以外に必須だ。
と云うのも、事故の場合、対象車両炎上などで、機材が灰になるコトもあるだろうし、
機器不良に寄る万一のレコードミスも、結構考えられる。
公開化しておくことで、何れかの他者が記録を取っているコトを期待できる。
そう云う向きを逆手にとって、バックアップとして利用するとwww
接続しているIPすべてをログとり、他のユニット(車両)と相互記録する構造なら、
そう云う折にも、事故に巻き込まれていない ないし、破損軽微な近接車両から画像やIPのログを回収できる。

また、コレはオマケだか、

★信号機や道路標識などにも同様の機能と、Webカムレコーダを追加し、
 接近車両管制(事故防止)Serverとして機能させる。

当然、近接する車両のWebカメラ画像も記録するよう構成するべきだろう。
イマドキ高価な監視カメラなど使わなくとも、高度な画像補正処理がたった1つの石だけで、
それも一瞬で出来ちまう時代だ、チャチぃ防水(赤外線撮影モード付き)Webカムと、
いくらもしないフラッシュメモリレコーダ回路を組み込むだけで、用を成す。
まぁ、コイツに関しては、管轄が警察や国土交通省になるだろうから、ひき逃げなど多々ある事故も、
税金から無駄な人件費や、貴重な時間掛けて捜査する必要性はなくなる。
コノ程度の設備への投資なら、経年換算で、役立たずに掛ける人件費よりは、余程安上がりだ。

そもそも、現在の技術なら、試行機ツクるのにも、殆ど金は必要ナイだろう。
それこそ "ひまつぶし"レベルで出来るワナΨ(`∀´)Ψ

ソノ上、それらシステムは、ユビキタスシステムの一翼を担わせることもでき、一石二鳥と云うわけだ。
以前 国を挙げてヤルと宣うてた、"日本全国隈なくインターネット環境を敷設する"ってのにも、寄与出来そうじゃネ?w
折角コスト掛けてナニかヤるなら、一石で多数の鳥をオトとせるほうが、イイに決まってる。

どうせ今後、車載ETC機は なにかしら必要な社会になってくるだろし、
JHがメーカーに対し、新車への標準搭載を要請しているらしいので、
結局、そう遠からず、要らなくても憑いてくるようになるだろう。
だったら、ココで提案したような機能が追加されてた方が、まだ実があるのではないだろうか?

コイシを流用すれば、いちいちカードを挿すタイプのETC車載器は要らんワナ。
IPv6アドレスを、ETCゲートで取得して、基幹サーバで、対象に課金すればイイだけだし、
(ココは陸運局のナンバー登録管理システムとも連携すべきだろう)
クレジットカードも要らんワナ、銀行のDebitシステムとJH基幹が連動すればコト足りる。

そう考えてみると、現行のETCなんて、ホントバカな構成のシステム組んだモノだな、JHも・・・

しかしまぁ、聴かれてもいないのに、こんな提案してやるなんて、我ながらマヌケだワ、一銭にもならんのに・・・

って、ココに挙げた例は、チョイと考えて思いついた分だけだ、引き出し開ければ案など幾らでもある。
もっとも、こんなログ、車両メーカーや関係省庁の連中が見てるとは とても思えんがねw
ま、ちったぁアタマ使って安全なクルマと交通システムを創るよう、健闘されたし。

やってもうた・・・


プロバイダ切り替えを半ば諦め、解約を保留していたGyaOに戻したまではよかったが、
うっかり、フレッツ光のCTUの設定をそのままにしてしまい、ファイアウォール周りが、
Interlink向けのままで、鯖が外部から繋がらない状態に(゚Д゚;)

宅内からでは、ケータイ使ってテストするくらいしか、
鯖内Webベースでの外部接続テストができない状態なので、すっかり忘れてた(´ヘ`;)

訂正を施し、今、ようやく接続を確認できて ひと安心w
もう、
   おきつねさまのひまつぶし http://www.okitsunesama.com    
で、問題なく繋がる・・・

・・・で、何故にプロバイダを戻したのか? 別段Interlinkの品質に不満は無かった。
が、料金を比較する上で、肝心なコトをすっかり忘れていた。

まず、このイナカでの USEN GyaO光 の場合、with Flets なので、
NTTのをすべて込みでの金額が、
サービス単価数量購入金額ご利用期間
ホームタイプ ISP月額基本料 1,16211,1621月 1日~ 1月31日 
光屋内配線使用料 2001月 1日~ 1月31日 
フレッツ・光プレミアム F利用料 3,0001月 1日~ 1月31日 
消費税218
合  計4,580
となっている。
要は、比較の考え方自体が間違っていたワケだ・・・

ここいらヘン、関東に居た時は、GyaOのマンションタイプで、
USEN側とは直接接続だったので、回線も同社(実際はダークファイバのUSEN借り上げ)だったし、
コチラでも、同社をプロバイダとして選択し、with Flets というカタチでの利用だったので、
料金においても、NTT回線介在でのネットワーク利用と云う感覚は無くなっていた・・・

とは云え過去には、インターネットって NTTの回線+プロバイダの接続サービス ってのしか
選択肢ナイ時代があったんだよね~ あまりに昔のことなので、ホンキで忘却してた・・・ ^_^;

ツマるトコ、Interlinkの場合、あの料金に、NTTの回線分が別途上乗せされるワケで、
切り替えるほどの低価格にはなり得ない・・・むしろ、NTT側の割引がない分、割高になる・・・
で、已む無く、お試し期間中だったInterlinkを断ったと・・・

ただ、USEN GyaOも、NTTの割引期間が切れるまでに、
この地域では光接続最安値の BBIQ へ切り替えるコトも検討している。

アソコも最近は、"鯖キンシ"なんつ~ボケたコト云わなくなったらしいし、
PPPoEギライの当方だが、結局NTTも同じ処理だし、だったらBBIQ選択しないテはナイよな・・・

関東圏でUSEN選択したのは、むしろ価格よりも、光LANをそのまま敷設し、
キホンでIPを8個割り振られるってコトに魅力を感じたコトが要因として大きかった。
(その割には安かったのだが^_^;)
で 以前、USENに問い合わせたみたのだが、どうやらもう、イナカでは自社回線の増設はヤル気ナイらしい・・・
光接続を全国の家庭に ってフレ込みで立ち上がった事業だったような気がしたのだが・・・
志が微妙になってしまっている現状、USENもオワタか?