Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Scripts ?

Îåêßíçóå áðü ôï ìÝëïò Main. Τελευταία δημοσίευση από το μέλος Main στις 16-06-2006, 11:22. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-06-2006, 16:08 14047

    Sad [:(] Scripts ?

    Μήπως είναι καλό  να φταχθεί ενα tread με καθε είδος scripts ?

    Αντιμετωπίζω ένα πρόβλημα ή μάλλον θέλω να φτιάξω μια σελίδα η οποία να εμφανίζει τα scheduled tasks ενός Domain, (πολλά serverakia)

     

    Με τους servers είναι εντάξει μέσω LDAP queries. Aλλά το να κάνεις enumerate τα scheduled tasks ενός server win2k+ που έχουν φτιαχθεί μέσω task scheduler θεώρησα ότι είναι εύκολη υπόθεση. (Όχι όμως!).

    Και μην βιαστεί κάνεις γρήγορος να φωνάξει command line tool ή WMI , γιατί στο μέν πρώτο απλά δεν με καλύπτει ενώ στο δεύτερο έχασα μια ημέρα να καταλάβω (RTFM) γιατί στον πρώτο (DEV) server το script έπαιζε ενώ σε κανέναν άλλο.

     To WMI query που έτρεξα είναι:

    "SELECT * FROM Win32_ScheduledJob"

    Το πρόβλημα είναι ότι το παραπάνω WMI Query χρησιμοποιεί το AT API αντί του Task scheduler API Ver 1.0 για win2lk , winxp , win2003.

    Η Microsoft έχει ανακινώσει πολλά καλούδια για την Version 2.0 μα  με όλα τα παραδείγματα σε C++!!

    και ο πόνος...



    #include "stdafx.h"
    #include <windows.h>
    #include <initguid.h>
    #include <ole2.h>
    #include <mstask.h>
    #include <msterr.h>
    #include <wchar.h>

    #define TASKS_TO_RETRIEVE          5

    int main(int argc, char **argv)
    {
      HRESULT hr = S_OK;
      ITaskScheduler *pITS;
     
     
      /////////////////////////////////////////////////////////////////
      // Call CoInitialize to initialize the COM library and
      // then call CoCreateInstance to get the Task Scheduler object.
      /////////////////////////////////////////////////////////////////
      hr = CoInitialize(NULL);
      if (SUCCEEDED(hr))
      {
        hr = CoCreateInstance(CLSID_CTaskScheduler,
                              NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_ITaskScheduler,
                              (void **) &pITS);
        if (FAILED(hr))
        {
          CoUninitialize();
          return hr;
        }
      }
      else
      {
        return hr;
      }
     
      /////////////////////////////////////////////////////////////////
      // Call ITaskScheduler::Enum to get an enumeration object.
      /////////////////////////////////////////////////////////////////
      IEnumWorkItems *pIEnum;
      hr = pITS->Enum(&pIEnum);
      pITS->Release();
      if (FAILED(hr))
      {
        CoUninitialize();
        return hr;
      }
     
      /////////////////////////////////////////////////////////////////
      // Call IEnumWorkItems::Next to retrieve tasks. Note that
      // this example tries to retrieve five tasks for each call.
      /////////////////////////////////////////////////////////////////
      LPWSTR *lpwszNames;
      DWORD dwFetchedTasks = 0;
      while (SUCCEEDED(pIEnum->Next(TASKS_TO_RETRIEVE,
                                    &lpwszNames,
                                    &dwFetchedTasks))
                      && (dwFetchedTasks != 0))
      {
        ///////////////////////////////////////////////////////////////
        // Process each task. Note that this example prints the
        // name of each task to the screen.
        //////////////////////////////////////////////////////////////
        while (dwFetchedTasks)
        {
           wprintf(L"%s\n", lpwszNames[--dwFetchedTasks]);
           CoTaskMemFree(lpwszNames[dwFetchedTasks]);
        }
        CoTaskMemFree(lpwszNames);
      }
     
      pIEnum->Release();
      CoUninitialize();
      return S_OK;
    }

    απλα να στο εμφανίσει τα tasks στην οθονη...

    sorry για την χρήση των C# tags

     

     

  •  15-06-2006, 18:33 14049 σε απάντηση της 14047

    Απ: Scripts ?

    Κατ αρχήν η απάντηση σε κώδικα C# στο πρόβλημά σου είναι:

    using System;
    using System.Management;
    using System.Windows.Forms;

    namespace WMISample
    {
        public class MyWMIQuery
        {
            public static void Main()
            {
                try
                {
                    ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("root\\CIMV2",
                        "SELECT * FROM Win32_ScheduledJob");

                    foreach (ManagementObject queryObj in searcher.Get())
                    {
                        Console.WriteLine("-----------------------------------");
                        Console.WriteLine("Win32_ScheduledJob instance");
                        Console.WriteLine("-----------------------------------");
                        Console.WriteLine("Caption: {0}", queryObj["Caption"]);
                        Console.WriteLine("Command: {0}", queryObj["Command"]);
                        Console.WriteLine("DaysOfMonth: {0}", queryObj["DaysOfMonth"]);
                        Console.WriteLine("DaysOfWeek: {0}", queryObj["DaysOfWeek"]);
                        Console.WriteLine("Description: {0}", queryObj["Description"]);
                        Console.WriteLine("ElapsedTime: {0}", queryObj["ElapsedTime"]);
                        Console.WriteLine("InstallDate: {0}", queryObj["InstallDate"]);
                        Console.WriteLine("InteractWithDesktop: {0}", queryObj["InteractWithDesktop"]);
                        Console.WriteLine("JobId: {0}", queryObj["JobId"]);
                        Console.WriteLine("JobStatus: {0}", queryObj["JobStatus"]);
                        Console.WriteLine("Name: {0}", queryObj["Name"]);
                        Console.WriteLine("Notify: {0}", queryObj["Notify"]);
                        Console.WriteLine("Owner: {0}", queryObj["Owner"]);
                        Console.WriteLine("Priority: {0}", queryObj["Priority"]);
                        Console.WriteLine("RunRepeatedly: {0}", queryObj["RunRepeatedly"]);
                        Console.WriteLine("StartTime: {0}", queryObj["StartTime"]);
                        Console.WriteLine("Status: {0}", queryObj["Status"]);
                        Console.WriteLine("TimeSubmitted: {0}", queryObj["TimeSubmitted"]);
                        Console.WriteLine("UntilTime: {0}", queryObj["UntilTime"]);
                    }
                }
                catch (ManagementException e)
                {
                    MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
                }
            }
        }
    }

    Βασικά τώρα θα αναρωτιέσαι, καλά πόσο τρομερός είναι αυτός και το βρήκε τόσο εύκολα.

    Η πραγματικότητα είναι ότι, μπορεί το WMI να είναι δύσκολο να το καταλάβει κάποιος, αλλά από την άλλη μεριά είναι μια τεράστια λίστα, που όποιος ξέρει τι ψάχνει μπορεί να το βρει. Το κώδικα δεν τον ήξερα, ούτε τον βρήκα στο internet μέσα από μια αναζήτηση: Υπάρχει ένα ωραίο utility το WMI Code Creator v1.0, που σου αν ξέρεις το query που θες να κάνεις, στο κάνει κώδικα σε Windows Script, VB.NET ή C#.

    Πιστεύω ότι θα σου φανεί χρήσιμο...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  15-06-2006, 22:17 14056 σε απάντηση της 14049

    Απ: Scripts ?

    φοβερό utility !!!

    Αλλα δεν το συγκεκριμένο "βλέπει" μόνο τα tasks που έχουν φτιαχθέι μέσω του obsolete At command tool , για οτιδήποτε φτιαχθεί με με τον Task scheduler απλα δεν εμφανίζεται.

    Βρήκα ένα lib μαζί με το source σε C# η οπία ουσιαστικά είναι ένας wraper του task scheduler  Com object.

    θα το παραθέσω αυριο.

    Ευχαριστώ.  

      

  •  16-06-2006, 11:22 14062 σε απάντηση της 14056

    Απ: Scripts ?

    Λοιπόν ο wrapper που λέγαμε βρισκεταί εδώ : http://www.codeproject.com/csharp/TSNewLib.asp



     

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems