Bei jeder Neuinstallation von Windows wird eine neue SID für den Benutzer erstellt, auch wenn der Benutzername derselbe wie zuvor ist.
// example (not real SID format, just show the problem)
user SID
--------------------
liuyan S-old-501 // old SID before reinstall
liuyan S-new-501 // new SID after reinstall
Das ärgerliche Problem nach der Neuinstallation ist, dass die NTFS-Dateikapazität und die Berechtigungen auf der Festplatte weiterhin mit der SID des alten Benutzers verknüpft sind.
Ich möchte die Besitz- und Berechtigungseinstellungen von NTFS-Dateien beibehalten und dann den neuen Benutzer die SID des alten Benutzers übernehmen lassen, damit ich wie bisher ohne Berechtigungsprobleme auf Dateien zugreifen kann.
Das cacls
Befehlszeilentool kann in einer solchen Situation nicht verwendet werden, da die Datei einem neuen Benutzer gehört und daher ein Fehler auftritt, bei dem der Zugriff verweigert wird. und es kann nicht den Besitzer wechseln.
Auch wenn ich die Berechtigung des alten Benutzers über das SubInACL
Tool ändern kann , cacls
kann ich die Berechtigung des alten Benutzers nicht entfernen, da der alte Benutzer bei der Neuinstallation nicht vorhanden ist, und ich kann die Berechtigung des alten Benutzers nicht auf den neuen Benutzer kopieren .
Können wir also einfach die SID des alten Benutzers an den neuen Benutzer auf dem frisch installierten Windows binden?
Probentestreihe
@echo off
REM Additional tools used in this script
REM PsGetSid http://technet.microsoft.com/en-us/sysinternals/bb897417
REM SubInACL http://www.microsoft.com/en-us/download/details.aspx?id=23510
REM
REM make sure these tools are added into PATH
set account=MyUserAccount
set password=long-password
set dir=test
set file=test.txt
echo Creating user [%account%] with password [%password%]...
pause
net user %account% %password% /add
psgetsid %account%
echo Done !
echo Making directory [%dir%] ...
pause
mkdir %dir%
dir %dir%* /q
echo Done !
echo Changing permissions of directory [%dir%]: only [%account%] and [%UserDomain%\%UserName%] has full access permission...
pause
cacls %dir% /G %account%:F
cacls %dir% /E /G %UserDomain%\%UserName%:F
dir %dir%* /q
cacls %dir%
echo Done !
echo Changing ownership of directory [%dir%] to [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
echo Done !
echo RunAs [%account%] user to write a file [%file%] in directory [%dir%]...
pause
runas /noprofile /env /user:%account% "cmd /k echo some text %DATE% %TIME% > %dir%\%file%"
dir %dir% /q
echo Done !
echo Deleting and Recreating user [%account%] (reinstall simulation) ...
pause
net user %account% /delete
net user %account% %password% /add
psgetsid %account%
echo Done ! %account% is recreated, it has a new SID now
echo Now, use this "same" account [%account%] to access [%dir%], it will failed with "Access is denied"
pause
runas /noprofile /env /user:%account% "cmd /k cacls %dir%"
REM runas /noprofile /env /user:%account% "cmd /k type %dir%\%file%"
echo Done !
echo Changing ownership of directory [%dir%] to NEW [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
cacls %dir%
echo Done ! As you can see, "Account Domain not found" is actually the OLD [%account%] user
echo Deleting user [%account%] ...
pause
net user %account% /delete
echo Done !
echo Deleting directory [%dir%]...
pause
rmdir %dir% /s /q
echo Done !