Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Да... Надеюсь тут за это не убивают: 20.10.06 13:42 Число просмотров: 3905
Автор: ... Статус: Незарегистрированный пользователь Отредактировано 20.10.06 13:53 Количество правок: 2
|
Да... Надеюсь тут за это не убивают:
Одно условие - плиз не менять без уведомления =)
Вставить в файл devcontrol.wsf
OpenSource.....=)
Ах да - тут log не поддерживается... Если принципиально - допишу...
----------------------------------------------
<package>
<job id="Device Control">
<runtime>
<description>
Device-driver control
Programmed by ... 15.07.2006
Mail to: kirw@mail.ru
...Thanks for Microsoft...
</description>
<named
name = "Host"
helpstring = "Host name ('.' for local host)"
type = "string"
required = "true"
/>
<named
name = "Device"
helpstring = "Device name"
type = "string"
required = "true"
/>
<named
name = "Mode"
helpstring = "Device startup mode [Boot | System | Automatic | Manual | Disabled]"
type = "string"
required = "true"
/>
<named
name = "Provider"
helpstring = "Provider [Service | Registry] [default Service]"
type = "string"
required = "false"
/>
<named
name = "Alerts"
helpstring = "Alerts and warnings [All | Errors | None] [default All]"
type = "string"
required = "false"
/>
<named
name = "Log"
helpstring = "Log to [None | EventLog | FileName] [default None]"
type = "string"
requred = "false"
/>
<example>
Examples:
Disable USB Mass-storage devices on comp-1 with only errors messages:
devcontrol.wsf /Host:comp-1 /Device:USBStor /Mode:Disabled /Alerts:Errors
Disable CD-ROM on local host through registry:
devcontrol.wsf /Host:. /Device:Cdrom /Mode:Disabled /Provider:Registry
</example>
</runtime>
<script language="JScript">
try {
// if (WScript.Arguments.Length<3|WScript.Arguments.Length>4)
// throw("@Arg");
var oHost = parseArg("Host");
var oDeviceName = parseArg("Device");
var oMode = parseArg("Mode", undefined, "boot", "system", "automatic", "manual", "disabled");
var oAlerts = parseArg("Alerts", "all", "all", "errors", "none");
var oProvider = parseArg("Provider", "service", "service", "registry");
if (!doConnect(oProvider, oHost))
throw(Error("connect failed"));
if (!doJob(oProvider, oDeviceName, oMode))
throw(Error("can't change device start mode"));
say("complete");
WScript.quit(0);
}
catch(e) {
if (e.description=="@Arg") WScript.Arguments.ShowUsage(); else say(e);
WScript.quit(-1);
}
function say(oStr) {
if (oStr && oStr.description) {
if (oAlerts.index<2) WScript.echo("Error:"+oStr.description);
} else
if (oAlerts.index<1)
WScript.echo(oStr);
}
function parseArg(asArg, asDefaultValue) {
//1 - Req. arg
//2 - Opt. with def.value
//
var oArg = new Object();
if (!WScript.arguments.named.exists(asArg)) {
if (typeof(asDefaultValue)=="undefined") throw(Error("@Arg"));
oArg.value = asDefaultValue;
} else oArg.value = WScript.arguments.named.item(asArg);
var iCount = parseArg.arguments.length;
if (iCount>2) {
oArg.value = oArg.value.toLowerCase();
for(var i=2; i<iCount; i++)
if (oArg.value == parseArg.arguments[i]) {oArg.index = i-2; return oArg;}
throw(Error("@Arg"));
}
return oArg;
}
function doConnect(aoProvider, aoHost) {
var strTemplate = "winmgmts:{impersonationLevel=impersonate}!\\\\"+
aoHost.value+"\\root\\";
switch(aoProvider.index) {
//Service
case 0: aoProvider.object = GetObject(strTemplate + "CIMV2"); break;
//Registry
case 1: aoProvider.object = GetObject(strTemplate + "default:StdRegProv"); break;
}
return aoProvider.object;
}
function doJob(aoProvider, aoDeviceName, aoMode) {
switch(aoProvider.index) {
//Service
case 0:
for(var eQuery = new Enumerator(aoProvider.object.ExecQuery("Select * from Win32_SystemDriver where Name ='" + aoDeviceName.value + "'")); !eQuery.atEnd(); eQuery.moveNext())
return !eQuery.item().change(undefined,undefined,undefined,undefined,aoMode.value);
break;
//Registry
case 1:
var iHKLM = 0x80000002;
var sKeyPath = "SYSTEM\\CurrentControlSet\\Services\\" + aoDeviceName.value;
return !aoProvider.object.setDWORDValue(iHKLM, sKeyPath, "Start" , aoMode.index);
}
return false;
}
</script>
</job>
</package>
|
|
|