魔界の仮面弁士 さん 2003年 10月 02日 10時 47分 15秒

> CLOWN さん
構文から察するに、それは HTA か HTML での記述ですよね。
であれば、WScriptオブジェクトは使えません。

WScriptが使えるのは、*.WSFファイルで実行する場合や、
*.VBSを Wscript.exe で実行する場合などに限られます。

WScript.CreateObject の 替わりに、CreateObject を利用してください。
また、WScript.Echo に関しては、textareaエレメントへの出力や、
MsgBoxでの表示を使うことで、代用する事ができるでしょう。


> やりたい内容は、セキュリティ対策のため
> サービスパックなどが最新のものか
本題とは離れますが、HFNetChkでは不十分でしょうか?

MicrosoftやShavlikから、最新パッチ情報(xmlデータ)を
ダウンロードして、それと比較する事で、未適用のパッチの
一覧も作成してくれますよ。

CLOWN さん 2003年 10月 01日 00時 51分 45秒

こんにちは、CLOWNと申します.
VBScriptをならいはじめており、
質問があり掲示板に書き込みしております.

やりたい内容とその解決方法お分かりになる方
いらしたらご教授いただければ幸いです.

やりたい内容は、セキュリティ対策のため
サービスパックなどが最新のものかレジストリの
情報を参照し、その結果をHTMLで記述したく
思っております.

下記内容(レジストリのキーは適当ですが)を
調べて自分なりにアレンジしたのですが、
結果として「オブジェクトがありません WScript」
とエラーを返してきます.

どこか記述に間違いがあるのでしょうか?
(また、他の方法があれば教えてください)

何卒宜しくお願い致します.

<head>
<script language="VBScript">
<!--
Sub showinfo
dim Sh
set Sh = WScript.CreateObject("WScript.Shell")
key1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\"
WScript.Echo Sh.RegRead(key1 & "SP2\KB821557\Description")
End Sub
-->
</script>
</head>
<body onload="showinfo">
</body>

キノ さん 2003年 09月 30日 11時 39分 51秒

いりやさん

レスありがとうございました。
いやはや、RDBMSもSQLも詳しく触れたことがない今の状態では
不本意ながらやろうとしている事のハードルが高すぎて
今の自分の手には負えないレベルなのかも知れません...

わざわざ教えてもらっておきながら、
こちらのレベルの低さによりヒントを使いこなせず申し訳ありませんm(__)m

いりや さん 2003年 09月 29日 11時 33分 28秒

のぶこさん,

JavaScript (Microsoft JScript) については私がいつも参考にしているサイ
トがあります。

AYA さん,趣味のJavaScriptなページ by AYA
http://member.nifty.ne.jp/aya/index.htm

こちらの WSH 1.0 に Excel をあやつるサンプルスクリプトが掲載されてい
ます。(下記の 6, 18 番)

Windows Scripting Host
http://member.nifty.ne.jp/aya/wsh/wsh_frm.htm

ご参考まで。

いりや

のぶこ さん 2003年 09月 29日 09時 25分 46秒

いりやさんレスありがとうございます。
頑張って理解してみたいと思います。

いりや さん 2003年 09月 26日 18時 31分 39秒

のぶこさん,

はじめまして。いりやと申します。

> VBScriptで次のようなことが出来るのかご助言ください。

> 入力ファイルを読み込み、
> 出力ファイルに書き出し、
> マクロを実行する。
>
> この繰り返しをSheetを増やしながら行う。

エクセルとの連携はこれまで一度もやったことがなかったので,よい機会で
すのでちょっとかいてみました。

インターネット上に掲載されている VBA の解説をみながら Component
Object Model の仕様を推測しながら WSH/JScript (JavaScript) +
Microsoft Excel 2000 の組み合わせでやってみました。

VBScript へのポーティングについては私はちょっとよく分かりませんのでこ
ちらの掲示板をお読みの有識者におまかせします。。


[ スクリプトの解説 ]

generate.js

入力ファイルを生成するスクリプトです。

カレント・ディレクトリに input.txt という名称でファイルを作成します。
フォーマットはのぶこさんのイメージに近づけてあります。(が,同一かど
うかは分かりません)

transfer.js

エクセルへのデータ転送を行うスクリプトです。

必要なシート数を用意して転送します。.xls ファイルとして保存する前まで
を実現しています。マクロも実行していません。


[ 準備 ]

全角スペースを半角スペース 2 文字に置き換えてそれぞれ上記のファイル名
称で保存します。


[ 実行の仕方 ]

(1) generate.js をダブルクリックします。

  input.txt が生成されることを確認します。

(2) transfer.js ファイルのアイコンに,input.txt ファイルのアイコンを
  ドラッグ&ドロップします。

  そうするとデータ転送がはじまります。

[ Source code (generate.js) ]

// ここから

var outputFileName = '.\\input.txt'; // file path
var nSheet = 5; // A number of worksheets
var nRow = 5; // A number of rows in a worksheet
var nColumn = 10; // A number of columns for each row

generateTestData(outputFileName, nSheet, nRow, nColumn);

function generateTestData(outputFileName, nSheet, nRow, nColumn) {
    var writeStream = file→writeStream(filepath→file(outputFileName));
    if (writeStream != null)
        try {
            generateTestData2(writeStream, nSheet, nRow, nColumn);
        } finally {
            writeStream.close();
        }
}

function filepath→file(filepath) {
    var aFileSystemObject = new ActiveXObject('Scripting.FileSystemObject');
    if (!aFileSystemObject.fileExists(filepath))
        aFileSystemObject.createTextFile(filepath, true); // 2nd arg : overwrite
    return aFileSystemObject.getFile(filepath);
}

function file→writeStream(file) {
    var ForWriting = 2;
    var TristateUseDefault = -2;
    return file.openAsTextStream(ForWriting, TristateUseDefault);
}

function generateTestData2(writeStream, nSheet, nRow, nColumn) {
    var initCellFunc = function (sheet, nRow, nColumn) {
        for (var r = 0; r < nRow; r++) {
            var row = new Array();
            for (var c = 0; c < nColumn; c++) {
                var cell = String.fromCharCode(65 + c) + (r + 1).toString();
                row.push(cell);
            }
            sheet.push(row);
        }
    }
    var genSheetFunc = function (nRow, nColumn, initCellFunc) {
        var sheet = new Array();
        initCellFunc(sheet, nRow, nColumn);
        return sheet;
    }
    var dumpSheetFunc = function (sheet, name, writeStream) {
        writeStream.writeLine(name);
        for (var r = 0; r < sheet.length; r++) {
            writeStream.writeLine(sheet[r].join(','));
        }
    }

    var nameArray = new Array();
    for (var i = 0; i < nSheet; i++)
        nameArray.push('Sheet_' + i);

    var sheetArray = new Array();
    for (var i = 0; i < nSheet; i++)
        sheetArray.push(genSheetFunc(nRow, nColumn, initCellFunc));

    for (var i = 0; i < sheetArray.length; i++)
        dumpSheetFunc(sheetArray[i], nameArray[i], writeStream);
}

// ここまで

[ Source code (transfer.js) ]

// ここから
if (! WScript.arguments.length > 0) {
    WScript.echo('ファイルをドラッグ&ドロップしてください!');
    WScript.quit(1);
} else {
    for (var i = 0; i < WScript.arguments.length; i++) {
        transferToExcel(WScript.arguments.item(i));
    }
    WScript.echo('完了しました!');
}

function transferToExcel(inputFileName) {
    var readStream = file→readStream(filepath→file(inputFileName));
    if (readStream != null)
        try {
            transferToExcel2(readStream);
        } finally {
            readStream.close();
        }
}

function transferToExcel2(readStream) {
    var parseFileFunc = function (readStream, sheetArray, nameArray) {
        var sheet = null;
        while (!readStream.atEndOfStream) {
            var s = readStream.readLine();
            if (/Sheet_[0-9]+/.test(s)) {
                nameArray.push(s);
                if (sheet != null)
                    sheetArray.push(sheet);
                sheet = new Array();
            } else {
                var row = s.split(',');
                sheet.push(row);
            }
        }
        sheetArray.push(sheet);
    }
    var transferSheetFunc = function (sheet, name, worksheet) {
        for (var r = 0; r < sheet.length; r++) {
            var cells = sheet[r];
            for (var c = 0; c < cells.length; c++)
                worksheet.cells(r + 1, c + 1).value = cells[c];
        }
    }

    var initExcelFunc = function (sheetArray, nameArray) {
        var excel = new ActiveXObject('Excel.Application');
        excel.visible = true;
        excel.workbooks.add();
        var nSheet = excel.worksheets.count;
        var nCurrentSheet = sheetArray.length;
        if (nCurrentSheet > nSheet) {
            for (var i = 0; i < (nCurrentSheet - nSheet); i++)
                excel.worksheets.add();
        }
        for (var i = 0; i < sheetArray.length; i++)
            excel.worksheets(i + 1).name = nameArray[i];
        return excel;
    }

    var sheetArray = new Array();
    var nameArray = new Array();
    parseFileFunc(readStream, sheetArray, nameArray);
    var excel = initExcelFunc(sheetArray, nameArray);
    for (var i = 0; i < sheetArray.length; i++)
        transferSheetFunc(sheetArray[i], nameArray[i], excel.worksheets(i + 1));
}

function filepath→file(filepath) {
    var aFileSystemObject = new ActiveXObject('Scripting.FileSystemObject');
    if (!aFileSystemObject.fileExists(filepath))
        aFileSystemObject.createTextFile(filepath, true); // 2nd arg : overwrite
    return aFileSystemObject.getFile(filepath);
}

function file→readStream(file) {
    var ForReading = 1;
    var TristateUseDefault = -2;
    return file.openAsTextStream(ForReading, TristateUseDefault);
}

// ここまで

さん (nobu1966@moon.co.jp) 2003年 09月 26日 09時 12分 00秒

VBScriptで次のようなことが出来るのかご助言ください。

入力ファイル = input.txt (普通のテキストファイル)
出力ファイル = output.xls (マクロの仕込んだエクセルファイル)

入力ファイルを読み込み、
出力ファイルに書き出し、
マクロを実行する。

この繰り返しをSheetを増やしながら行う。

入力ファイルのフォーマットは次のような感じです。

sheet_1
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・



sheet_2
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・



sheet_n
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・




新しいSheetの始まりはSheet_番号で
Sheet_番号がそのままSheet名になります。
Sheet_番号は始まりを認識するキーであり
書き出しは行われません。
A1〜L4は可変でカンマで区切られています。

初心者で右も左も分からずに困っています。
C言語の経験は若干あるのですが・・・
何卒どうぞよろしくおねがいします。

のぶこ

いりや さん 2003年 09月 25日 19時 40分 16秒

mac2 さん,

ぜひ全世界のリソースを活用していきましょう。特にプログラムの場合,
文章が文字化けしていてもソースコードは何とか解読できますから利用
しない手はありません。

もっともサンプルは所詮サンプルですので,外部仕様にかんしては,か
ならずソフトウェアベンダのサイトで裏取りすることが肝要かとおもい
ます。Microsoft 社の msdn は,そういったベンダの提供する情報源と
しては相対的に高いと最近感じています。

いりや

いりや さん 2003年 09月 25日 19時 33分 40秒

panchi さん,

そうでしたか。がんばってください!

一つリンク情報を。

mbx2mbox
http://mbx2mbox.sourceforge.net/

米国の David Coppit さんが作られた GPL ライセンスの dbx ->
mbox 変換ソフトウエア (Perl) です。

あとこのページには別のアプローチが紹介されており楽しめます。
VBScript を使った例題などニヤっとしちゃいました。

http://mbx2mbox.sourceforge.net/outlooktechniques.htm
http://www.usethesource.com/articles/02/06/17/1957223.shtml

ご参考まで。

いりや

panchi さん 2003年 09月 25日 15時 32分 12秒

 いりやさん、ありがとうございました。

 変な書き込みをしてすいません。

> 単純に dbx フォーマット (MS Outlook Express 5.0 のメール) のデータ
>を変換さえできればよい、ということであれば最近は変換ツールがフリー
>でも出回っているようです。そちらの検討をおすすめします。

 最初はそう思ったのですが、仕事でこうしたものを作ると言うことにきまって
しまったので、市販のものを使えないのです。。。

 

>C++ に関する話であればそちらの BBS で投函されるのがいいかと思います


 はい。大変すいませんでした。

mac2 さん 2003年 09月 25日 14時 22分 07秒

いりやさんありがとうございます。

思うように出来ました。
英語が全くできない私はgoogleの検索で日本語のページで
検索していました。

いりやさんとこのサイトに感謝します。

いりや さん 2003年 09月 25日 11時 47分 58秒

panchi さん、

C++ に関する話であればそちらの BBS で投函されるのがいいかと思います


単純に dbx フォーマット (MS Outlook Express 5.0 のメール) のデータ
を変換さえできればよい、ということであれば最近は変換ツールがフリー
でも出回っているようです。そちらの検討をおすすめします。

例えば、SAXMAN さんの OE5Conv Ver.1.31 は dbx → mbox です。
http://www.interq.or.jp/mars/saxman/freesoft.htm

いりや

いりや さん 2003年 09月 25日 11時 12分 47秒

まりさん、

すみません、投稿者があて先になっておりました。

> APIでごちゃごちゃやるよりShell.Applicationでできそうですね

のようです。Shell.Application オブジェクトの行く末が心配ではありま
すが、適度に Win32 API を包んでくれたものを利用するのは悪くない選
択だと思います。ソースコード付きで提供されていないのでデバッグに
苦労することもたまにありますけどね。(^^:

いりや

まり さん 2003年 09月 25日 06時 16分 17秒

>まりさん さん
ありがとうございますm(..)m
早速調べて見ます。

>いりや さん

ありがとうございますm(..)m

APIでごちゃごちゃやるよりShell.Applicationでできそうですね(*^^*)
(↑最近APIが楽しくなってなんでもAPIで済ませたいと思ってたりゥァヒ

Shell.NameSpaceでネットワーク系を探してるみたいですねゥ・
とにかく、WMIは便利とゆうことで(^^)
WSH系の人にとっては当たり前だったり?

panchi さん 2003年 09月 25日 05時 19分 24秒
URL:dbx→csv変換

 はじめまして。bdxのことについて調べていたらココにたどり着きました。
どうかお知恵を貸してください。


 今 自分がしたいことは、
  *.dbxファイルを解析し、csvに「件名,送信者,本文」として落としたい
のです。

 そこで*.dbxファイルを解析する必要がでてきました。http://oedbx.Aroh.de/のソースを
動かしてみて、サンプルがどのように動くのか検証してみたのですが、うまく
動きません。

 http://oedbx.Aroh.de/ のHPより、ソースをDLしてきて、VC++で、
  1.DLLを作成した
   cppsourcecode/library/*.cppをコンパイルし、
   ”AS_OEDBX_DLL.dll”という名前でDLLを作成しました

  2.oedbx/cppsourcecode/examples/ex1.cppを
   @ コンパイルした
   A libを取り込みビルドした

  ここまではいいのですが、どうしてもここからさきがうまくいきません。


  VC++の[ビルド]→[実行]をクリックすると、新しいダイアログがでてくる
 のですが、[ファイル]→[開く]で、*.dbxを指示しても、何の変化もありません。


 ずばり、
  1.ex1.cpp を 実行するとどういう動きをするのか?
  2.*.dbxから一通一通メールを読み出したいのですが、
   http://oedbx.Aroh.de/のソースを使ってどのように
   つかえばいいのか?


 なにぶんVC++及びC++の経験が乏しいのですが、
 DBX→CSV変換という処理を行わないといけないので、
 何かご存知でしたら、教えて頂けないでしょうか?


いりや さん 2003年 09月 25日 03時 26分 45秒

まりさん、

> Atmark IT (@IT) の掲示板のスレッドはなかなか参考になるかと。

dzsws30 さんの 2003-05-09 11:47 さんと matlab さんの 2003-06-11 14:00
の回答など。

いりや さん 2003年 09月 25日 03時 21分 55秒

mac2 さん、

"WMI Administrators,group remove" を google に与えてみたらいかがでしょうか??

Torgeir Bakken (MVP) (Torgeir.Bakken-spam@hydro.com) さんが、
"Finding users in local admin groups" という表題のスレッドで、非常に
参考になるスクリプトを紹介されています。

いりや

まりさん さん 2003年 09月 25日 02時 56分 00秒

"WSH ローカルエリア接続" を google に与えてみたらいかがでしょうか??

Atmark IT (@IT) の掲示板のスレッドはなかなか参考になるかと。

いりや

まり さん 2003年 09月 25日 00時 39分 15秒

こんにちわ。

開発環境:VB6.0です。

[スタート]⇒[設定]⇒[ネットワークとダイヤルアップ接続]⇒[ローカルエリア接続]をVBで起動したいのですが、どうすればいいでしょうか?
LANが2ついて、事情があって一つの常駐ソフトを起動しているときは1個のLANを
落とさなければならなく、たま〜にもう一方のLANも立ち上げなければならないので、
有効にしたり無効にしたりしたいんです。
【vb ネットワーク接続 api】 などでググってみたのですがなかなかHITしません(T_T)

>http://www.nsgd.co.jp/nsd/NSDGoods/msvb_fn/msvb_fn_05dialog.htm
>「ネットワーク接続と切断のダイアログ等を表示できます。」
このシェアウェアのソフトのようなものを使わなければ無理かなぁゥ・
それを常駐ソフトに組み込みたいです。
ヒントを下さい(ToT)

mac2 さん 2003年 09月 24日 20時 03分 50秒

何とか自分で調べて解決しようとはしているのですが
どうしてもわからないので教えてください。

WinXpProで、あるユーザ(User01)に管理者権限を与え
その後ソフトをインストールした後(手作業)、管理者権限を削除したい。

・User01に管理者権限を与える
Set usr = GetObject("WinNT://" & PCName & "/Administrators,group" )
usr.Add("WinNT://" & PCName & "/" & "User01)
usr.SetInfo
Set usr = Nothing
で出来ました。
・User01に管理者権限を削除する
usr.Add("WinNT://" & PCName & "/" & "User01)
AddをDeleteにすればできるのでは・・・と思ったのですが。。

何度もすみません。教えてください。

いりや さん 2003年 09月 24日 19時 46分 55秒

LIKE 演算子の解説

msdn, Platform SDK: Windows Management Instrumentation, LIKE Operator
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/like_operator.asp

いりや さん 2003年 09月 24日 19時 43分 23秒

キノさん,

ExecQuery() メソッドに与えてやる問い合わせ (Query) として
WMI Query Language (WQL) という RDBMS でお馴染みの SQL のサ
ブセットが構文規則として与えられています。

具体的には WHERE 句の LIKE 演算子を使用するとパタン・マッチ
が利用できます。

この演算子で表現できる以上の条件を与えたい場合は,得られたコ
レクションをもう一度吟味するための手続きを ExecQuery() メソッ
ドの外で用意する必要がありそうです。例えば WSH/JScript や
WSH/VBScript の正規表現オブジェクトを利用するなど。

Microsoft 社の WQL の構文については次を参照ください。

msdn, Platform SDK: Windows Management Instrumentation, Querying with WQL
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/querying_with_wql.asp

msdn, Platform SDK: Windows Management Instrumentation, SQL for WMI
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/sql_for_wmi.asp

いりや

キノ さん 2003年 09月 24日 17時 58分 06秒

こちらはWSHに詳しい方が多いようなので質問させてください

当方、現在スクリプトで作ってみたいネタを抱えているんですが、
今現在自分のレベルが低いために進まなくなってしまっているものがあるのです。

http://www.microsoft.com/japan/msdn/thisweek/wmi/koj990811.asp
のURLにある”リスト3: 特定プロセスの終了”をベースにして、
ネットワーク上の全端末の特定アプリを落とすのを作りたいのですが、
そのアプリを”正規表現によるプロセス検索”で指定したいのです。
(例リストでは”notepad.exe”の所を、”A[A-Z0-9]*EXE”みたいな形で)

こういう指定方法って難しかったりするのでしょうか。
また、プロセスではなく、タスクを指定して落とすって言うのは可能でしょうか。


ひとみん さん 2003年 09月 24日 14時 39分 54秒

いりやさん

ありがとうございます!
さっそく試してみます^^

mac2 さん 2003年 09月 24日 14時 19分 02秒

いりやさんレスありがとうございます。
うまく出来ました。本当にありがとう
ございました。
ほかのも「GetObject("WinNT://」で
検索してみます。

いりや さん 2003年 09月 24日 12時 26分 52秒

mac2 さん,

google.com で "GetObject("WinNT://" という単語を入れて検索し
てみたら,こんなサイトを発見しました。

Richard Gooddie さんがこさえた Visual Basic のコードですが
WSH/VBScript でも利用できそうな気がします。

ITtoolbox Visual Basic Code Exchange
http://visualbasic.ittoolbox.com/code/d.asp?d=2255&a=s

// 引用開始
' ----------------------------------------------------------------
' Function: Rename the existing account
' ----------------------------------------------------------------
Function RenameAccount(DomainName,Server,OldUserName,NewUserName)

Dim User
Dim Container

Set Container = GetObject("WinNT://" & Server & ",Computer")
Set User = GetObject("WinNT://" & Server & "/" & OldUserName & ",user")

Call Container.MoveHere(User.ADsPath, NewUserName)

RenameAccount = True

End Function

// 引用終了

いりや

追伸 google 恐るべし。こんな粗い検索条件でよく探し出してく
るわ。。

mac2 さん 2003年 09月 24日 08時 47分 12秒

いりやさんレスありがとうございます。

私もmsdnはみていたのですが、ほとんどがActive Directoryについての
記述でローカルユーザについての記述がほとんどありませんでした。

ローカルユーザの追加は
Set dom = GetObject("WinNT://PCNAME")
dom.Create("user","user01")

で出来ました。削除も「Create」を「Delete」に変更するとできるようです。
変更も「Create」を何かに変えることで(RenameとかUpdate等)で出来るのでは?
という予想をしたのですがだめでした。

Active Directoryのユーザなら「sAMAccountName」を書き換えればいいような
気がしますが、ローカルユーザはどうすればいいでしょうか?



いりや さん 2003年 09月 23日 22時 59分 31秒

mac2 さん、

msdn でそれらしい記述を発見しましたのでとりいそぎ。

http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/compmgmt/default.asp
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/user/default.asp

mac2 さん (t.ishii@ougis.co.jp) 2003年 09月 23日 22時 37分 41秒

WindowsXpProをWSHを使って設定やレジストリを変更する
プログラムを作っています。いろいろ調べているのですが
どうしても判らないところが2点あります。

1.ローカルユーザ名の変更
  ローカルユーザの追加/削除は出来たのですが変更が
  できません。


2.コンピュータ名とワークグループ名の変更
  WSHで出来るのでしょうか?


余談ですが皆さんが参考にされている書籍等
あれば教えてください。

いりや さん 2003年 09月 23日 11時 38分 40秒

レンさん、

こちらの過去ログに、レンさんと同じように IP Address を取得する方法に関す
る議論がありました。新しく DHCP サーバが払い出した IP Address をある FTP
サーバに伝える (ファイル経由で ftp put する) ことが目的だったそうです。

ポインタ情報をご紹介します。

http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list88.shtml

  88-34 迷い人 さん    2003/07/26 09:42 (★1)
  88-32 あさじゃけん さん 2003/07/25 09:54 (★3)
  88-31 迷い人 さん    2003/07/25 00:42

色々と皆さん模索されているようです。

コマンドプロンプトから実行するコマンド (ipconfig など) の出力結果から取
り出したり (★1) 、Windows Management Instrumentation (WMI) のサービスを
利用したり (★2) 、Winsock を利用 (★3) する方法など。

★2, msdn, スクリプトセンタ, IP 設定情報の取得
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/network/scrnet06.asp


それから、環境変数へのアクセスについては Windows Scripting Host が標準で
提供しているクラスがあります。むたぐちさんの解説と msdn をお知らせします
ので取り組んでみてください。

むたぐちさん, WshEnvironmentオブジェクト
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/environment.htm

Windows Script Host, WshEnvironment オブジェクト
http://www.asia.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsobjwshenvironment.asp

いりや

レン さん 2003年 09月 22日 17時 01分 26秒
URL:現在のIPアドレスをWindowsの環境変数に書き込むスクリプトを作成したい

こんにちは、これからWSHに挑戦しようと思います。
作りたい物は現在のIPアドレスをWindowsの環境変数(%ipaddress%など)に書き込むものです。
どのように作成すればいいでしょうか? 
1.現在のIPを取得する方法
2.そのIPを環境変数ipaddressに書き込む方法
ヒントでも良いのでよろしくお願いいたします。

いりや さん 2003年 09月 19日 18時 58分 51秒

ひとみんさん、

むたぐちさんの

http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell2.htm

の Shell.Application>>ShellExecute sFile [,vArguments] [,vDirectory] [,vOperation] [,vShow]
メソッドを利用すれば「引数の渡し方」についてはご所望の結果
が得られるのではないのかな、と思います。お試しください。

ひとみん さん 2003年 09月 19日 13時 56分 01秒

すいません、VBのExeを起動する事はできたのですが
今度はASPからVB側に引数を渡したいのです。
引数の渡し方、又、VB側でどうすれば引数を使用できるのかを
御教授ください。
よろしくお願いします。

ひとみん さん 2003年 09月 17日 17時 39分 15秒

すいません、質問です。
ASPからVBのExeを起動する為にWSHを使用しようと思っているのですが、
アプリケーションの初期化に失敗しました。というエラーが出て
Exeが起動できません。

Set WshShell = Server.CreateObject("Wscript.Shell")
rc = WshShell.Run("C:\asp\kondate\exe\printout.exe", 1, FALSE)

という風に書いているのですが・・・
原因がもしわかればご教授ください。
よろしくお願いします。

管理人むたぐち さん 2003年 09月 17日 08時 32分 58秒

先日からIE・IEコンポーネント使用のタブブラウザを止めて、Netscape7.1を使い始めました。
ついでに2chブラウザもかちゅーしゃをやめて、OpenJaneDoeという、非IEコンポーネント使用
ブラウザを使い始めました。
というのも、次から次と涌いてくる、IEの致命的なセキュリティホールに
うんざりしたためです。

ActiveX・COMの世界にどっぷり浸かっているお前が何を言うんだという突っ込みも
あるでしょうが、

スラッシュドット ジャパン | IEに多数の未パッチのセキュリティ欠陥が新たに発覚
http://slashdot.jp/security/03/09/14/0938229.shtml?topic=41

こういうのを見るとさすがに気持ち悪くなりませんか?

スキーマの解釈およびセキュリティゾーンのバグは、まあいつものことなので
修正してもらえらばいいんですけど、私が驚いたのは、MSXML2.XMLHTTPが
インターネットゾーンでもセキュリティ警告なしでCreateObjectできてしまう仕様です。
これ知らなかったです。

良く考えれば、WSHやHTAのためだけにわざわざこのコンポーネントが存在する
訳はないので、こういう仕様であって当然なわけですが。
もっとも、インターネットゾーンでは他ドメイン(もちろんローカル含めて)の
ウェブサーバーにはconnectできない仕様にはなっているんですが、前述のバグを
使えばこれが可能になるということです。さんざんXMLHTTPを使ってきた私が
言うのもなんですが、こんな危険なコンポーネントがクライアントサイドのスクリプトから
呼ばれるのは堪りません。(危険だからこそ、WSHなどから使うと強力なわけですがね)

というわけで、WebブラウジングにIEを使うのは当分(少なくともIE7が出るまでは)
やめることにしました。
HTAやらhttやらHTMLヘルプやらWSHから呼び出すコンポーネントとしてのIEやらは
これまで通り使いますけど。あ、あとWindowsUpdateにもw

さて、移行することにしたNetscape7.1ですが、これは思った以上に完成度が上がっていました。
Netscapeって起動は遅いし、何か表示が汚いし、リサイズするとリロードするし使えんなー
というのが個人的な印象だったのですが、いつのまにか随分垢抜けていました。
起動が重いのは、常駐機能がつくことでカバーされています。まあ、IEだってOSの起動に
紛れて常駐してますし、これはアリでしょう。ページの表示はIEより早いくらいだと思います。
あと、画像の縮小が綺麗だったり、ポップアップ抑止機能があったりと、色んなところで
IE6より優れてる(ことを必死でアピールしようとしてるのが、一つ一つの機能から伝わって
くるのがあれですけど)と思います。

しかもいつのまにかタブブラウザになっていました。Donut系タブブラウザを愛用していた
だけに嬉しい機能です。
しかし、target=_newなリンクを開くと何故か別ウィンドウで開いたりして、
デフォルトでは使い勝手はあまりよくありません。他にもホイールのオートスクロールが
機能しなかったり、検索バーがなかったりして、Donut系タブブラウザの機能性には
到底及びません。

そこで役に立つのが、ユーザー有志が作成したコンポーネント(*.xpi)です。

outsider reflex
http://white.sakura.ne.jp/~piro/

このサイトでダウンロードできる「タブブラウザ拡張」を使うと、Donut系タブブラウザと
ほぼ同等の機能を持たせることができます。しかも柔軟なカスタマイズが可能なので、
これははっきり言って必須コンポーネントでしょう。

また、同じくこのサイトの「コンテキストメニュー拡張」も合わせて使用すると最強です。
IEではレジストリ編集+外部HTML(JavaScript/VBScript)によりコンテキストメニューを
追加できますが、これと同等のことができるようになります。というか、設定ダイアログ
から簡単に登録・編集が可能なので、IE以上の操作性かもしれません。
とりあえず私は、「クリップボードにタイトルとURLをコピー」というカスタム
スクリプトを登録しました。詳しくは説明しませんが、「短縮構文」を使うことで
実に簡単に作れます。こんなんです。

_setClipBoard(_window.document.title + "\n" + _window.location.href)

タブブラウザと言えば検索バーがつきものですが、これはGoogle Toolbarのクローンである
Googlebarが使えます。

mozdev.org - googlebar: index
http://googlebar.mozdev.org/

個人的には、タブブラウザの検索バーよりGoogle Toolbarの方が好きだったので、
より近い操作性が得られるGooglebarが利用できるのはとてもありがたいです。
検索エンジンを指定したりはできないみたいですが、Google以外あまり使わないので
私にはこれで十分です。

ホイールのオートスクロールがデフォルトでできないのはちょっとびっくりしましたが、
これもちゃんとXPIがあります。

mozdev.org - autoscroll: index
http://autoscroll.mozdev.org/

あと、Irvineのmozillaフォルダに入ってるirvine.xpiを使えば、コンテキストメニューに
Irvineの機能を組み込めます。

私は使わないのですが、マウスジェスチャーの機能を組み込んだりもできます。

mozdev.org - optimoz: gestures/installation
http://optimoz.mozdev.org/gestures/installation.html

これで大体、Donut系ブラウザとほぼ変わらない快適なWebブラウジング環境ができあがりました。
これにProxomitron(ローカルプロキシサーバー。httpヘッダーやHTMLに様々なフィルタが
かけられる)を通せば、最早敵なしです。あとはお好みのテーマを落としてきて飾り付けしてください。

と言うわけで、Netscape7.1の薦め でした。

いりや さん 2003年 09月 16日 19時 17分 40秒

yu-mi さん,

こういう時には検索エンジンを使って粗い検索条件でヒントを得るとよい
です。例えば,www.google.com で,JSP JavaScript という検索語をいれ
てみると,yu-mi さんと同じ質問をなさっている方がたくさんいらっしゃ
るのがわかります。

例えば,
http://chaichan.hp.infoseek.co.jp/qa3000/qa3448.htm
のスレッドや
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp01.html
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp02.html
などのレクチャなど。

少しずつ問題の輪郭が明確になってくると,違った見方ができるように
なり議論がふくらむとおもいますので!

いりや

追伸



yu-mi さん (palmcove@mx14.freecom.ne.jp) 2003年 09月 16日 18時 09分 35秒

私はJava初心者です。
分からないことがあるので、単刀直入に質問を書きます。
JSPの中で宣言した変数の値をJavaScriptの中の変数に入れるには
どーしたらいいのですか???
単純に…
<% String a = "abc" %>
...
function jsScrip(){
var x = "<%= a %>";
}
これではxに値が入らないようです。
宜しくお願いします。

mappy さん (mappy33@h9.dion.ne.jp) 2003年 09月 15日 20時 19分 54秒

はじめまして。スクリプトについて質問があります。私は技術的なことはさっぱりなんです。最近PCを起動するとウィンドウズ スクリプト ホストという表示で「WhislerCompatibleMode_1288.js」が見つかりませんという表示がでます。288の部分は他の数字になっていることもあります。今までこんな表示はでなかったのに。×をクリックして表示を消したあとは普通にPCは動いてるのですが、気になって仕方ありません。これはいったいなんですか?できましたら対策等についてメールで送っていただければ幸いです。お願いします。

セレナ さん 2003年 09月 15日 09時 00分 59秒

管理人さん

すごい、ばっちりです。とても助かりました。回答ありがとうございました。

masano さん 2003年 09月 13日 21時 58分 30秒

管理人さん、回答ありがとうございます。
"三つ目の引数にTrueを指定すると、hogehoge.exeが終了するまで"
レッスンにありましたよね。順番に同時起動をしたいので、この場合
マルチに起動してくれませんね。
WScript.Sleepメソッドを勉強して、一度使ってみます。
ありがとうございました。


管理人むたぐち さん 2003年 09月 12日 23時 09分 41秒

To: pon さん

> 用は、このようなアクセス権のないフォルダに関しては、
> 無視してスクリプトが続行できればいいのですが。

それならOn Error Resume Nextを使って、エラーをトラップしてやるだけで
いいんじゃないでしょうか。


To: BA さん

ADOは良く分からないので、詳しい方お願いしますです。


To: WS さん

> WSHを使用して、イベントログに記述されている情報を読み込みたいのですが、

WMIのWin32_NTLogEventクラスを使えば可能です。
↓cscript.exeで実行してください。

For Each oEvent In GetObject("winmgmts:").InstancesOf("Win32_NTLogEvent")
WScript.StdOut.WriteLine oEvent.TimeGenerated & vbTab & oEvent.Message
Next

条件の絞込みなどもできますので、詳しくは"Win32_NTLogEvent"で調べてみてください。


To: たぬきうどん さん

> OSはWindows98、ドメインに参加している
> PCです。このPCのログオンサーバはどのようにしてゲットすればよいですか。

昔、同じ質問に回答してましたのでそちらを参照してください。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list54.shtml
(2001年 12月 07日 02時 05分 00秒の記事)


To: セレナ さん

> WSHで、ネットワークとダイヤルアップ接続を操作してNICを無効にしたり、有効にしたりするには

昔、同じ質問に回答してましたのでそちらを参照してください。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list54.shtml
(2001年 12月 07日 02時 05分 00秒の記事)

# 偶然同じ日に回答してました。


To: masano さん

> そこで、1つ目を実行してからウエイトをして、次を実行するような事は
> できないでしょうか?

WshShell.Run "hogehoge.exe",1,True
のように三つ目の引数にTrueを指定すると、hogehoge.exeが終了するまで
次のステートメントの実行を待たせることができます。

また、それ以上に待ち時間が欲しければ、
WScript.Sleepメソッドを使うと良いでしょう。

VAV さん 2003年 09月 12日 22時 18分 52秒

いりやさん、

回答ありがとうございます。

勉強共々使わせていただきます。m(__)m


masano さん 2003年 09月 12日 21時 34分 42秒

御世話になります。
簡単な事かもしれませんが、教えてください。
あるプログラムを順番に実行したいのですが、上手くいきません。
そこで、1つ目を実行してからウエイトをして、次を実行するような事は
できないでしょうか?
よろしくお願いします。

セレナ さん 2003年 09月 12日 19時 55分 03秒

はじめまして、セレナです。

WSHで、ネットワークとダイヤルアップ接続を操作してNICを無効にしたり、有効にしたりするにはどのようにすればよいでしょうか。どなたかご教授ください。

たぬきうどん さん 2003年 09月 12日 17時 32分 07秒

WSHを使ってVBスクリプト書いてます。OSはWindows98、ドメインに参加している
PCです。このPCのログオンサーバはどのようにしてゲットすればよいですか。
OSがWindowsNT4.0+SP3(?)以上なら確か、環境変数%logonserver%で取得できる
のですが。

いりや さん 2003年 09月 12日 12時 34分 08秒

VAV さん,

> ファイルのプロパティを表示させるVBSスクリプトを教えて下さい。

VBScript ではなく JScript ですがポーティングはそんなに難しく
はないと思います。こんな書き方がたとえば出来ますよ,というこ
とで,
  ・invokeVerb() メソッドの利用例
  ・invokeVerb() メソッドの引数に与えてやるコマンド名の列挙
の二つをご紹介します。

//
// invokeVerb() メソッドの利用例
//

var aShellApplication = new ActiveXObject('Shell.Application');
var aFolder = aShellApplication.nameSpace('c:\\');
var aFolderItem = aFolder.parseName('sample.doc');
aFolderItem.invokeVerb('プロパティ(&R)');

var aShell = new ActiveXObject('WScript.Shell');
aShell.popup('クリックするとスクリプトを終了します (5秒待って自動終了)', 5);
WScript.quit();

// 注意
//
// (1) FolderItem>>invokeVerb() メソッドは非同期に動作します。
// (2) Shell.Application オブジェクトが開放されると invokeVerb()
//   メソッドが処理の途中でも中断してしまうようです。
// (3) プロパティ(&R) コマンドによって表示されたウインドウは,
//   Shell.Application オブジェクトが開放されると閉じます。
//   よってある期間表示し続けるためには上記のようにポップアッ
//   プウインドウを表示したままにするなどスクリプトの実行をブ
//   ロックする必要があります。


//
// invokeVerb() メソッドの引数に与えてやるコマンド名の列挙
//

var aShellApplication = new ActiveXObject('Shell.Application');
var aFolder = aShellApplication.nameSpace('c:\\');
var aFolderItem = aFolder.parseName('sample.doc');
var verbs = aFolderItem.verbs();
var verbArray = new Array();
for (var i = 0; i < verbs.count; i++)
verbArray.push(i + ' [' + verbs.item(i) + ']');
WScript.echo(verbArray.join('\n'));
WScript.quit();

// 実行例 ここから

C:\Documents and Settings\iriyak\My Documents>cscript //nologo list-up-verbs.js
0 [開く(&O)]
1 [新規作成(&N)]
2 [印刷(&P)]
3 []
4 [Norton AntiVirus を使ってスキャン(&V)]
5 []
6 [切り取り(&T)]
7 [コピー(&C)]
8 [ショートカットの作成(&S)]
9 [削除(&D)]
10 [名前の変更(&M)]
11 [プロパティ(&R)]

C:\Documents and Settings\iriyak\My Documents>

// ここまで

NORI さん 2003年 09月 12日 09時 25分 02秒

YU さんへ

ご回答ありがとうございます。
とても参考になります。


VAV さん 2003年 09月 11日 22時 40分 41秒

こんばんわ。

C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll

のファイルのプロパティを表示させるVBSスクリプトを教えて下さい。

YU さん 2003年 09月 11日 22時 22分 06秒

はじめまして
Microsoftのスクリプト センターに参考になるスクリプトが沢山ありますよ。
(Windows 2000、Windows XP、および Windows Server 2003用)
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/network/default.asp

でも、FileSystemObjectを使用していないみたいなので
質問の回答になっていないですね・・・。

NORI さん 2003年 09月 11日 11時 18分 13秒

はじめまして NORI です。
FileSystemObjectを使用して、ローカルマシンのあるフォルダを
共有化したいのですが、可能でしょうか?

Return