locked
Username változó Visual Basic szkripthez RRS feed

  • Question

  •  

    Sziasztok!

     

    Van egy Visual Basic szkriptem, ami törli a temp tartalmát kijelentkezéskor.

     

    Dim Temp

    Set Tem.......

    If Temp.FolderExists..... Then

    Temp.DeleteFolder

     

    A harmadik sorban meg van adva ugye az elérési útvonal, Documents and Settings\username\Local S.....

     

    Meg lehet e oldani azt, hogy a %username% változót behelyettesítse a szkript?

     

     

    Wednesday, March 5, 2008 2:56 PM

Answers

  • Oooo .. majdnem Smile

     

    A VBScriptbol nem hivatkozhatsz kozvetlenul a kornyezeti valtozokra, szintaktikai hiba miatt elhasal.

     

    Ha tenyleg maradunk a vbscriptnel, akkor kb igy tudod a UserName -t beilleszteni a FolderCreate parameterebe:

     

    Set WshNetwork = WScript.CreateObject("WScript.Network")
    UserName = WshNetwork.UserName

    ...FolderCreate("C:\Documents and Settings\" & UserName & "local...."

     

    De tovabbmegyek: mi garantalja hogy a a C: -n van a Document and Settings? Semmi, csak a ceges standard Smile

     

    Szoval ez nalam kb igy nezne ki:

     

    Code Snippet

    Option Explicit

     

    Dim objFSO, objFolder, objShell, strDirectory, ProfilePath, TempPath

     

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = Wscript.CreateObject("Wscript.Shell")

     

    ProfilePath = oBJShell.ExpandEnvironmentStrings("%USERPROFILE%")
    TempPath = ProfilePath + "\Local Settings\Temp"


    If Not objFSO.FolderExists(TempPath) Then
       Set objFolder = objFSO.CreateFolder(TempPath)
    End If

     

     

    JoeX

    Thursday, March 6, 2008 2:06 PM

All replies

  • Szia!

    Minden további nélkül meg lehet oldani... Lekérdezhető system hívásokkal a teljes usernév, és be is helyettesíthető...

    De:

    Miért bonyolítod ennyire? Ha csak a temp könyvtár tartalmát kell kiürítened, akkor nem lenne egyszerűbb egy batch file, ami  a következőt tartalmazza?

    c:
    cd %temp%
    del *.* /q/s/f

    Ebben semmi varázslás nincs, és nem kell usernév sem...

    Pistok
    Wednesday, March 5, 2008 3:31 PM
  •  

    Sikerült teljesen mást írnom a kérdésbe, mint amit szerettem volna!

    Igazából nem a temp törléséről, hanem létrehozásáról van szó.

     

    Azért ez a bonyolítás, mert kaptunk egy integrált rendszert, ami a temp könyvtárat használja, majd befejezéskor időnként törli, és nem csak a tartalmát, hanem az egész könyvtárat.

    Legtöbbször a Windows a gép újraindulásakor létrehozza, ha nincs, de viszonylag sokszor előfordul, hogy mégsem. És ilyenkor a program nem indul el a felhasználóknak, sőt még az Office alkalmazások sem szeretik, ha ez nem létezik.

    Szóval ezért ez a szkript, amiben megvizsgálom, hogy létrejött-e, és ha nem, akkor megoldja.

    És nem DeleteFolder-rel, hanem FolderCreate-tel természetesen.

    Viszont ahhoz, hogy eljussak a Temp-ig, a szkriptben minden egyes felhaszálónak megadtuk a login nevét, és külön login szkripteket futtatunk náluk bejelentkezéskor. Ezt kellene kiváltani egy szkripttel, ami ezt a paramétert dinamikusan kezeli.

     

    Vagy nem tudom, hogy egyszerűbben még hogyan lehetne megoldani.

     

    S...

    Wednesday, March 5, 2008 7:02 PM
  • Szia!

    Megint hasonló a helyzet... Felesleges vizsgálni... a script küldjön el egy mkdir %temp% (set %temp% -al vagy az echo %temp% -al ellenőrizheted, hogy jó az útvonal..) parancsot... ha van, akkor van egy errorlevel (de az kit érdekel Smile), ha meg nincs, akkor létrehozza Smile

    Maximum akkor érdekes, ha mindezt el akarod rejteni a t. user elől. Ekkor annyi a vbscript, hogy batch-t start utvonal\batch /min formában indítod el... (Azt nem tudom, hogy vbscript-ben van-e a visualbasicos "shell parancsneve parancs_paramteterek futtatasi_parameterek" megoldás...)

    Pistok
    Wednesday, March 5, 2008 8:03 PM
  • Sanca, ha nagyon eroltetni akarod a VBSCriptet, am legyen (en is szeretem hasznalni) .. de ha meg lehet egy sorral is oldani, ahogy Pistok irta...

     

    Szoval ha kitartasz a vbscript mellett, akkor:

     

    Code Snippet

    Set oShell = Wscript.CreateObject("Wscript.Shell")
    UserName = oShell.ExpandEnvironmentStrings("%USERNAME%")

     

    vagy ami szebb:

     

    Code Snippet
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    UserName = WshNetwork.UserName

     

    JoeX

    Thursday, March 6, 2008 6:35 AM
  • Pistok, szerintem a legjobb ha el akarod rejteni a juzered elol a szkriptedet, a "titkositas". Mar csak azert is, mert hiaba rejted el a juzer elol a futast, haladobbak siman beleolvasnak a forrashelyrol (legtobbszor innen: \\szerver\netlogon\) a kodba hiszen Read joguk ugye minimum van a fajlon. Persze ez nem konyvtarletrehozos szkriptek eseten erdekes, hanem mondjuk ahol kenytelen vagy domain admin jelszot a szkriptbe egetni.

     

    Windows Script Encoder. Letoltheted innen.

     

    JoeX

    Thursday, March 6, 2008 7:12 AM
  • Köszi a linket JoeX! Speciel ezt én annakidején nem logon scripttel, hanem logon programmal oldottam meg. Az megjelenő form nélkül indult (volt néhány userzaklató funkciója Smile), s az indítgatott mindent hidden flaggal. Az egyszerű megoldást meg azért vetettem fel, mert erre a munkára ez bőven elég Smile, nem kell "feleslegesen" - létezik ilyen szó az IT(biztonság)-ben? Smile - bonyolítani.

    De jó pap holtig tanul... (Nem ártana belemélyednem a vbscript és powershell és társai körébe sem Smile)
    Thursday, March 6, 2008 7:20 AM
  •  Pistok wrote:
    Köszi a linket JoeX! ....

    De jó pap holtig tanul... (Nem ártana belemélyednem a vbscript és powershell és társai körébe sem )

     

    Szivesen. Es igen .. a PowerShel-be piszok gyorsan el kellene melyednem nekem is. Amikor "bejott", megprobaltam egy regi batch fajlt atirni PS-re (batch file nagyjabol 20 soros lett, utemezetten, minden nap, 2 fele fajlt kellett masolnom egy szerverrol, de a fajlok nevei eleg erdekesen alakultak, rovidebben sehogy sem tudtam megoldani). Az eredmeny: 20 sorbol lett egy 2 soros programom: mindket fajlra egy-egy sor. Igaz, jo hosszu sor lett Smile, de akkor is, megdobbento hogy mennyi lehetoseg van a PS-ben.

     

    JoeX

    Thursday, March 6, 2008 8:28 AM
  • Köszönöm az eddigi segítségeteket is!

     

    A legszebb az egészben, ha sikerül egy egyszerű problémát kellőképpen túlbonyolítani.

    Az "mkdir %temp%" tényleg a legegyszerűbb megoldás, így nem ragaszkodom a VB-hez.

    Viszont a rejtett üzemmód nem sikerült. Végül is ha nincs bent "pause" a batch-ben, akkor csak egy villanást lát a gyanútlan felhasználó a hibaüzenet helyett. 

    Próbálkoztam VB-ben az alábbi módon, hogy meghívjam ezt a batch-t, miután kiértékelte, hogy létezik-e a könyvtár:

    Set WshShell = WScript.CreateObject ("WSCript.Shell")
    WshShell.Run "C:\Documents and Settings\ujhelyis\Asztal\Visual Basic\tempcreate.bat"
    Set WshShell = Nothing

     

    Ez viszont nem akar működni.

    Ezek után végképp nem tudom, hogy a rejtett módot hogyan kellene megoldani, ha még a sima futást sem tudom meghívni a szkriptben.

    Thursday, March 6, 2008 12:48 PM
  • A rejtett mód a Script Encoder-rel OK, viszont a Batch meghívása nem megy.

     

    Ha pedig csak VB-t szeretnék használni, akkor a UserName változót ugyan be tudom kérni a fentiek alapján, viszont nem tudom beilleszteni az elérési útvonalba.

     

    Valami.FolderCreate "C:\Documents and Settings\%username%\Local...."

     

     

    Thursday, March 6, 2008 1:00 PM
  • Még mindig bonyulult a megoldás amit akarsz Smile

    Miért ellenőrzöd, hogy van-e könyvtár? Ha már "dos" paranncsal hozd létre, akkor nem kell ellenőrizned. (Nem kell hibátkezelned) A mkdir esetén akár van, akár nincs lefut a script...

    Másrészt az én emgoldásomnál nem kell vbscript sehol...

    lerakod a mktemp.bat -ot a kozosmegosztas megosztásba a szerveren, s a logonscriptnél ennyit adsz meg:

    \\szerver\kozosmegosztas\akarmiutvonal\mktemp.bat

    ---

    Ha vbscriptben akarod csinálni, akkor meg nem az általad vázolt módon kell megadni - szerintem -, hanem így:

    Valami.FolderCreate "C:\Documents and Settings\" & %usnername% & "local...."

    esetleg
    változókba betenni az egzakt útvonal részeit, és
    $valtozo=%username
    majd
    Valami.FolderCreate valtozo1 + (vagy &?) valtozo + (vagy &?) valtozo2

    de akkor már menne a következő is:

    Valami.FolderCreate %temp%

    De a vbscriptbe nem mennék bele, nem értek hozzá, csak a visualbasicos emlékeim alapján mondom ezt...

    Thursday, March 6, 2008 1:22 PM
  • Oooo .. majdnem Smile

     

    A VBScriptbol nem hivatkozhatsz kozvetlenul a kornyezeti valtozokra, szintaktikai hiba miatt elhasal.

     

    Ha tenyleg maradunk a vbscriptnel, akkor kb igy tudod a UserName -t beilleszteni a FolderCreate parameterebe:

     

    Set WshNetwork = WScript.CreateObject("WScript.Network")
    UserName = WshNetwork.UserName

    ...FolderCreate("C:\Documents and Settings\" & UserName & "local...."

     

    De tovabbmegyek: mi garantalja hogy a a C: -n van a Document and Settings? Semmi, csak a ceges standard Smile

     

    Szoval ez nalam kb igy nezne ki:

     

    Code Snippet

    Option Explicit

     

    Dim objFSO, objFolder, objShell, strDirectory, ProfilePath, TempPath

     

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = Wscript.CreateObject("Wscript.Shell")

     

    ProfilePath = oBJShell.ExpandEnvironmentStrings("%USERPROFILE%")
    TempPath = ProfilePath + "\Local Settings\Temp"


    If Not objFSO.FolderExists(TempPath) Then
       Set objFolder = objFSO.CreateFolder(TempPath)
    End If

     

     

    JoeX

    Thursday, March 6, 2008 2:06 PM
  • Hát így már tökéletes a helyzet.

    Köszönöm!!!

    Jó a batch is, és a Script is. És az Encoder is klassz dolog.

     

    Azt tudtam egyébként, hogy nem lehet a FolderCreate-ben a környezeti változó, csak azért írtam így, hogy kiemeljem, melyik paramétert nem tudom neki átadni.

     

    Most már tényleg csak egy kérdés!

     

    A taskkill /im iexplore.exe konzol parancsot be lehetne ültetni még egy batch-be? Esetleg VB szkriptbe?

     

     

    Friday, March 7, 2008 7:36 AM
  • Öööö ezt a taskill-es kérdésed nem értem...

    Ha az a cél, hogy ne internetezzen az emberünk, akkor blokkold a programot policy-ben... (csúnya megoldás lenne az alábbi batch (és nem is elrejthető Smile):
    ugorjide:
    taskkill /im iexplore.exe
    goto ugorjide

    Big Smile

    Ha az a cél, hogy az "állandóan lefagyó" explorered lövöldözze ki az user, akkor elég az az 1 sor a batch-ba, és shortcut az asztalra.
    Friday, March 7, 2008 8:52 AM
  • Igen, ez a cél. Mert a fentebb leírt program,  ami miatt ez az egész lavina elindult, nem csak a Temp mappába szemetel és törli időnként, hanem lefagyasztja az explorert is!

     

    Ezért szeretnék a felhasználóknak egy "ide kattints, ha lefagyott az explorer a program miatt" shortcut-ot!

     

    Viszont ha csak ezt az egy sort szúrom be a batch-be, akkor végtelen ciklushoz hasonlító folyamatban nem záródik be a konzol ablak, és csak "break"-kel tudom kilőni. 

    Pedig konzolból lefut rendesen, és csak egyszer.

     

    Friday, March 7, 2008 9:55 AM
  • No ezt nem bannam, ha tenyleg lenne ra megoldas.

    Nalam egy route-bejegyzes van ugyanigy: parancs-sorbol lefut szepen egyszer, batch-bol vegtelen ciklust okoz (s megvan az okom, hogy miert ne tegyem be permanentbe).

     

    A.

    Friday, March 7, 2008 9:58 AM
  • Magától nem lesz végtelen ciklus. Smile Van rá jogosultság? Vista vagy XP?

    Friday, March 7, 2008 10:12 AM
  • Flowman, de sajnos igen. Totalisan full jogokkal futtatom, XP-n - esetleg probald ki

     

    A.

    Friday, March 7, 2008 10:31 AM
  • Kiprobaljuk. De mit? Smile

     

    Idemasolod a batch fajlodat? Persze nem kell valodi IP cimeket irni, csak a modszert szeretnem latni.

     

    Nalam is hasznalnak juzerek batch fajlt route tabla modisitasara, de sehol sem tapasztalunk vegtelen ciklust. Nalunk is XP-n, es ha erdekes, route delete -ek vannak a batchben.

     

    JoeX

     

     

    Friday, March 7, 2008 11:39 AM
  • Gyakorlatilag egy sor:


    route add 10.1.0.0 mask 255.255.0.0 10.1.1.1

     

    A.

     

    Friday, March 7, 2008 11:43 AM
  • S ezt nem logon scriptbol, meg ilyesmi. Normal hasznalat kozben akarod modositani a route-tablat.

     

    A.

     

    Friday, March 7, 2008 11:46 AM
  • Hmm .. tenyleg nem elkepzelhetetlen .. mas is szivott vele:

     

    http://au.answers.yahoo.com/answers2/frontend.php/question?qid=20080221224925AA9kPT2

     

    JoeX

     

     

    Friday, March 7, 2008 11:46 AM
  • Tudom, en is halalra kerestem mar a neten... Ne kapjak RTFM-et

     

    A.
    Friday, March 7, 2008 11:49 AM
  • Es mi van ha igy probalod?

     

    cmd /c "route add 10.1.0.0 MASK 255.255.0.0 10.1.1.1"

     

    Nalam persze hibara futott mert nincs ilyen GW, de ha megadtam a letezot, siman felvette.

     

    De mondjuk CMD /C nelkul is ... szoval proba Smile

     

    JoeX

    Friday, March 7, 2008 12:28 PM
  • Ugyanaz. Fut a vegtelensegig

     

    A.
    Friday, March 7, 2008 12:34 PM
  • Mennyi halokartyad/halozati kapcsolatod van? Esetleg van elo VPN kapcsolat is amikor futtatod?

     

    JoeX

     

     

    Friday, March 7, 2008 12:36 PM
  • Lehet, hogy lassan uj szalat kellene ennek nyitni

    Szoval van egy vezetekes meg egy wifi kapcsolatom. VPN nem aktiv.

     

    Az ugye nem jatszik, hogy az egyiket kilovom, mert akkor ertelemszeruen minden forgalom a masikon megy ki, s nincs ertelme a routolasnak.

     

    S ha siman parancs-sorba bemasolom a batch-file tartalmat, csont nelkul lemegy. Tehat csak valami kisordog futtatja non-stop...

     

    A.

     

    Friday, March 7, 2008 12:45 PM
  • Ez vilagos. Na meg egy utolso: mi van ha egy olyan batch file-t futtatsz, ami NEM kapcsolodik a WiFi halozathoz. Tehat csak egy egyszerul dummy route a lokalis halo fele. Az is fagy? Egyebkent hogy nyilvanul meg ez a vegtelen ciklus? Felugrik a CMD ablak, latod a route add ... parancsot es ennyi, ott figyel az idok vegezeteig?

     

    Egyebkent nyithatsz neki Smile

     

    Friday, March 7, 2008 1:03 PM
  • Nem ertem, hogy mit ertesz azalatt, hogy nem kapcsolodik Wifi halozathoz? Egyebkent a wifi az elsodleges halozati kapcsolatom, s idonkent szeretnem a fenti alhalozatot a vezetekesen elerni (alapbol meg a wifin).

    A vegtelen ciklus ugy latszik, hogy a fekete ablakban tobbszor futtatja ugyanazt a sort. Ha Pause-al megallitom, akkor sem latok semmi hiba-vagy nem hiba uzenetet, csak ugyanazt a sort ismetli...

     

    A.

     

    Friday, March 7, 2008 1:11 PM
  • Mintha a batch-file ezt tartalmazna, ertelemszeruen az echo helyett a route parancsot.

     

    :a
    echo a
    @goto a:

     

    A.
    Friday, March 7, 2008 1:20 PM
  • Ugye a batch file neve nem route, vagy add vagy ilyesmi? Big Smile

    Friday, March 7, 2008 1:25 PM
  • Nem, az elozo peldaban nem akartam nagy szovegeket irni, azert lett mindenhol "a"

     

    A.
    Friday, March 7, 2008 1:30 PM
  • Akármit csinálok, akkor is működik nálam.

    Friday, March 7, 2008 1:33 PM
  •  Asteriksz wrote:
    Nem ertem, hogy mit ertesz azalatt, hogy nem kapcsolodik Wifi halozathoz?

     

    Igazad van, ez kisse pongyola volt Smile.

     

    Szoval: mondjuk a WiFI halozaton van egy ilyen cimed: 10.1.1.20/255.255.0.0

    A wired kapcsolatnal meg pl. egy ez: 192.168.1.188/255.255.255.0

     

    Probalj ki egy olyan route add-ot, ami sehogyan sem kapcsoldik/kotodik a WiFi halozathoz - meg akkor is, ha semmi ertelme nincs ... hiszen ennek a loopnak sincsen semmi ertelme, de megis letezik Smile

     

    Pl:

     

    route add 192.168.1.166 MASK 255.255.255.255 192.168.1.azatjarodcime

     

    Proba. Mit csinal?

     

    Es csak a hecc kedveert: mit csinal mondjuk a kovetkezo tartalmu BAT fajl?:

     

    notepad.exe

     

    Es mondjuk ez?

     

    route print >C:\rprint.txt

     

    Lett rprint.txt fajl a C:\ =n? Van is benne valami?

     

    JoeX

    Friday, March 7, 2008 2:43 PM
  • Es meg egy tipp (kiindulva FlowM@N gondolatabol, meg innen, hatha lapul valahol a PATH-ban meg egy route.exe):

     

    %systemroot%\System32\route.exe add .....

     

    Es ha mar a linket nezed, Stephanie-nek ugyanaz volt a gondja mint neked, nala a route -f + reboot megoldast hozott.

     

    JoeX

     

    Friday, March 7, 2008 2:54 PM
  • JoeX, kosz a linket, ez segitett

     

    Valami nagyon be lehetett ragadva, de egy nagytakaritas megoldotta

     

    A.

    Saturday, March 8, 2008 9:52 AM
  • Köszönöm én is a segítségeteket.

     

    Nálam is nagyjából megoldódott minden.

    A "taskkill" most már nem fut végtelenül.

     

    Viszont néha annyira befagy a processz, hogy nem tudja kilőni. Erre nincs még valami "force" lehetőség, hogy mindenképpen bezárja?

     

    S...

     

     

     

    Monday, March 10, 2008 4:17 PM
  • Taskkill ebből a szempontból nem szerencsés választás, PsKill mindjárt más tészta.

     

    http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx

     

    Persze taskkill-nek is van /F kapcsolója, csak általában semmire sem jó.

    Monday, March 10, 2008 4:22 PM
  • Köszönöm, ez így már tényleg tökéletes.

     

    És most már tényleg az utolsó kérdés:

     

    Olyan MsgBox-ot hogyan kell írni, ami választási lehetőséget is ad a szkript futtatása előtt. (OK/Cancel)?

     

    S...

     

     

    Tuesday, March 11, 2008 11:14 AM
  • Code Snippet

    @Echo Off

    :MainMenu
    CLS
    Color 9b
    Mode 65,6
    Title Yes No
    Echo.
    Echo    Yes To Do What Ever Needed
    Echo    No To Quit
    Echo.
    SET Select=
    SET /P Select= Type Yes Or No -^>
    IF /I '%Select%'=='Yes' GOTO Yes
    IF /I '%Select%'=='No' GOTO No
    CLs
    color FC
    Mode 60,4
    Echo.
    Echo   This reply %Select% is Not valid. Please try again.
    Echo.
    ping -n 3 127.0.0.1>nul
    Goto MainMenu

    :Yes
    CLs
    color F3
    Mode 60,5
    Echo.
    Echo Place What Ever You Need Here
    Echo.
    set /p = Press Enter To Return To Main
    Goto MainMenu

    :No
    Exit

     

     

    Ilyesmi. Smile

    Tuesday, March 11, 2008 4:01 PM
  • VB-vel picit egyszerűbb.

     

    Code Snippet
    Dim Reply
    Do
    Reply = MsgBox("Yes To Do Some Thing" & vbCrLf & "No To Exit", 4 + 32, "Yes No")
    If Reply = 6 Then
    '''' PLACE WHAT YOU WANT TO DO HERE
      MsgBox "User Said Yes", 0 + 32, "User Reply Yes"
    End If  
    If Reply = 7 Then
      MsgBox "User Said No", 0 + 32, "Exit Script"
    End If
    Loop Until Reply = 7

     

     


    Tuesday, March 11, 2008 4:05 PM
  • Köszönöm, most már tényleg minden szép és jó!

     

    Sanca...

     

    Saturday, March 15, 2008 6:53 PM