2013-10-04 4 views
0


내가 원격 WMI (refer this) 를 사용하여 대화 형 프로세스를 시작하고
WMI를 사용하여 대화식 프로세스를 원격으로 시작하는 방법?

Const INTERVAL = "n" 
Const MINUTES = 1 
strComputer = "machineDomain" 
strCommand = "Notepad.exe" 

Set objWMIService = _ 
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob") 

Set objSWbemDateTime = _ 
    CreateObject("WbemScripting.SWbemDateTime") 
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _ 
    MINUTES, Now())) 

intReturnValue = objScheduledJob.Create(strCommand, _ 
    objSWbemDateTime.Value, False, 0, 0, True, intJobID) 
WScript.Echo "Job ID: " & intJobID 

문제는 위의 코드에서 현재 시간 9시 30 분 오전 다음의 경우 다음 분으로 예약 할 작업이 [의미입니다 그것은 9시 31 분] 예정이지만, 나는 단지 현재 시간 이후 5 초 작업을 예약하고 싶습니다. 나는 다음 줄을 수정 :

Const INTERVAL = "s" 
Const SECONDS = 5 

하지만이 제대로 작동하지 않습니다 :

Const INTERVAL = "n" 
Const MINUTES = 1 

사람 :
에서. 나는 우리가 SetVarDate(DateAdd(INTERVAL, _ SECONDS, Now()))라고 부를 때 문제가 있다고 생각한다. 현재 시간은 오전 9시 30 분 20 초, 오전 9시 30 분 25 초, 오후 9시 30 분 57 초라는 것처럼 추가된다. 그러면 문제가 생깁니다.

누구든지 나를이 문제를 해결하는 데 도움이 될 수 있습니까?

미리 감사드립니다.

편집 :
내가 다음 코드 [^]을 사용하고있는 위의 VBScript 코드를 호출하는 경우 :

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) :

  string remoteMachine = Console.ReadLine(); 
      string sBatFile = string.Empty; 
      if (remoteMachine != string.Empty) 
       sBatFile = @"\\" + remoteMachine + "\\admin$\\process.bat"; 
      else 
       Console.WriteLine("Invalid Machine name"); 

      if (File.Exists(sBatFile)) 
       File.Delete(sBatFile); 

      StreamWriter sw = new StreamWriter(sBatFile); 
      string _cmd = "DIR > \\\\" + remoteMachine + "\\admin$\\output.txt"; 
      Console.Write("Enter the remote Command <eg : Notepad.exe, Dir, Shutdown - r, etc..> : "); 
      _cmd = Console.ReadLine(); 
      if (_cmd.Trim()==string.Empty) 
       Console.WriteLine("No command entered using default command for test :" + _cmd); 
      sw.WriteLine(_cmd); 
      sw.Close(); 
      ConnectionOptions connOptions = new ConnectionOptions(); 
      connOptions.Impersonation = ImpersonationLevel.Impersonate; 
      connOptions.EnablePrivileges = true; 
      ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", remoteMachine), connOptions); 
      manScope.Connect(); 
      ObjectGetOptions objectGetOptions = new ObjectGetOptions(); 
      ManagementPath managementPath = new ManagementPath("Win32_Process"); 
      ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions); 
      ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); 
      inParams["CommandLine"] = sBatFile;    
      ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null); 
      Console.WriteLine("Creation of the process returned: " + outParams["returnValue"]); 
      Console.WriteLine("Process ID: " + outParams["processId"]); 

그것이 잘 작동하지만, 일부는 예외를주고 시작하려고 후.

이 문제를 해결하는 방법은 무엇입니까?

답변

1

질문을 제대로 이해하고 있는지 확실하지 않지만 현지 시간과 원격 컴퓨터의 시간이 서로 다른 것 같습니다. 원격 컴퓨터에서 시간을 가져 와서 "지금"대신 해당 시간을 사용할 수 있습니다.

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery("Select * From Win32_LocalTime") 

For Each objItem in colItems 
If objItem.Hour > 12 Then 
    intHour = objItem.Hour - 12 
    strAMPM = "PM" 
Else 
    intHour = objItem.Hour 
    strAMPM = "AM" 
End If 
strTime = objItem.Month & "/" & objItem.Day & "/" & objItem.Year & " " _ 
    & intHour & ":" & objItem.Minute & ":" & objItem.Second & " " & strAMPM 
Next 

그럼 당신은

objSWbemDateTime.SetVarDate(DateAdd(INTERVAL,MINUTES, strTime)) 
+1

당신은 objItem.Hour 난 그냥 지금이 몰래 해요 0과 동일 할 때, 한밤중에 작동하는지 확인하기 위해이 코드를 확인 할 수 할 수 있습니다. – langstrom

관련 문제