borber
Goto Top

Remote-Ordner löschen

Hallo,

ich habe mir ein Script gebastelt, das mir die lokalen Profile aller User bis auf die Administratoren, Default-Profile und das des eingeloggten Users löschen soll
Das Script scheint zu funktionieren, jedoch nicht bei jedem Profil
Es überspringt sehr oft den Ordner "Temporary Internet Files", da hier für das VB-Script unlöschbare Dateien liegen.

Wenn ich allerdings per einfacher .bat-Datei mittels

 rd /S /Q "\\%Rechner%\c$\Dokumente und Einstellungen\%usrlogin%"   

lösche, geht das ohne Probleme


Hier ein Auszug aus meinem VB-Script:

...
    If WMIping( Rechner ) = "OK" Then 'Rechner eingeschaltet??  
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")   
    Set objFolder = objFSO.GetFolder("\\" & Rechner & "\\c$" & "\\Dokumente und Einstellungen")   

'eingeloggter username auslesen  
    Set objWMIService = GetObject("winmgmts:\\" & Rechner & "\root\CIMV2")  
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", _  
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)
           
'username bereinigen                                
        For Each objItem In colItems
          strUser = Right(objItem.Username,Len("SysTor\"))  
        Next

 For Each Profile In objFolder.SubFolders 
          Select Case (Profile.Name) 'Problem mit LCase() UCase()  
            Case strUser 'username des eingeloggten Benutzers auslassen  
              'msgBox Profile msgbox zu testzwecken  
            Case "Administrator"   
              'msgBox Profile  
            Case "All Users"  
              'msgBox Profile   
            Case "Default User"   
              'msgBox Profile  
            Case "LocalService"  
              'msgBox Profile    
            Case "NetworkService"   
              'msgBox Profile  
            Case Else 
              objfso.DeleteFolder Profile.Path, True 'true für die direkte Löschung  
          End Select 
      Next 
          OutputFile.WriteLine("Rechner: " & Rechner & " bearbeitet." & vbrLF)      
....

Content-Key: 133549

Url: https://administrator.de/contentid/133549

Printed on: April 19, 2024 at 20:04 o'clock

Mitglied: 45877
45877 Jan 15, 2010 at 12:22:26 (UTC)
Goto Top
Member: Borber
Borber Jan 15, 2010 at 12:41:46 (UTC)
Goto Top
ja,

aber es soll direkt aus dem Script gelöscht werden ohne die Verwendung von delprof.
Geht mir auch mehr um die Lösung, warum aus dem Script die Ordner nicht gelöscht werden können, vom DOS-Prompt her schon.
Mitglied: 60730
60730 Jan 15, 2010 at 15:09:55 (UTC)
Goto Top
Servus,

wie Chewie schon schrieb...

btw: so ganz für garnix schreiben nicht mal die Redmonter Praktikanten eine extra Software für etwas, dasm man "auch" mit del / Rd lösen könnte.

Wer Profile per Hand im Explorer löscht / oder ein Script benutzt - dass das gleiche macht - darf das gerne tun - aber hier keine Hilfe erwarten.

  • Und da delprof eh ein Werkzeug ist, das per command-line gesteuert wird....
  • wohl keiner dein halben Scriptschnippsel ausprobieren wird - um das Problem zu erkennen...Dazu sollte es schon komplett und in Code Tags stehen

Wirst du wohl mit der Aussage leben müssen.


Gruß
Member: Borber
Borber Jan 15, 2010 at 16:33:14 (UTC)
Goto Top
es geht mir wie oben gesagt eigentlich nur darum, warum das

.DeleteFolder

nicht die gleichen "Rechte" wie das RD in einer DOS-Box hat bzw. wie man das trotzdem machen kann, ohne auf delprof/DOS u.a. ausweichen zu müssen.


hier mal das ganze script (inklusive der Ausweichmthode über ein DOS-Prompt und das .DeleteFolder aus-remarked)
Von einer Rechner.txt liest er die Remote-Rechnernamen ein.

On Error Resume Next

Dim objFSO, objWSHShell, objRechnerliste, strRechner, arrRechner, strUser
Dim Rechner, Rechnerstatus, OutputFile

Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8
Const Rechnerliste = "Rechner.txt"  
Const Loeschliste  = "Loesch.txt"  
Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly = &h20

Set objFSO      = CreateObject("Scripting.FileSystemObject")  
Set objWSHShell = WScript.CreateObject("WScript.Shell")  

'     Datei existiert?, ja, also löschen - verwendung kommt später  
If  objFSO.FileExists(objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), Loeschliste)) Then
      objFSO.deleteFile (Loeschliste)
End if

If not objFSO.FileExists(objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), Rechnerliste)) Then
    MsgBox "Rechnerliste fehlt!",64, WScript.ScriptName  
Else
    Set objRechnerliste   = objFSO.OpenTextFile(objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), Rechnerliste), ForReading)
    strRechner = objRechnerliste.ReadAll
    objRechnerliste.Close
End If

strRechner = Replace(strRechner, chr(13), "")  
arrRechner = Split(strRechner, vblf)

set OutputFile = objFSO.OpenTextFile(objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), Loeschliste), ForWriting, true)

For Each Rechner in arrRechner
    If WMIping( Rechner ) = "OK" Then  
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")   
    Set objFolder = objFSO.GetFolder("\\" & Rechner & "\\c$" & "\\Dokumente und Einstellungen")   

    Set objWMIService = GetObject("winmgmts:\\" & Rechner & "\root\CIMV2")  
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", _  
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)
                                          
        For Each objItem In colItems 'Änderungswürdig..  
          strUser = Right(objItem.Username,Len("Systor\"))  
        Next

DQ = """"  
                                         
      For Each Profile In objFolder.SubFolders 
          Select Case (Profile.Name) 'Problem mit LCase() UCase()  
            Case strUser 'username des eingeloggten Benutzers auslassen  
              'msgBox Profile  
            Case "Administrator"   
              'msgBox Profile  
            Case "All Users"  
              'msgBox Profile   
            Case "Default User"   
              'msgBox Profile  
            Case "LocalService"  
              'msgBox Profile    
            Case "NetworkService"   
              'msgBox Profile  
            Case Else 
              'objfso.DeleteFolder Profile.Path, True ' geht leider nicht immer.. aus-remarked  

              objWSHShell.run "cmd /C RD /S /Q " & DQ & Profile.Path & DQ    'geht, will aber keine dos-prompt bzw. externes Programm  
          End Select 
      Next 
          OutputFile.WriteLine("Rechner: " & Rechner & " bearbeitet." & vbrLF)          
    Else
        'do nothing while Remote-PC is offline  
        OutputFile.WriteLine("Rechner: " & Rechner & " ist offline." & vbrLF)  
    End If

Next


OutputFile.Close

objWSHShell.run ("Loesch.txt"),1,true  

'Freigaben  
Set objWSHShell = Nothing
Set objFSO = Nothing
Set objFolder = Nothing

'**************************************************************  
Function WMIping( PCName )
'**************************************************************  
Dim objPing, objStatus
            WMIping = "OK"  
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & PCName & "'")  
    For Each objStatus in objPing
        If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
            WMIping = "-OK"  
        End If
    Next
End Function