Используйте xcacls
вместо того, как описано здесь и используйте SID вместо имен (вы найдете хорошо известные sids здесь )
Если вы по какой-то причине застряли с cacls, то google: cacls sid
принесет вам некоторые обходные пути, как сделать обратное отображение от sid к имени, а затем передать это cacls
Редактировать: не удержался, чтобы выучить несколько новых трюков ...
этот простой скрипт даст вам фактическое имя группы «Пользователи» (S-1-5-32-545)
на данном ПК:
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
Wscript.Echo objAccount.AccountName
Поместите его в файл с расширением vbs (предположим, usersName.vbs
).
Теперь запустите:
echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F
Готово: -)
Редактировать: исправлено, если в имени есть пробел (добавлено delims=
). Также обратите внимание, что эхо Y в начале работает, если вы используете английскую версию инструмента .