Jump to content

Enabling defrag for those less fortunate enough to have admin rights


Recommended Posts

Posted

We have a certain member of staff here who does not like not having admin rights to her school issued laptop. Of course this means we are forever getting complaints that she cant do this that or the other. Well, every request has been dealt with by way of permissions or minor GP changes as they were reasonable, but still no admin rights needed xD

 

She has now asked if she can have rights to defrag her laptop.

 

I mean wtf.. I didn't think NTFS defragged that badly anyway to have to perform routing defrags, but as it happens I can't seem to enable this feature. I've enabled the defrag MMC in GP but still the user does not have any rights.

 

Whats the best way of going about this to allow a non-administrative user rights to defrag? Apart from telling her to sawd awf..?

Posted

You may be able to script it - use a RunAsSet in AutoIT which fires off the default defrag tool - or have you tried running it from a command line ?

 

defrag c: -f

Posted
What you could do (depending on how much you trust the people in quesiton) is within the Local Group Policy of the machine assign them the right to 'perform volume maintainence tasks'. This will allow them to defrag a volume with out admin rights then you don't have to reply on schedules and whether the machine is on or not etc... - it does however allow others things, such as disk converstions.
  • Thanks 1
Posted

Does she even know what defragging is? I had another user recently who asked a similar question but I put them right and said it wasn't necessary.

 

And secondly, if there was a serious Windows problem I could re-image in 10 minutes. Defragging can take much longer. I'd also allow Scandisk whilst you're at it, as sometimes Defrag won't run if the hard drive is more than 10% fragmented.

Posted

We copy the following vbs to c:\defrag and run task.vbs

For domain workstations we use a startup script to see if it is there and if it isn't we copy it onto the workstations and run task.vbs

defrag.vbs is scheduled to run on Wed at 12:30

 

 

'defrag.vbs

'Defrags all hard disks - Can be run as a Scheduled Task

'Modified to create an error log and display it

'© Doug Knox - 4/13/2002

 

Option Explicit

 

Dim WshShell, fso, d, dc, ErrStr(), Return, X, A(), MyFile, I, MyBox, Drive

 

Set WshShell = WScript.CreateObject("WScript.Shell")

Set fso = CreateObject("Scripting.FileSystemObject")

X = 0

 

Set dc = fso.Drives

For Each d in DC

If d.DriveType = 2 Then

X = X + 1

 

'Determine drive letter of first fixed disk

'This is the drive that the error report will be placed on

If X = 1 Then

Drive = d

End If

End If

Next

 

ReDim A(X)

ReDim ErrStr(X)

 

X = 0

For Each d in dc

If d.DriveType = 2 Then

X = X + 1

Return = WshShell.Run("defrag " & d & " -f", 1, TRUE)

 

'Determine the Error code returned by Defrag for the current drive and save it

If return = 0 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag completed successfully" & vbCRLF

elseif return = 1 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (defrag was cancelled manually) " & vbCRLF

elseif return = 2 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (there was a command line error. Check your command line for valid switches and drives)" & vbCRLF

elseif return = 3 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (there was an unknown error)" & vbCRLF

elseif return = 4 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (defrag could not run due to insufficient memory resources)" & vbCRLF

'errorlevel 5 is not currently used

elseif return = 5 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (general error)" & vbCRLF

elseif return = 6 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & "(System error: either the account used to run defrag is not an administrator, there is a problem loading the resource DLL, or a defrag engine could not be accessed. Check for proper user permissions and run Sfc.exe to validate system files)" & vbCRLF

elseif return = 7 then

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with error level " & return & " (There is not enough free space on the drive. Defrag needs 15% free space to run on a volume)" & vbCRLF

else

ErrStr(x) = ErrStr(x) & "Drive " & d & " Defrag aborted with an unknown error level: " & return & vbCRLF

end if

 

End If

Next

 

'Create the Error Report in the root of the first fixed disk.

Set MyFile = fso.OpenTextFile(Drive & "\defragreport.txt", 2, True)

MyFile.WriteLine(Date) & vbCRLF

MyFile.WriteLine(Time) & vbCRLF

For I = 1 to X

MyFile.WriteLine(ErrStr(I))

Next

MyFile.Close

 

Return = WshShell.Run(Drive & "\defragreport.txt",3,True)

 

Set WshShell = Nothing

Set fso = Nothing

 

 

 

'task.vbs

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

 

Set objNewJob = objWMIService.Get("Win32_ScheduledJob")

 

errJobCreated = objNewJob.Create _

("c:\defrag\defrag.vbs", "********123000.000000-000", _

True , 4, , , JobID)

Wscript.Echo errJobCreated

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...