有没有办法防止 Windows XP 计算机上的本地帐户在文档和设置文件夹中存储任何数据?
该机器主要用于域,并且是基础映像。当创建映像的新实例时,使用本地帐户允许将机器添加到域中/从域中删除。如果该本地帐户不为自己创建文档和设置文件夹就好了...
答案1
... 是的,我在其他回答中不明白,但从评论来看,我想我现在明白了。
看着那(这Technet 上的部署部分。有大量资源可以帮助您。
我建议的是Microsoft 部署工具包并构建一个将部署 Windows 的图像,预先安装所有软件并将 PC 加入 Windows 设置中的域,因此无需登录。
最后,如果这对您不起作用,您可能仍想尝试登录,执行您需要执行的操作,然后创建一个注册表项,该注册表项将在启动时为脚本运行一次,该脚本可以删除 c:\documents and settings 中的所有项目 - 刚刚发现这个,但我不能保证它,因为我没有使用它 -http://www.wisesoft.co.uk/scripts/vbscript_delete_local_profiles.aspx
微软也制作了一个删除所有本地用户帐户的工具,但我找不到它:SI 认为它在支持包中,如果我找到它,我会编辑这个答案。
答案2
如果您使用它来克隆到多台计算机,并且使用 SysPrep,则可以在 SysPrep 结束时发出 RunOnce 命令,以便在首次启动时删除本地配置文件。这应该会使基本映像保持原样,Docs & Settings 中没有任何内容。
答案3
如果这是一个基础图像,人们真的不应该将其用于日常用途,除非你想防止在部署图像时写入数据。
可以通过组策略和限制来阻止人们写入和保存文件,但是在应用程序数据方面可能会遇到问题,因为几乎所有在 Windows 中运行的所有内容都需要这样做。
你并没有真正提供足够的环境细节,所以我只是在这里假设,但你可能需要看看Windows SteadyState这将允许其他人使用这台电脑然后将其恢复到原始状态。
答案4
我真的不确定这是否可行。当用户登录时,Windows 需要某个地方来存储使用户登录能够正常运行的所有信息。有人已经提到了组策略,但这对你没有用,因为此登录将使计算机加入域,这将是前组策略可以产生任何影响。
最好的办法是在用户注销后(将计算机加入域后)远程运行一个脚本。此脚本将循环检查远程计算机(刚加入域的 PC)上的用户配置文件,检查 SID。如果找到匹配的 SID,它将删除该配置文件。
我去年写过一个非常相似的脚本。它在工作中。明天我会用脚本回答(当我在工作时)
更新:
这是我之前提到的脚本。由于我所处的环境,它需要进行相当大的修改,因为它会执行各种跨域操作。
如果您遇到权限问题,请更改用户名 = “”和密码 = “”部分到具有目标 PC 的本地管理员权限的帐户。
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