任何人都有刪除特定本地 Windows 配置文件的腳本?
我正在尋找 Powershell(首選)腳本或 .CMD 或 .VBS,以刪除工作站 (WinXP) 或終端伺服器(2000、‘03 或 ‘08)上的**特定使用者配置文件。**我對 delprof 實用程序瞭如指掌……這只允許您根據一段時間不活動進行刪除。我想要一個腳本:
提示管理員輸入使用者名
刪除該使用者名的個人資料
- 並刪除整個配置文件 - 系統資料庫配置單元(不僅僅是文件和設置中的文件夾結構)。
- 如果您轉到“*我的電腦”>“屬性”>“高級”選項卡>“使用者配置文件設置”>*並從那裡刪除配置文件,則方法相同。
有任何想法嗎?我能想到的只是進行 AD 查找以獲取指定使用者的 SID,然後使用它來刪除正確的系統資料庫配置單元……不過,更簡單的東西會很好……
基本上,我的 HelpDesk 曾經是我們 Citrix 伺服器上的本地管理員,解決各種問題的常見方法是讓他們刪除 citrix 伺服器上的使用者配置文件並讓該使用者重新登錄 - 瞧,無論他們遇到什麼問題解決。展望未來,在新的 Citrix 環境中,他們將不再是這些框的本地管理員,但仍需要能夠刪除配置文件(刪除整個配置文件:文件夾和系統資料庫是關鍵)。謝謝。
如果您使用的是 Windows 7 或 Windows 2008 電腦,Powershell 會以非常簡單的方式完成此操作。
我為 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 中重命名使用者帳戶時出現問題。