Sziasztok,
VBScriptel kapcsolatban szeretnék segítséget kérni.
Olyan VBScriptet szeretnék csinálni amely megnézi egy adott fájl aktuális méretét és a legutolsó módosításának a dátumát és ezt kiiratnám egy html felületre.
Ha ez megvan akkor kibővíteném úgy, hogy egy adott mappába megnézném, hogy melyik belső mappa a legfrissebb.
Mivel kezdő vagyok a témában, eddig működő verziót nem sikerült létrehoznom és a neten sem találtam semmi használható megoldást erre.
Köszönöm a segítséget.
- 469 megtekintés
 
Hozzászólások
Miért épp vbscriptet szeretnél csinálni erre? Hol akadtál el?
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
 
azért vbscriptet, mert már van egy nagyobb működő lekérdezés csoport amihez szeretném majd hozzárakni ezeket.
jelenleg itt tartok:
Dim fso:Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Dim oFolder:Set oFolder = fso.GetFile( "file elérési út")
Wscript.Echo "Fájl neve "& oFolder.Name & " : " & round(oFolder.Size/1024/1024,2)&" MB"
ez működik szépen kiírja a file méretét, de a dátumát nemtom hogy kell.
- A hozzászóláshoz be kell jelentkezni
 
Wscript.Echo "Fájl utolsó módosítás : " & (oFolder.DateLastModified)
Érdemes olvasni a lentebb linkelt doksit: https://ss64.com/vb/filesystemobject.html
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
 
köszi így sikerült kiírja a dátumot is szépen.
viszont azzal a hibával szembesültem, hogy ha egymás után több fájlnak az adatait akarom kiiratni mindig csak a "sorban" utolsót írja ki. mit csinálok rosszul?
//az "strbody5" el egy html felületre iratom ki.
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("\\fájl elérési út\fájl")
strBody5= "<hr> "& objFile.Name & " utolso modositasanak datuma: "& objFile.DateLastModified &"<hr>  "&  objFile.Name & " merete: " & round(objFile.Size/1024/1024,2)&" MB"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("\\fájl elérési út\fájl2")
strBody5= "<hr> "& objFile.Name & " utolso modositasanak datuma: "& objFile.DateLastModified &"<hr>  "&  objFile.Name & " merete: " & round(objFile.Size/1024/1024,2)&" MB"
- A hozzászóláshoz be kell jelentkezni
 
Az utolsó sor strBody5= akármi utasítása felülírja akármivel a strBody5 változó eddigi tartalmát, ahelyett, hogy hozzáfűzné a korábbihoz. Inkább így legyen:
strBody5= strBody5 & akármi
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
 
így sikerült köszönöm :)
és szerinted azt, hogy adott mappába megnézném, hogy melyik belső mappa a legfrissebb azt hogyan érdemes megcsinálni?
gondoltam először végigmegyek az adott mappák módosítási dátumán egy "foreach-el".
- A hozzászóláshoz be kell jelentkezni
 
igen pontosítom bocsi.
Azt szeretném vizsgálni, hogy van egy mappa amibe naponta generálódik sok, DATA... kezdőnevű mappa és ezek közül szeretném azt kiiratni, amelyik a script futtatásának idejéhez képest a legutóbb jött létre. Vagyis melyik a legkésőbb létrejött DATA% kezdőnevű mappa.
A mappák nevei úgy generálódnak, hogy data+időpont, ezért arra gondoltam, hogy valami if-es vizsgálattal megnézem DATA% és utána a létrejöttének az időpontját vizsgálom valahogy, de itt el is akadtam :D
- A hozzászóláshoz be kell jelentkezni
 
Ebben pontosan mi okoz nehézséget? Vannak rá kész példák, megtalálod. Ha vannak/lesznek/lehetnek a könyvtárban nem DATA* nevű könyvtárak is, akkor elhelyezel egy ezt vizsgáló feltételes utasítást. Ha nem tudod, hogyan kell karakterláncot vizsgálni, rákeresel, megérted, alkalmazod. Te is leírtad, mit kellene csinálni ("foreach", "if"), szóval jó lenne tudni, mi akadályoz meg abban, hogy csináld? Nem egyértelmű a nyelv szintaktikája, vagy hol akad el a folyamat?
:)
- A hozzászóláshoz be kell jelentkezni
 
közben találtam rá megoldást lejjebb írtam, hogy ott akadtam meg, hogy csak a DATA kezdetű mappákat vizsgáljam.
- A hozzászóláshoz be kell jelentkezni
 
találtam egy ilyen scriptet:
és ez le is fut szépen csak azt nemtom, hogy hogyan pontosítsam, hogy csak a DATA kezdőnevűeket irassa ki.
Erre esetleg van ötleted?
Function GetRecentFolder(path)
  Dim fso, folder
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set GetRecentFolder = Nothing
  For Each folder in fso.GetFolder(path).SubFolders
    If GetRecentFolder is Nothing Then
      Set GetRecentFolder = folder
    ElseIf folder.DateLastModified > GetRecentFolder.DateLastModified Then
      Set GetRecentFolder = folder
    End If
  Next
End Function
Dim recentFile
Set recentFile = GetRecentFolder("c:\Elérési út")
If recentFile is Nothing Then
  WScript.Echo "No recent files found"
Else
  WScript.Echo "Recent file is " & recentFile.Name & " " & recentFile.DateLastModified
End If
- A hozzászóláshoz be kell jelentkezni
 
Szerintem a FileSystemObject elérhető VBscript-re is.
- A hozzászóláshoz be kell jelentkezni
 
Nagyon ugy tunik. A felsorolas mogott van pelda is.
Udv.
- A hozzászóláshoz be kell jelentkezni
 
Sikerült megcsinálni a scriptet, itt van hátha más is tudja hasznosítani:
Function GetRecentFolder(path)
  Dim fso, folder
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set GetRecentFolder = Nothing
  For Each folder in fso.GetFolder(path).SubFolders
    If GetRecentFolder is Nothing  Then
      Set GetRecentFolder = folder
    ElseIf folder.DateLastModified > GetRecentFolder.DateLastModified AND instr (folder.Name, "DATA") Then
      Set GetRecentFolder = folder
    End If
  Next
End Function
- A hozzászóláshoz be kell jelentkezni
 
Hibás eredményt adhat, mert az összehasonlításból nincs kizárva a DATA karakterláncot nem tartalmazó könyvtárnevek vizsgálata. Az instr-t vidd a feltételes utasításon kívülre.
Ha valóban csak könyvtárnév eleji egyezést szeretnél, az instr(...) = 1 formát használd.
Ha azt szeretnéd, hogy ne számítson a kis/nagybetű, használd az Option Compare utasítást, vagy a compare paramétert: instr(1, folder.Name, "DATA", 1).
Csak név eleji egyezés + kis/nagybetű nem számít:
Function GetRecentDATAFolder(path)
  Dim fso, folder
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set GetRecentDATAFolder = Nothing
  For Each folder In fso.GetFolder(path).SubFolders
    If InStr(1, folder.Name, "DATA", 1) = 1 Then
      If GetRecentDATAFolder Is Nothing  Then
        Set GetRecentDATAFolder = folder
      ElseIf folder.DateLastModified > GetRecentDATAFolder.DateLastModified Then
        Set GetRecentDATAFolder = folder
      End If
    End If
  Next
End Function
(Nálam jelenleg elég hanyag a HUP vbscript-formázása.)
:)
- A hozzászóláshoz be kell jelentkezni
 
Olyan scriptet szeretnék még létrehozni ami egy adott szerveren megnézi a belépett usereket, kiírja aki bevan jelentkezve.
Eddig ezt találtam de nem működik.
Így néz ki a script:
strComputer = "."  
Set objWMI = GetObject("winmgmts:" _ 
              & "{impersonationLevel=impersonate}!\\" _ 
              & strComputer & "\root\cimv2") 
Set colSessions = objWMI.ExecQuery _ 
    ("Select * from Win32_LogonSession Where LogonType = 10") 
If colSessions.Count = 0 Then 
   Wscript.Echo "No interactive users found" 
Else 
   WScript.Echo "RDP Sessions:"
   For Each objSession in colSessions 
     Set colList = objWMI.ExecQuery("Associators of " _ 
         & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _ 
         & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" ) 
     For Each objItem in colList 
       WScript.Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName 
     Next 
   Next 
End If
valakinek van ötlete, hogy mi leheta probléma?
- A hozzászóláshoz be kell jelentkezni
 
lefutás után csak a "No interactive users found" adja vissza, pedig van bejelentkezett felhasználó.
Több szerveren és gépen is teszteltem.
- A hozzászóláshoz be kell jelentkezni