Jó néhány hónappal ezelőtt volt egy elég kemény problémám egy WMI script-el
var objWMIServices;
var Sink;
var EventArr;
var i = 0;
EventArr = new Array();
objWMIServices =
GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}");
Sink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_");
objWMIServices.ExecNotificationQueryAsync(Sink,
"SELECT * FROM __InstanceCreationEvent " +
"WHERE TargetInstance ISA 'Win32_NTLogEvent' " +
"AND TargetInstance.LogFile = 'Application'");
WScript.Sleep(5000);
for (i = 0; i < EventArr.length; i++)
{
WScript.Echo(EventArr[i].TimeGenerated);
WScript.Echo(FromWMIDateTime(EventArr[i].TimeGenerated).toLocaleString());
WScript.Echo(FromWMIDateTime(EventArr[i].TimeGenerated).toUTCString());
WScript.Echo(((EventArr[i].User == null)? "N/A" : EventArr[i].User));
}
Sink.Cancel();
delete Sink;
function SINK_OnObjectReady(objEvent, objAsyncContext)
{
EventArr[i] = objEvent.TargetInstance;
i++;
}
function FromWMIDateTime(WMIDT)
{
var RetVal;
RetVal = new Date(ToInt(WMIDT.substr(0,4)),
ToInt(WMIDT.substr(4,2)) - 1,
ToInt(WMIDT.substr(6,2)),
ToInt(WMIDT.substr(8,2)),
ToInt(WMIDT.substr(10,2)),
ToInt(WMIDT.substr(12,2)));
return RetVal;
}
function ToInt(Str)
{
var i = 0;
while((Str.charAt(i) == "0") & (i < Str.length))
i++;
return parseInt(Str.substring(i,Str.length));
}
Ha ezt a kedves darabot Adminként futtatom, működik. Ha egy más felhasználó nevében, akkor is. Ha Adminként Scheduled Taskban megy akkor is működik, viszont ha egy más felhasználó nevében megy Scheduled Taskban akkor kapok egy kedves Eventlog hibát. Ezt:
Event Type: Error
Event Source: DCOM
Event Category: None
Event ID: 10003
Date: 2005. 05. 26.
Time: 17:20:21
User: XXXXX\backup
Computer: XXXXXX
Description:
Access denied attempting to launch a DCOM Server using DefaultLaunchPermssion. The server is:
{49BD2028-1523-11D1-AD79-00C04FD8FDFF}
The user is backup/XXXXX, SID=S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXX.
Több helyen a neten feltettem mint kérdést, de nem jött rá válasz. Ma egy más probléma kapcsán elkezdtem vele megint játszani és ez lett a megoldás:
Az MMC Component Services Snap-in -ben a DCOM alatt a Microsoft WBEM Unsecured Apartment -re (ennek a GUID-je található az Eventlog bejegyzésben) Launch jogot kell adni annak a felhasználónak akinek a nevében a Scheduled Task fut.