Welcome to Sign in | Help
in Search

executie job cu cmdExec

Last post 08-23-2007, 10:24 PM by crestinul. 7 replies.
Sort Posts: Previous Next
  •  08-13-2007, 7:21 PM 2457

    executie job cu cmdExec

    Salutare .

    Am o intrebare legata de executia unui job pe o instanta sql server 2005 :

    trebuie sa fac un job care sa execute (la anumite ore) o comanda tip cmd.vbs .

    Am facut un job si un step de genul CmdExec unde am plasat comanda respectiva in fisier nume.bat .

    Din pacate nu face ceea ce trebuie s face , mai precis se blocheaza . Daca execut cmd.vbs din afara sql server merge bine !!!!

    (cmd.vbs se leaga la un server ftp si decarca niste fisiere , pe baza unui user si a unei parole ) .

    Cand execut din sql server vad in taskManager : wscript.exe   user SYSTEM ,

    in schimb cand execut din afara sql server am : wscript.exe    user numeuser .

    Am creat ceea ce se numeste un Credential si un Proxy pentru CmdExec dar degeaba !!!!

    Daca cineva are un raspuns ...sunt recunoscator !!!

    Multumesc anticipat .

    Paul 

     PS: daca nu am fost destul declar ....pot reveni cu clarificari .

     

  •  08-14-2007, 8:53 AM 2458 in reply to 2457

    Re: executie job cu cmdExec

    Încearcă cu cscript în loc de wscript (ideea e că ceea ce rulezi cu xp_cmdshell trebuie să nu fie deloc interactiv, pentru că dacă afişează vreun dialog/msgbox/etc, se afişează pe un ecran ascuns, unde nu poţi să-i dai click-uri).

    În al doilea rând, vezi în SQL Service Configuration Manager sub ce account rulează serviciul MSSQLServer. Dacă e LocalSystem, atunci nu are cum să acceseze reţeaua. Pune-l pe NetworkService sau mai bine pe un user account separat.

    Din alt punct de vedere, într-un Package SSIS poţi să pui un task de tipul FTP şi să rulezi din job-ul tău acel package.

    Răzvan

  •  08-14-2007, 4:14 PM 2476 in reply to 2458

    Re: executie job cu cmdExec

    Multumesc mult !!!

    Am mai cautat si acum problema se pune asa :

    am un script vbs cu o functie :

    Function GetConfigurationValue (tag , valueName)

      Dim xmlSchedConfig
      Dim xmlNode 

     Set xmlSchedConfig = CreateObject("MSXML2.DOMDocument")
     xmlSchedConfig.load(configFilePath)
     Set xmlNode = xmlSchedConfig.selectSingleNode("/configuration/"& tag &"/add[@key='" & valueName & "']/@value")

      GetConfigurationValue = xmlNode.Value

    End Function

    Cand il execut di afara sql server ....merge , in schimb daca fac un job cu el NU !!!! Se blocheaza la instructiunea   :

    GetConfigurationValue = xmlNode.Value  fara sa dea eroare .

    E posibil sa fie o problema la crearea obiectului CreateObject("MSXML2.DOMDocument") ????!!!!!! Sau ceva de securitate !!!???

    Multumesc pentru efort !

    Paul 

     

     

  •  08-14-2007, 5:05 PM 2477 in reply to 2476

    Re: executie job cu cmdExechttp://sqlserver.ro/forums/AddPost.aspx?PostID=2476

    MSXML2 e cam vechi; aş sugera folosirea MSXML6 (sau măcar MSXML4).

    O altă posibilitate ar fi înlocuirea VBS-ului cu un script PowerShell, care poate accesa metodele din .NET Framework.

    Deşi nu sunt prea familiar cu MSXML, poţi să postezi un exemplu de fişier de configurare, ca să mai testăm acest caz ?

    Răzvan 

  •  08-14-2007, 6:14 PM 2479 in reply to 2477

    Re: executie job cu cmdExechttp://sqlserver.ro/forums/AddPost.aspx?PostID=2476

    Salutare !

    Asta e continutul fisierului .bat : "C:\Test\Import.vbs"

     Fisierul Import.vbs arata asa:

    Const TagSettings = "ImportSettings"

    Dim  configFilePath

    configFilePath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".") & "\Import.config"

    Dim userName
    Dim xmlSchedConfig
    Dim xmlNode

     Set xmlSchedConfig = CreateObject("MSXML2.DOMDocument")
     xmlSchedConfig.load(configFilePath)
     Set xmlNode = xmlSchedConfig.selectSingleNode("/configuration/"& TagSettings &"/add[@key='" & "userName" & "']/@value")

    userName = xmlNode.Value

    Set FSOPaul = CreateObject("Scripting.FileSystemObject")
    Set filetxtPaul = FSOPaul.CreateTextFile("C:\Test\TestPaul.txt",True, False)

      filetxtPaul.WriteLine userName

    Set FSOPaul =nothing
    Set filetxtPaul =nothing 

     

     si fisierul Import.config :

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     
      <ImportSettings>
      
        <add key="userName" value="testuser"/>
     
      </ImportSettings>

    </configuration>

     

    Daca execut direct  Import.vbs  merge ....citeste din xml si scrie in fisierul text .

    Daca fac un job cu cmdexec si rulez un bat care cheama  Import.vbs   se blocheaza !!!!!!!!!!!!!!

    Daca ai timp sa incerci si tu ar fi perfect .... sper sa iti dai seama ce nu merge .

    ( faci tu modificarile de forldere si etc )

     

    Merci mult !

     

     

  •  08-16-2007, 2:58 PM 2496 in reply to 2479

    Re: executie job cu cmdExec

    Mda... într-adevăr, când am executat direct BAT-ul a scris "testuser" în fişierul text, iar când am folosit xp_cmdshell s-a auzit un Bing! (semn că a apărut un mesaj undeva pe un ecran ascuns) şi nu a făcut nimic (a rămas agăţat un cmd.exe în Task Manager). Atunci când am apelat VBS-ul cu cscript, am văzut mesajul, care a fost acum returnat ca rezultat al xp_cmdshell: "C:\Test\Import.vbs(15, 1) Microsoft VBScript runtime error: Object required", iar linia 15 era, într-adevăr, cea cu xmlNode.Value. De fapt, problema reală era ceva mai sus, deoarece metoda Load nu reuşeşte să încarce nimic în obiectul xmlSchedConfig şi returnează False (fără să dea altă eroare, însă). Dacă ne uităm la xmlSchedConfig.ParseError.reason, găsim mesajul "The system cannot locate the resource specified.". Dacă ne uităm însă ce este în configFilePath, găsim sursa problemei: "C:\WINDOWS\system32\Import.config"...

    Cred că cea mai simplă soluţie este să modificăm fişierul .BAT astfel:

    @echo off
    c:
    cd C:\Test
    cscript C:\Test\Import.vbs

    Răzvan

  •  08-16-2007, 6:12 PM 2499 in reply to 2496

    Re: executie job cu cmdExec

    Ai mareeeeeeee dreptateeeeeeee !!!!!  Razvane  .

    Merci tare mult .

    Cand il execut direct ..o fac in directorul c:\test unde si gaseste fisierul config .

    prin : configFilePath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".") & "\Import.config"

    In schimb sql server prin job o executa in C:\WINDOWS\system32 si nu gaseste configul .

    Raman dator .

    Paul


     

     

  •  08-23-2007, 10:24 PM 2540 in reply to 2499

    Re: executie job cu cmdExec

    Asta e windows scripting nu e sql % am impresia ca puteai face cu integration services un pachet dtsx care sa faca chestiile astea si il executai in job.
    Secolul XXI ori va fi religios ori nu va fi deloc
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems