Answered by:
Username változó Visual Basic szkripthez

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
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
Szoval ez nalam kb igy nezne ki:
Code SnippetOption 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 IfJoeX
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...
PistokWednesday, 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), ha meg nincs, akkor létrehozza
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...)
PistokWednesday, 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 SnippetSet oShell = Wscript.CreateObject("Wscript.Shell")
UserName = oShell.ExpandEnvironmentStrings("%USERNAME%")vagy ami szebb:
Code SnippetSet WshNetwork = WScript.CreateObject("WScript.Network")
UserName = WshNetwork.UserNameJoeX
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
), 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
, nem kell "feleslegesen" - létezik ilyen szó az IT(biztonság)-ben?
- bonyolítani.
De jó pap holtig tanul... (Nem ártana belemélyednem a vbscript és powershell és társai körébe sem)
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
, 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 = NothingEz 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
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
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
Szoval ez nalam kb igy nezne ki:
Code SnippetOption 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 IfJoeX
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ő):
ugorjide:
taskkill /im iexplore.exe
goto ugorjide
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.
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?
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.1A.
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-etFriday, 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
JoeX
Friday, March 7, 2008 12:28 PM -
Ugyanaz. Fut a vegtelensegigFriday, 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
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:Friday, March 7, 2008 1:20 PM -
Ugye a batch file neve nem route, vagy add vagy ilyesmi?
Friday, March 7, 2008 1:25 PM -
Nem, az elozo peldaban nem akartam nagy szovegeket irni, azert lett mindenhol "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
.
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
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 -
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
ExitIlyesmi.
Tuesday, March 11, 2008 4:01 PM -
VB-vel picit egyszerűbb.
Code SnippetDim 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