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

 

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

"Invalid call procedure" σε vbscript .

Îåêßíçóå áðü ôï ìÝëïò mart. Τελευταία δημοσίευση από το μέλος mart στις 04-10-2011, 14:24. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-09-2011, 17:22 67311

    "Invalid call procedure" σε vbscript .

    Καλησπέρα.

    Έχω το παρακάτω script και το παρακάτω λάθος.
    Γενικότερα είμαι άσχετος από vb και σχετικός με προγραμματισμό, κυρίως web.

    _______________________________________________________

    Option Explicit

    Dim objFso, objFolder, objWMI, objItem, objShell, strEventLog
    Dim strFile, strComputer, strFolder, strFileName, strPath
    Dim intEvent, intNumberID, intRecordNum, colLoggedEvents

    ' ---------------------------------------------
    ' Set the folder and file name
    ' Set numbers
    intNumberID = 10 ' Event ID Number
    intRecordNum = 0

    strComputer = "."
    strFileName = "\Event" & intNumberID & ".txt"
    strFolder = "c:\logs\eventlog"
    strPath = strFolder & strFileName
    strEventLog = "'System' "

    ' ---------------------------------------------
    ' Section to create folder and hold file.
    Set objFso = CreateObject("Scripting.FileSystemObject")
    If objFSO.FolderExists(strFolder) Then
    Set objFolder = objFSO.GetFolder(strFolder)
    Else
    Set objFolder = objFSO.CreateFolder(strFolder)
    Wscript.Echo "Folder created " & strFolder
    End If

    Wscript.Echo " Press OK and Wait 30 seconds (ish)"
    Set strFile = objFso.CreateTextFile(strPath, True)
    Set objWMI = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
    Set colLoggedEvents = objWMI.ExecQuery _
    ("Select * from Win32_NTLogEvent Where Logfile = " & strEventLog)

    ' -----------------------------------------
    ' Next section loops through ID properties

    For Each objItem in colLoggedEvents
    If objItem.EventCode = intNumberID Then

    ' Second Loop to filter only if they tried Administrator
    strFile.WriteLine("Category: " & objItem.Category _
    & " string " & objItem.CategoryString)
    strFile.WriteLine("ComputerName: " & objItem.ComputerName)
    strFile.WriteLine("Logfile: " & objItem.Logfile _
    & " source " & objItem.SourceName)
    strFile.WriteLine("EventCode: " & objItem.EventCode)
    strFile.WriteLine("EventType: " & objItem.EventType)
    strFile.WriteLine("Type: " & objItem.Type)
    strFile.WriteLine("User: " & objItem.User)
    strFile.WriteLine("Message: " & objItem.Message)
    strFile.WriteLine (" ")
    intRecordNum = intRecordNum +1
    End If
    Next

    ' Confirms the script has completed and opens the file
    Set objShell = CreateObject("WScript.Shell")
    objShell.run ("Explorer" &" " & strPath & "\" )

    WScript.Quit
    _______________________________________________________

    Όταν τρέχω το script μου εμφανίζει το παρακάτω μήνυμα:

    Line: 58
    Char:1
    Error: Invalid procedure call or argument
    Code: 800A0005
    Source: Microsoft VBScript runtime error




    Όταν εξαιρώ την γραμμή, όπως φένεται και παρακάτω, το script "τρέχει" κανονικά.
    ......
    'strFile.WriteLine("Message: " & objItem.Message)
    .....


    Το script "τρέχει" σε Windows 2003 Server R2 SP2.

    Το ζητούμενο είναι να μαζέυω σε αρχείο txt ή csv  όλα τα events με event id 10 μαζί με την περιγραφή από τον event viewer.


    Ευχαριστώ πολύ.


    mart
    Δημοσίευση στην κατηγορία: , ,
  •  15-09-2011, 20:48 67322 σε απάντηση της 67311

    Απ: "Invalid call procedure" σε vbscript .

    Το μήνυμα ποιό είναι?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-09-2011, 12:50 67402 σε απάντηση της 67322

    Απ: "Invalid call procedure" σε vbscript .

    Καλημέρα.

    Παναγιώτη, μήπως έχεις κάποια βοήθεια;

    Ευχαριστώ.

    mart
  •  28-09-2011, 18:39 67555 σε απάντηση της 67402

    Απ: "Invalid call procedure" σε vbscript .

    Και ενώ ακόμα δεν έχω βρει την λύση ....


    ....Still waiting for an answer........ 

    mart
  •  28-09-2011, 20:02 67557 σε απάντηση της 67555

    Απ: "Invalid call procedure" σε vbscript .

    mart:
    Και ενώ ακόμα δεν έχω βρει την λύση ....

     
    ....Still waiting for an answer........ 

    Καλησπέρα, το script δεν έχει κάποιο λάθος και τρέχει. Αυτό που πιθανώς είναι το πρόβλημα είναι ότι δεν είναι σίγουρο ότι έχει τα απαραίτητα διακαιώματα για να προσπελάσει τον κατάλογο που προσπαθεί να φτιάξει το αρχείο με τα event messages.

    Γενικά δεν είναι καλή ιδέα - όσο έχει να κάνει με τα δικαιώματα σε server - να προσπαθείς να γράψεις σε ένα κατάλογο που είναι στο root του boot δίσκου ενός server - θα μπορούσες να βάλεις το αρχείο στο ίδιο folder με το script ή σε κάποιο folder μέσα στο σύστημα που από default έχει τα απαραίτητα διακαιώμτα για να το προσπελάσουν όλοι οι χρήστες του συστήματος.

    Ένας τέτοιος folder είναι το C:\Users\Public που αποθηκεύεται στο enviroment variable PUBLIC...

     

    George J.


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

    Απ: "Invalid call procedure" σε vbscript .

    Καλησπέρα.

    Έκανα την μεταφορά του script.vbs στον ίδιο φάκελο με το αρχείο που δημιουργεί.  (Αλλάζω και το path στο vbs αρχείο).
    Επίσης αυτά τα δύο αρχεία τα μετέφερα και στο C:\Documents and Setting\All Users (είναι 2003 Server) όπως επίσης και σε έναν δεύτερο δίσκο που έχει ο server, ας πούμε τον M:.

    Και στις δύο περιπτώσεις μου εμφανίζει το ίδιο μήνυμα λάθους αλλά με την μόνη διαφορά ότι πλέον το script έχει δημιουργήσει το αρχείο .txt. Τώρα στο .txt αρχείο έχει γράψει τις 5 πρώτες εγγρφές που βλέπω στον event viewer με id 10.
    Στην πέμπτη εγγραφή δεν έχει γράψει την περιγραφή του event αλλά έχει  γράψει όλα τα υπόλοιπα που του ζητάω, δηλ. όπως φαίνεται και παρακάτω. (Κάνω paste τις δύο τελευταίες εγγραφές του .txt).

    Category: 0 string 
    ComputerName: ***********
    Logfile: System source Print
    EventCode: 10
    EventType: 3
    Type: Information
    User: DOMAIN\username
    Message: Document 5, Full page fax print owned by user was printed on printer via port IP_192.168.1.23.  Size in bytes: 806040; pages printed: 1

     
    Category: 0 string 
    ComputerName: **********
    Logfile: System source Print
    EventCode: 10
    EventType: 3
    Type: Information
    User: DOMAIN\username


    Όπως βλεπουμε στην τελευταία εγγραφή δεν μπορεί να γράψει το  "Message" και εκεί είναι που το script "σκάει".

    Ευχαριστώ.



    mart
  •  30-09-2011, 10:07 67583 σε απάντηση της 67571

    Απ: "Invalid call procedure" σε vbscript .

    Δεν έχω μέσα στο event log μου events με id 10 - το πιθανότερο είναι ότι το Message είναι Nothing την στιγμή που προσπαθείς να γράψεις το περιεχόμενο του.

    Βάλε ένα έλεγχο του τύπου IF NOT Message Is Nothing πριν προσπαθήσεις να γράψεις τα περιεχόμενα του Message

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  30-09-2011, 10:47 67585 σε απάντηση της 67583

    Απ: "Invalid call procedure" σε vbscript .

    Καλημέρα,

    Το event με id 10 αναφέρεται σε events που αφορούν εκτύπωση, source: Print και πάντα έχουν περιγραφή, όπως αυτή που έχει το .txt αρχείο.

    Συγκερκριμένα έχω έναν εκτυπωτή που έχει ρυθμιστεί να κάνει auditing και εμφανίζει στον event viewer όλα τα event που αφορούν εκτύπωση, τα events με id 10.

    Παρατηρώ ότι τελικά το script "σκαει" όταν η περιγραφή περιέχει ελληνικούς χαρακτήρες. Στην περιγραφή  αναφέρει και τον τίτλο του αρχείου που έχει εκτυπώσει ο χρήστης και όταν αυτός π.χ. είναι ένας τίτλος με ελληνικούς χαρακτήρες εμφανίζει το μήνυμα λάθους. 

    Invalid procedure call or argument.
    800A0005
    Microsoft VBScript runtime error.

    Πώς μπορώ να ξεπεράσω αυτό το θέμα;

    Ευχαριστώ.

    mart
  •  30-09-2011, 10:49 67586 σε απάντηση της 67583

    Απ: "Invalid call procedure" σε vbscript .

    Εγώ θα ρωτήσω, γιατί VBScript για να διαβάσουμε events? Απ' ότι κατάλαβα ο mart δεν θέλει να ασχοληθεί με VBScript, απλά να βρει κάποια events στον server του και να τα βγάλει σε αρχείο. Αυτό μπορεί να γίνει πολύ ευκολότερα με Powershell, όπως περιγράφεται π.χ. εδώ, να τα φιλτράρει, ταξινομήσει και να τα φορμάρει σε μορφή πίνακα, CSV, οτιδήποτε.

    Για παράδειγμα, το παρακάτω θα φέρει τα Application events με EventID 20 και θα τα παρουσιάσει σε μορφή πίνακα

    Clear-Host
    $AppEvents = Get-Eventlog -logname application -newest 2000 
    $MyEvents = $AppEvents |where {$_.eventId -eq 20}
    $MyEvents | sort TimeWritten | Format-Table EventID, Source, TimeWritten, Message -auto
    ενώ το παρακάτω θα τα γράψει σε ένα csv αρχείο με encoding UTF8 αντί να εμφανίσει πίνακα

    $MyEvents | sort TimeWritten | select-object EventID, Source, TimeWritten, Message| Export-CSV myFile.csv -Encoding UTF8



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-09-2011, 10:58 67587 σε απάντηση της 67585

    Απ: "Invalid call procedure" σε vbscript .

    Όσο βλέπω τον κώδικα τόσο μου μοιάζει με κώδικα που έφτιαξε το παλιό Scriptomatic του 2005. Για το Powershell υπάρχει το Powershell Scriptomatic (2008) αν και το Powershell  έχει πολλές έτοιμες εντολές που κάνουν πράγματα που πριν χρειάζονταν WMI . H Get-EventLog και Get-WinEvent είναι απλά ένα παράδειγμα.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-09-2011, 12:58 67594 σε απάντηση της 67587

    Απ: "Invalid call procedure" σε vbscript .

    Καλησπέρα Παναγιώτη.

    Ευχαριστώ πολύ για την βοήθεια, στην ουσία είναι ακριβώς αυτό που ψάχνω. 
    Όπως είπες και εσύ δεν με νοίαζει σε πια γλώσσα θα το γράψω αλλά το αποτέλεσμα.

    Το power shell script σου δουλεύει άψογα με το επιθυμητό αποτέλεσμα και με πολύ λιγότερες γραμμές κώδικα.

    Σας ευχαριστώ όλους για την βοήθεια.

    Πάντως το script σε vb έχει κάποιο θέμα με τους ελληνικούς χαρακτήρες. Αν υπάρχει τρόπος να ξεπεραστεί, νομίζω ότι και εκείνο δουλεύει άψογα.

    Και μία τελευταία ερώτηση: Υπάρχει τρόπος να γίνονται append τα καινούργια data που θα δημιουργούνται κάθε φορά που τρέχει το script από ένα schedule job;

      

    mart
  •  30-09-2011, 17:14 67600 σε απάντηση της 67594

    Απ: "Invalid call procedure" σε vbscript .

    mart:
    Καλησπέρα Παναγιώτη.
    Πάντως το script σε vb έχει κάποιο θέμα με τους ελληνικούς χαρακτήρες. Αν υπάρχει τρόπος να ξεπεραστεί, νομίζω ότι και εκείνο δουλεύει άψογα.
      

    Το πιο πιθανό είναι ότι οι χαρακτήρες είναι σε Unicode - για να τρέξει το vb script σε Unicode θα πρέπει να σωθεί με UTF-8 format. Το θέμα είναι ότι όταν γίνεται αυτό, μπορεί να σου λύσει το πρόβλημα με τα ελληνικά, αλλά μπορεί να δημιουργήσει άλλα...

     

    George J.


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

    Απ: "Invalid call procedure" σε vbscript .

    Όσον αφορά το Powershell, μπορείς να δεις τί κάνει η κάθε εντολή με το get-help .... . Στη συγκεκριμένη περίπτωση, με το get-help Export-csv. Λεπτομέρειες για κάθε παράμετρο της εντολής θα πάρεις με το get-help Export-csv -detailed. Το get-help δουλεύει χονδρικά όπως το man στο linux με την έννοια ότι έτσι βρίσκεις πληροφορίες για οποιαδήποτε εντολή ενώ μπορείς να ψάξεις για εντολές δίνοντας μόνο ένα τμήμα της εντολής. Για παράδειγμα, η get-help csv θα σου γυρίσει όλες τις εντολές που έχουν να κάνουν με CSV αρχεία.

    Για να γίνει append σε ένα αρχείο που ήδη υπάρχει θα πρέπει να χρησιμοποιήσεις την παράμετρο -NoClobber.

    Στην περίπτωση της vbscript, θα πρέπει να καλέσεις την CreateTextFile με το overwrite parameter false αντί για true. Το false είναι και το default οπότε αυτό αρκεί:
     Set strFile = objFso.CreateTextFile(strPath)



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-10-2011, 13:33 67612 σε απάντηση της 67602

    Απ: "Invalid call procedure" σε vbscript .

    Σας ευχαριστώ πολύ για την βοήθεια.

    Θα παραμείνω στο powershell και θα προσπαθήσω να υλοποιήσω και το append. 

    Ευχαριστώ και πάλι, το θέμα έχει λυθεί.

    mart
  •  04-10-2011, 14:24 67623 σε απάντηση της 67612

    Απ: "Invalid call procedure" σε vbscript .

    Export-CSV -Append


    Μετά από την αναζήτησή μου στο www, για το πώς η εντολή export-csv μπορεί να αποθηκεύει τα καινούργια data, από ένα powershell script, στο ίδιο αρχείο, κάνοντάς τα append.

    Στο παρακάτω site βλέπουμε τον τύπο να έχει δημιουργήσει την εντολή -Append για το powershell.

    Δεν ξέρω αν είναι η καλύτερη προσέγγιση αλλα μου φένεται έξυπνο.

    Enjoy.



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