Last-modified: 2004-01-26 (月) 00:03:12 (7610d)

 Windowsのシステム管理をプログラムから行う際には、ADSI(Active Directory Services Interfaces)を利用することになります。WSHはADSIをかなり強力にサポートしています。

 C#の場合と比較してみてください。

 

ユーザ管理

 WSHでWindowsのユーザ、グループを登録、削除するには、以下のようなコードを用います。NT系OS(WinNT,Win2000,WinXP,Win2003)で有効です。

ユーザの登録

 adduser.js

var WshNetwork = WScript.CreateObject("WScript.Network");
var ComputerName = WshNetwork.ComputerName;
var UserName = WshNetwork.UserName;

var fullPathComputer = "WinNT://" + ComputerName + ",Computer";
var fullPathAdmin = "WinNT://" + ComputerName + "/Administrators,group";

// ユーザcrackを作成
var objComputer = GetObject(fullPathComputer);
var newUser = objComputer.Create("user", "crack");
//次回ログオン時パスワード変更要求は無効に設定
newUser.Put("PasswordExpired", 0);
newUser.SetInfo();

//ユーザをAdministratorsグループに追加 
var fullPathUser = "WinNT://" + ComputerName + "/crack";
var AdminGroup = GetObject(fullPathAdmin);
AdminGroup.Add(fullPathUser);

WScript.Echo("Done!");

ユーザの削除

// ユーザcrackを削除
var objComputer = GetObject(fullPathComputer);
var newUser = objComputer.Delete("user", "crack");

IIS管理

 IISをインストールすると、AdminScripts/フォルダにIIS管理スクリプトがコピーされますね。adsutil.vbsが参考になるでしょう。

 ADSIでアクセス可能なディレクトリ構造と実際のフォルダは必ずしも一致しないので、GetObjectする際には事前の存在チェックやエラー処理が必要になるでしょう。

Webコンテンツの認証方法の設定

 例えばwwwroot直下のtestフォルダに対してNTLM認証のみに設定する場合は以下のようになります。

 iisauth.js

var ObjectPath = "/test";
var WshNetwork = WScript.CreateObject("WScript.Network");
var ComputerName = WshNetwork.ComputerName;
var IIsObjectPath = "IIS://" + ComputerName + "/W3SVC/1/Root" + ObjectPath;

var IIsObject = GetObject(IIsObjectPath);
IIsObject.AuthFlags = 0;
IIsObject.AuthAnonymous = false;
IIsObject.AuthBasic = false;
IIsObject.AuthNTLM = true;
IIsObject.Setinfo();

Webコンテンツのアクセス権限の設定

 例えばwwwroot直下のtestフォルダに対して読み取りのみに設定する場合は以下のようになります。

 iisacl.js

var ObjectPath = "/test";
var WshNetwork = WScript.CreateObject("WScript.Network");
var ComputerName = WshNetwork.ComputerName;
var IIsObjectPath = "IIS://" + ComputerName + "/W3SVC/1/Root" + ObjectPath;

var IIsObject = GetObject(IIsObjectPath);
IIsObject.AccessRead = true;
IIsObject.AccessWrite = false;
IIsObject.AccessExecute = false;
IIsObject.AccessScript = false;
IIsObject.Setinfo();

追記: WSHはほとんど何でも出来ちゃうので、ネットワーク管理者としては恐ろしいです。(^^;; でもサーバ上のバッチ作業なんかには使いたいし…。使わないのであれば無効化しておくのがいいでしょう。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS