AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 73062
Accepted
Jordan W.
Jordan W.
Asked: 2009-10-10 11:09:43 +0800 CST2009-10-10 11:09:43 +0800 CST 2009-10-10 11:09:43 +0800 CST

任何人都有删除特定本地 Windows 配置文件的脚本?

  • 772
锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

我正在寻找 Powershell(首选)脚本或 .CMD 或 .VBS,以删除工作站 (WinXP) 或终端服务器(2000、'03 或 '08)上的特定用户配置文件。我对 delprof 实用程序了如指掌……这只允许您根据一段时间不活动进行删除。我想要一个脚本:

  • 提示管理员输入用户名
  • 删除该用户名的个人资料
    • 并删除整个配置文件 - 注册表配置单元(不仅仅是文档和设置中的文件夹结构)。
    • 如果您转到“我的电脑”>“属性”>“高级”选项卡>“用户配置文件设置”>并从那里删除配置文件,则方法相同。

有任何想法吗?我能想到的只是进行 AD 查找以获取指定用户的 SID,然后使用它来删除正确的注册表配置单元......不过,更简单的东西会很好......

基本上,我的 HelpDesk 曾经是我们 Citrix 服务器上的本地管理员,解决各种问题的常见方法是让他们删除 citrix 服务器上的用户配置文件并让该用户重新登录 - 瞧,无论他们遇到什么问题解决。展望未来,在新的 Citrix 环境中,他们将不再是这些框的本地管理员,但仍需要能够删除配置文件(删除整个配置文件:文件夹和注册表是关键)。谢谢。

windows
  • 8 8 个回答
  • 21352 Views

8 个回答

  • Voted
  1. Izzy
    2009-10-10T11:17:04+08:002009-10-10T11:17:04+08:00

    我为 Server Fault 上的一个类似问题编写了这个 VB 脚本。它将循环浏览目标机器上的每个配置文件,并(一一)提示您是否要删除配置文件。它使用 WMI Win32_UserProfile 执行此操作,因此将完全删除。

    它会询问您目标机器的 FQDN。如果您遇到权限错误,请更改用户名和密码以反映在目标计算机上具有本地管理员权限的帐户。

    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
    

    使用您详述的相同工作流程(它首先请求用户名)不起作用。这种方法的问题是 Win32_UserProfile 不包含用户名,仅包含 SID。当用户登录机器时,SID 用于决定哪个配置文件是正确的。这可以防止在 AD 中重命名用户帐户时出现问题。

    • 2
  2. Mathieu Chateau
    2010-02-03T03:02:06+08:002010-02-03T03:02:06+08:00

    tsprofilecleaner 是一个免费的 gui,可以从服务器列表中删除配置文件: 链接文本

    • 1
  3. Alicia White
    2010-02-18T09:32:33+08:002010-02-18T09:32:33+08:00

    我认为澳大利亚的 Cntrl+Alt+Del 咨询公司开发了一种可能对您有所帮助的工具。它称为 REMPROF,使用此命令,您可以从服务器上删除单个配置文件。当然,您必须在命令中替换实际的用户名:

    remprof USERNAME
    

    不幸的是,我不相信您可以从另一台服务器远程运行它,并且如果没有管理权限,您将无法运行它。我不相信您的支持人员将能够在任何服务器上管理用户和用户配置文件,而无需成为本地管理员组的成员。

    无论如何,您都可以从此处的 Cntrl+Alt+Del 咨询网站下载 REMPROF 和许多其他有用的工具:

    http://www.ctrl-alt-del.com.au/CAD_TSUtils.htm

    我希望这有帮助。

    艾丽西亚

    • 1
  4. Jordan W.
    2010-03-13T15:03:35+08:002010-03-13T15:03:35+08:00

    好吧,相反,我们认为没有足够的理由在 Citrix 服务器上保留任何配置文件(它们无论如何都会在重定向任何真实数据的情况下漫游),因此我们将策略设置为在用户注销时删除配置文件。谢谢大家的建议。

    • 1
  5. Best Answer
    Techibee.com
    2012-03-24T10:52:40+08:002012-03-24T10:52:40+08:00

    如果您使用的是 Windows 7 或 Windows 2008 计算机,Powershell 会以非常简单的方式完成此操作。

    http://techibee.com/powershell/powershell-script-to-delete-windows-user-profiles-on-windows-7windows-2008-r2/1556

    • 1
  6. zzzzzzzz
    2010-03-06T05:18:04+08:002010-03-06T05:18:04+08:00

    我们使用用户配置文件 Hive 清理服务 + 小脚本,在服务器启动时删除所有用户配置文件。工作良好

    • 0
  7. Gal Stan
    2013-08-06T12:20:30+08:002013-08-06T12:20:30+08:00

    您可以使用 delprof 或 remprof 来删除配置文件。您可以从这些命令创建脚本,也可以使用tsprofcleaner.

    • -1
  8. Joshua
    2009-10-10T12:17:34+08:002009-10-10T12:17:34+08:00

    用户配置单元位于他们的用户目录 (NTUSER.DAT) 下,因此使用 删除目录rmdir /s /q {username}就足够了。唯一不会被删除的部分是在注册表中的配置文件列表下,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList但所做的只是将 SID 映射到配置文件位置。

    如果用户登录并且该目录不存在,它将再次创建。

    不幸的是,如果不让他们将自己提升为管理员,他们将无法删除用户配置文件。

    批处理文件:

    set /p USERTODEL=Enter the username to delete: 
    set USERTODEL=C:\Users\%USERTODEL%
    if exist "%USERTODEL%" rmdir /s /q %USERTODEL%
    
    • -2

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 如何在笔记本电脑上使用 Tobit David?[关闭]

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve