Avatar billede djicep Nybegynder
23. maj 2011 - 16:47 Der er 8 kommentarer og
1 løsning

Bat fil der kontakter 2 usb drev hver 5 minut ?

Hejsa Eksperter.

Jeg har en Synology DS211 og har sluttet 2 USB diske til denne.
Problemet med disse Drev er at selvom jeg i DSM (Synology Styresystem) har valgt at den ikke skal slukke drevene eller få dem i dvale sker det alligevel.

Jeg kunne så godt tænke mig at have et lille simpelt script som kontakter diskene hver 5 minut ca for at de ikke går i dvale ?

Ved slet ikke om dette kan lade sig gøre, men hvis det kan ville jeg hører om nogle af jer ved hvordan man gør ?

Har nemlig aldrig prøvet dette før ?

På forhånd tak.

//Lars
Avatar billede amews_aj Nybegynder
23. maj 2011 - 17:04 #1
Windows har også en indstilling for hvorvidt den skal suspend'e USB enheder. Måske du skulle prøve at slå dette fra også?
Avatar billede djicep Nybegynder
23. maj 2011 - 17:06 #2
Oki men det er jo en Synology de sidder til på ? så regner ikke med det ændre noget hvis jeg sidder her på Windows
Avatar billede djicep Nybegynder
23. maj 2011 - 17:13 #3
Det skal siges der er ingen problemer med Diskene i Synologyen.

De går ikke i dvale, men det gør de 2 usb diske som sidder på Synologyen.

Derfor tænker jeg det kunne være fint hvis man kunne få noget til at gå ind på de 2 drev hver 5 min ca for at de ikke går i dvale, tror bare ikke det hjælper at ændre noget her i windows ? :S
Men ved ikke ?
Avatar billede heinzdmx Nybegynder
23. maj 2011 - 17:18 #4
Det er ikke et job for bat, men nok nærmere et job for et program (exe) eller et script (vbs).

Følgende burde kunne få dig i gang:

' Monitors a designated folder

Option explicit

Dim strComputer, objWMIService
Dim strFolderName1, strFolderName2
Dim objLatestEvent, colMonitoredEvents, intMonitorInterval
Dim arrNewFile, strFullName

Dim objFSO  : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell : Set objShell = CreateObject("Shell.Application")
Dim objFile, objFolder, objFolderItem

'=  =  =  =  =  =  =  =  =  =  =  =  =  =
'=  =  =  =  =  =  =  =  =  =  =  =  =  =

'> > > > SET FOLDER NAME HERE < < < <

strFolderName1 = "C:\test"

'> > > > SET MONITOR INTERVAL HERE (in seconds) < < < <

intMonitorInterval = 5

'=  =  =  =  =  =  =  =  =  =  =  =  =  =
'=  =  =  =  =  =  =  =  =  =  =  =  =  =

wscript.echo "Starting to monitor " & chr(34) & strFolderName1 & chr(34) & " now"

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

' specifying directory name for query below is weird: you need four backslashes
' for each backslash and the filename must be surrounded by quotes
strFolderName2 = chr(34) & Replace(strFolderName1, "\", "\\\\") & chr(34)

' statement below creates event that monitors a folder for new files every 5 seconds;
' change "WITHIN 5" to another value to change the time interval

'    ("SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " _
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceCreationEvent WITHIN " & intMonitorInterval & " WHERE " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=" & strFolderName2 & "'")

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
   
    arrNewFile = Split(objLatestEvent.TargetInstance.PartComponent, "=")
    strFullName = arrNewFile(1)
    strFullName = Replace(strFullName, "\\", "\")
    strFullName = Replace(strFullName, Chr(34), "")

    Set objFolder = objShell.Namespace(strFolderName1)
    Set objFolderItem = objFolder.ParseName(GetFileName(strFullName))
   
    wscript.sleep 20000

    Set objLatestEvent = Nothing
    Set objFile = Nothing

Loop

'=  =  =  =  =  =  =  =  =  =  =  =  =  =

Function GetFileName(strFull)
' returns the portion of the passed string that is after the final
' backslash, e.g., just the file name from a full path name

    Dim intSlashPos

    intSlashPos = Instr(strFull,"\")

    if intSlashPos = 0 then
      GetFileName = strFull
    else
      GetFileName = GetFileName(Right(strFull, Len(strFull) - intSlashPos))
    end if

End Function


Taget fra http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Server/2003_Server/Q_24308747.html

[Se nederst på siden, så behøves du ikke lave et signup]
Avatar billede amews_aj Nybegynder
23. maj 2011 - 17:20 #5
Det har du ret i. Tænkte ikke lige over der var tale om NAS.
Det er bestemt muligt at lave et lille program der kontakter diskene med korte mellemrum hvis det er det du ønsker.
Det er jo ikke en særlig pæn løsning, så måske du skulle høre om andre oplever det samme problem som dig, og har en bedre løsning...
Avatar billede djicep Nybegynder
23. maj 2011 - 17:23 #6
Ved godt det ikke er en pæn løsning. Men kan bare ikke se hvad jeg kan gøre når jeg på Synologyen har slået dvale fra også på USB drevene, men det ser ikke ud til at ha virket. :S
Avatar billede djicep Nybegynder
23. maj 2011 - 17:25 #7
Tror måske det er en funktion som ligger i de eksterne harddiske. Så selvom synologyen har funktionen slået fra så er der noget i selve diskene som gør det ?? :S
Avatar billede heinzdmx Nybegynder
23. maj 2011 - 17:27 #8
Men hvorfor er det du ikke vil have de går i dvale?

De gør det jo for at forlænge deres levetid ved at lave et spindown når de ikke bruges.
Avatar billede djicep Nybegynder
27. december 2011 - 15:24 #9
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester