Görev Zamanlayıcısı'ndan .vbs dosyasını çalıştırın. VBS bir .exe'yi kabuktan çalıştırmalı


4

Daha önce bu konuda yayınlanan olası çözümlerin bolluğunu denemiş olsaydım, bu ilanı göndermezdim.

Bir .vbs dosyası kullanan bir yazılım geliştirdim ( exporter.vbs ) başka bir yazılım parçasından bir .exe yürütür ( reporter.exe ), istemci makinede yüklü olan.

Vaka Senaryolarını Kullan

Çalışan exporter.vbs elle (sağ tıkla ve aç) tam olarak beklendiği gibi mükemmel çalışıyor. Kendi makinemde Görev Zamanlayıcı üzerinden kendi Windows kullanıcım olarak çalıştığımda, tam olarak beklendiği gibi çalışıyor.

Bir istemcide Windows Server 2008/2012 kutusunda çalıştırıldığında, tam olarak beklendiği gibi mükemmel bir şekilde çalışıyor. Görev Zamanlayıcı üzerinden herhangi bir kullanıcı olarak çalıştırıldığında (Yöneticiler grubu hariç), Görev Zamanlayıcı 0x0 olarak geri bildirir, ancak reporter.exe beklendiği gibi dosyaları oluşturmamış.

Bir istemcide çalıştırıldığında, Windows Server 2008/2012 kutusuyla kullanıcı olarak çalışan Görev Zamanlayıcı üzerinden Yöneticiler , çalışır, ancak bir gecede (görevimiz çalışmaya ayarlandığında) çalışmaz.

Zamanlanmış Görev Ayarı - Genel

enter image description here

Zamanlanmış Görev Ayarı - İşlemler

enter image description here

Scriptler

Yukarıdaki senaryolarda exporter.vbs Komut dosyasının diğer bölümleri çalışırken komut dosyasının bu aşamasında tetikleniyor gibi görünüyor (komut dosyasının diğer kısmı hedef XML dosyalarını boşaltıyor).

Function Export(filepath, report)
    dim fso
    set fso_tidy = CreateObject("Scripting.FileSystemObject")

    if fso_tidy.FileExists(filepath)=true then

        set fso_tidy = nothing

        set oShell = CreateObject("WScript.Shell")
        oShell.Run """"&simsdir&"\CommandReporter.exe"" /QUIET /user="""&simsu&""" /password="""&simsp&""" /REPORT:"""&report&" v"&rptv&""" /OUTPUT:"""&filepath&"""", 0, true

        set oShell = nothing

        set fso_tidy = CreateObject("Scripting.FileSystemObject")
        set objFile = fso_tidy.GetFile(filepath)

        if objFile.size > 64 then
            size = round(objFile.size / 1024, 1)
            WriteToLog "DATA", "(OK) "&report&" EXPORTED (size: "&size&"kb)"
        else
            WriteToLog "DATA", "(FAILED) "&report&" EXPORTED (size: "&size&"kb)"
        end if

        set objFile = nothing

    end if

    set fso_tidy = nothing
end Function

Bu fonksiyon 5 kez denir, her rapor için bir defa Yazılımdan veri vermemiz gerekir.

Ne denendi zaten

  • Yazılımımın klasöründe tam kullanıcı izinleri
  • İstemci sunucusunda yerel veya etki alanı düzeyinde olsun, her kullanıcı olarak çalışmayı denedi
  • Cscript.exe aracını kullanarak vbs çalıştırmayı denedi

VBS, dosyaları değiştirirseniz Görev Zamanlayıcı'dan nasıl çalıştırılması gerektiğine ilişkin olarak eksik olduğum bir şey var mı?


içinde Aksiyon : ya betiğinize tam nitelikli bir yol sağlamak, ör. C:\scripts\exporter.vbs, veya sağlamak C:\Windows\System32\cscript.exe program / script alanında ve C:\scripts\exporter.vbs bağımsız değişken alanında.
JosefZ

@JosefZ ne yazık ki denedi ve işe yaramadı.
itsphilz

Akla gelen bir şey çalışma dizinidir. Bunu zamanlanmış görevde ayarladın mı? Zamanlanan görevde bu alana "Başlat (isteğe bağlı)" adı verilir.
Syberdoor

@Syberdoor evet, ne yazık ki denedim.
itsphilz

Yanıtlar:


0

Yerel Sistem hesabı bağlamında çalışmak üzere ayarlanmış bir göreviniz var. Sistem hesabı tam gelişmiş bir etkileşimli kullanıcı değildir, bu nedenle her şey bu bağlamda çalışmayacaktır. Görevler için kullanırken aşağıdaki hususları göz önünde bulundurmalısınız:

  • Yerel Sistem, bilgisayar hesap bilgilerinizi ağa sunar (ör. COMPUTERNAME$ ), öyleyse filepath ağ paylaşımındaysa, yerel bilgisayar hesabının kendisine (veya Everyone grubuna) özel olarak izin vermesi gerekir.
  • Yerel Sistem bir kullanıcı profiline sahip değil (teknik olarak ancak hiçbir şey yok). Kullanıcı başına bir kayıt defteri ayarına veya dosya sistemi konumuna karşılık gelen herhangi bir şey muhtemelen başarısız olur.
  • Yerel Sistem olarak çalışan işlemler kullanıcıyla etkileşime giremez, bu nedenle komut dosyanız bir iletişim kutusu açarsa kullanıcı onu görmez.

Görevinizi Sistem hesabı yerine iyi niyetli bir yerel veya etki alanı hesabı olarak çalıştırmayı deneyin. Elbette, çalışması için şifreyi göreve dahil etmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.