Назад | Перейти на главную страницу

Создать командный файл, который удаляет все папки с данными пользователя, кроме All Users и Default User?

Я использую Windows XP и хочу создать командный файл, который удаляет все папки с пользовательскими данными, кроме All Users и Default User. Как я могу этого добиться?

Прежде всего, вы не хотите удалять папки на уровне ОС, вместо этого вы должны использовать Delprof для этого. Во-вторых, вы не можете удалить профиль текущего пользователя, вошедшего в систему, поэтому запланируйте запускать его как сценарий запуска компьютера или запускать удаленно на компьютере, который, как вы знаете, включен, но не имеет пользователя, вошедшего в систему.

Итак, вам нужно взглянуть на эта статья в базе знаний который предоставит вам всю необходимую информацию. Конкретная команда, которую вы хотите, будет выглядеть примерно так:

delprof /q /i /c:computername

Я написал это для другого пользователя с другой проблемой, но он сделает то, что вы хотите (и намного чище, чем ваше предложение просто удалить папку «Пользователи»).

Это VBScript, поэтому просто сохраните его как файл .vbs и дважды щелкните его. Он запросит полное доменное имя компьютера, который вы хотите проверить. Затем он перечислит каждый профиль пользователя на этом компьютере и предложит вам удалить профиль (и, следовательно, папку «Пользователи»).

Если у вас возникают проблемы с разрешениями, измените строки UserName = "" и Password = "" на учетную запись с правами локального администратора на целевом ПК.

Option Explicit
On Error Resume Next

Dim strComputer
Dim objWMIService
Dim propValue
Dim objItem
Dim SWBemlocator
Dim UserName
Dim Password
Dim colItems
Dim strMessage
Dim deleteResponse

strComputer = ""
UserName = ""
Password = ""
strMessage = ""

strComputer = InputBox("Please enter the FQDN of the new computer:")

If strComputer = "" Then
    WScript.quit
End If

If Not Ping (strComputer) Then
    MsgBox "The computer (" + strComputer + ") is not responding to ping - exiting"
    WScript.quit
End if

Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password)
Set colItems = objWMIService.ExecQuery("Select * from Win32_UserProfile",,48)
For Each objItem in colItems
    strMessage = ""
    If not objItem.LastDownloadTime = "" Then 
        strMessage = strMessage + "LastDownloadTime: " & left(objItem.LastDownloadTime,8) + Chr(10) + Chr(13)
    End If

    If Not objItem.LastUploadTime = "" Then
        strMessage = strMessage + "LastUploadTime: " & left(objItem.LastUploadTime,8) + Chr(10) + Chr(13)
    End if

    if not objItem.LastUseTime = "" then
        strMessage = strMessage + "LastUseTime: " & left(objItem.LastUseTime,8) + Chr(10) + Chr(13)
    End If

    If Not objItem.Loaded  = "" Then
        strMessage = strMessage + "Loaded: " & objItem.Loaded + Chr(10) + Chr(13)
    End If

    If not objItem.LocalPath = "" then
        strMessage = strMessage + "LocalPath: " & objItem.LocalPath + Chr(10) + Chr(13)
    End If

    if not objItem.RefCount = "" then
        strMessage = strMessage + "RefCount: " & objItem.RefCount + Chr(10) + Chr(13)
    End If

    if not objItem.RoamingConfigured = "" then
        strMessage = strMessage + "RoamingConfigured: " & objItem.RoamingConfigured + Chr(10) + Chr(13)
    End If

    if not objItem.RoamingPath = "" then
        strMessage = strMessage + "RoamingPath: " & objItem.RoamingPath + Chr(10) + Chr(13)
    End If

    if not objItem.RoamingPreference = "" then
        strMessage = strMessage + "RoamingPreference: " & objItem.RoamingPreference + Chr(10) + Chr(13)
    End If

    if not objItem.SID = "" then
        strMessage = strMessage + "SID: " & objItem.SID + Chr(10) + Chr(13)
    End If

    if not objItem.Special = "" then
        strMessage = strMessage + "Special: " & objItem.Special + Chr(10) + Chr(13)
    End If

    if not objItem.Status = "" then
        strMessage = strMessage + "Status: " & objItem.Status + Chr(10) + Chr(13)
    End If

    strMessage = strMessage + Chr(10) + Chr(13) + Chr(10) + Chr(13) + "Do you wish to delete this profile?"

    deleteResponse = MsgBox (strMessage,35,"Profile Found")

    Select Case deleteResponse
        Case 6
                Err.Clear
                objItem.Delete_
                If Err.Number = 0 Then 
                        MsgBox("Profile " & objitem.localpath & " on " & strComputer & " deleted")
                Else
                        MsgBox("Profile " & objitem.localpath & " on " & strComputer & " NOT deleted - Is user logged in?")             
                End If
    End Select

Next

Function Ping(strHost)

    dim objPing, objRetStatus

    set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & strHost & "'")

    for each objRetStatus in objPing
        if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode<>0 then
                Ping = False
        else
            Ping = True
        end if
    Next
End Function