Windows - 使用 CMD 创建具有特定 NTFS 权限的用户文件夹

Windows - 使用 CMD 创建具有特定 NTFS 权限的用户文件夹

情况:

我目前正在为我们的新电脑制作默认的 Windows 映像。这些新系统配备了 SSD(250GB)+ HDD(500GB)。我的目标是让主要用户配置文件仍然位于 SSD 上,但将一些用户文件夹(文档、桌面、电影、音乐、下载)重定向到 HDD。因此最终 SSD 仅用于设置和类似的东西,而 HDD 用于大多数用户的文件。

我的方法:

为所有非管理员创建带有登录脚本的本地 GPO:

检查用户文件夹 (%USERNAME%) 是否存在于 d:\Users\ 中,如果不存在则创建必要的文件夹结构并删除 c:\Users\%username% 中现在不需要的文件夹(无重复)

当然,文件夹重定向的注册表也会发生变化。

(我们没有域名,所以我只能通过本地 GPO 进行配置)

这似乎很有效。唯一的问题是,如果有多个用户使用该系统,他们可以毫无问题地访问硬盘上其他用户的数据文件夹。

是否可以在批处理脚本中创建具有特定 NTFS 权限的文件夹,以便只有所有者/创建者(非管理员)和管理员可以访问它。其他普通用户将被阻止。

答案1

文件/文件夹的所有者可以随时更改安全性(即使安全性禁止这样做)。同样,管理员可以随时取得对象的所有权(即使安全性禁止这样做)。

如果管理员创建了某个东西,那么它属于管理员的组而不是个人。

安全性通常是从父文件夹继承的。

有一个名为 Owner/Creator 的安全虚拟用户 - 指的是哪个用户是所有者。

因此,您需要正确设置父文件夹,然后其他一切都应该是自动的。

请记住,该文件夹会在首次登录时或首次使用时自动创建。

更多关于特殊文件夹的信息

单击“开始”-“所有程序”-“附件”-“运行”(或按 Winkey + R)。输入

sendto

可以使用该shell:协议来打开和创建特殊文件夹。

打开文档并创建(如果不存在)

单击“开始”-“所有程序”-“附件”-“运行”(或按 Winkey + R)。输入

shell:personal

获取可以与 shell 一起使用的文件夹列表:协议

开始 - 所有程序 - 附件 - 右键单击​​命令提示符并选择以管理员身份运行。输入(或在命令提示符窗口中右键单击并选择粘贴,进行复制和粘贴)。

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\FolderDescriptions" /v Name /s |findstr /c:Name|sort /+23

Vista 上哪个返回

Name    REG_SZ    AddNewProgramsFolder
Name    REG_SZ    Administrative Tools
Name    REG_SZ    AppData
Name    REG_SZ    AppUpdatesFolder
Name    REG_SZ    Cache
Name    REG_SZ    CD Burning
Name    REG_SZ    ChangeRemoveProgramsFolder
Name    REG_SZ    Common Administrative Tools
Name    REG_SZ    Common AppData
Name    REG_SZ    Common Desktop
Name    REG_SZ    Common Documents
Name    REG_SZ    Common Programs
Name    REG_SZ    Common Start Menu
Name    REG_SZ    Common Startup
Name    REG_SZ    Common Templates
Name    REG_SZ    CommonDownloads
Name    REG_SZ    CommonMusic
Name    REG_SZ    CommonPictures
Name    REG_SZ    CommonVideo
Name    REG_SZ    ConflictFolder
Name    REG_SZ    ConnectionsFolder
Name    REG_SZ    Contacts
Name    REG_SZ    ControlPanelFolder
Name    REG_SZ    Cookies
Name    REG_SZ    CredentialManager
Name    REG_SZ    CryptoKeys
Name    REG_SZ    CSCFolder
Name    REG_SZ    Default Gadgets
Name    REG_SZ    Desktop
Name    REG_SZ    Downloads
Name    REG_SZ    DpapiKeys
Name    REG_SZ    Favorites
Name    REG_SZ    Fonts
Name    REG_SZ    Gadgets
Name    REG_SZ    Games
Name    REG_SZ    GameTasks
Name    REG_SZ    History
Name    REG_SZ    InternetFolder
Name    REG_SZ    Links
Name    REG_SZ    Local AppData
Name    REG_SZ    LocalAppDataLow
Name    REG_SZ    LocalizedResourcesDir
Name    REG_SZ    MAPIFolder
Name    REG_SZ    My Music
Name    REG_SZ    My Pictures
Name    REG_SZ    My Video
Name    REG_SZ    MyComputerFolder
Name    REG_SZ    NetHood
Name    REG_SZ    NetworkPlacesFolder
Name    REG_SZ    OEM Links
Name    REG_SZ    Original Images
Name    REG_SZ    Personal
Name    REG_SZ    PhotoAlbums
Name    REG_SZ    Playlists
Name    REG_SZ    PrintersFolder
Name    REG_SZ    PrintHood
Name    REG_SZ    Profile
Name    REG_SZ    ProgramFiles
Name    REG_SZ    ProgramFilesCommon
Name    REG_SZ    ProgramFilesCommonX86
Name    REG_SZ    ProgramFilesX86
Name    REG_SZ    Programs
Name    REG_SZ    Public
Name    REG_SZ    PublicGameTasks
Name    REG_SZ    Quick Launch
Name    REG_SZ    Recent
Name    REG_SZ    RecycleBinFolder
Name    REG_SZ    ResourceDir
Name    REG_SZ    SampleMusic
Name    REG_SZ    SamplePictures
Name    REG_SZ    SamplePlaylists
Name    REG_SZ    SampleVideos
Name    REG_SZ    SavedGames
Name    REG_SZ    Searches
Name    REG_SZ    SearchHomeFolder
Name    REG_SZ    SendTo
Name    REG_SZ    Start Menu
Name    REG_SZ    Startup
Name    REG_SZ    SyncCenterFolder
Name    REG_SZ    SyncResultsFolder
Name    REG_SZ    SyncSetupFolder
Name    REG_SZ    System
Name    REG_SZ    SystemCertificates
Name    REG_SZ    SystemX86
Name    REG_SZ    Templates
Name    REG_SZ    TreePropertiesFolder
Name    REG_SZ    UserProfiles
Name    REG_SZ    UsersFilesFolder
Name    REG_SZ    Windows

这是另一种方法。这篇文章的重点是文件夹有简短的描述。

根据编程文档,如果特殊文件夹不存在,则执行特定命令打开该文件夹将创建该文件夹。

如果 vDir 设置为 ShellSpecialFolderConstants 之一,且特殊文件夹不存在,则此函数将创建该文件夹。

在记事本中创建以下两行。将打开后的 0 替换为下面要打开的文件夹列表中的数字,如果不存在则创建。Documents 和 Videos 等文件夹有两个文件夹,一个是个人文件夹,另一个是所有用户共用的文件夹。

set objShell = CreateObject("Shell.Application")
objShell.Open(0)

这是两个视频文件夹的示例。

这个小程序尝试打开您的个人视频文件夹和公共视频文件夹。

将以下三行复制到记事本中。将其保存为“OpenAndCreateVideoFolders.vbs”(引号是您需要输入的名称的一部分,保存后将消失)

set objShell = CreateObject("Shell.Application")
objShell.Open(13)
objShell.Open(55)

双击刚刚编写的小程序。

特殊文件夹列表

CSIDL_DESKTOP 0 Desktop 
CSIDL_INTERNET 1 Internet Explorer (icon on desktop) 
CSIDL_PROGRAMS 2 Start Menu\Programs 
CSIDL_CONTROLS 3 My Computer\Control Panel 
CSIDL_PRINTERS 4 My Computer\Printers 
CSIDL_PERSONAL 5 My Documents 
CSIDL_FAVORITES 6 \Favorites 
CSIDL_STARTUP 7 Start Menu\Programs\Startup 
CSIDL_RECENT 8 \Recent 
CSIDL_SENDTO 9 \SendTo 
CSIDL_BITBUCKET 10 \Recycle Bin 
CSIDL_STARTMENU 11 \Start Menu 
CSIDL_MYDOCUMENTS 5 Personal was just a silly name for My Documents 
CSIDL_MYMUSIC 12 "My Music" folder 
CSIDL_MYVIDEO 13 "My Videos" folder 
CSIDL_DESKTOPDIRECTORY 16 \Desktop 
CSIDL_DRIVES 17 My Computer 
CSIDL_NETWORK 18 Network Neighborhood (My Network Places) 
CSIDL_NETHOOD 19 \nethood 
CSIDL_FONTS 20 windows\fonts 
CSIDL_TEMPLATES 21 
CSIDL_COMMON_STARTMENU 22 All Users\Start Menu 
CSIDL_COMMON_PROGRAMS 23 All Users\Start Menu\Programs 
CSIDL_COMMON_STARTUP 24 All Users\Startup 
CSIDL_COMMON_DESKTOPDIRECTORY 25 All Users\Desktop 
CSIDL_APPDATA 26 \Application Data 
CSIDL_PRINTHOOD 27 \PrintHood 
CSIDL_LOCAL_APPDATA 28 \Local Settings\Applicaiton Data (non roaming) 
CSIDL_ALTSTARTUP 29 non localized startup 
CSIDL_COMMON_ALTSTARTUP 30 non localized common startup 
CSIDL_COMMON_FAVORITES 31 Never actually implemented 
CSIDL_INTERNET_CACHE 32 Temp Internet Files 
CSIDL_COOKIES 33 Internet cookies 
CSIDL_HISTORY 34 Internet History 
CSIDL_COMMON_APPDATA 35 All Users\Application Data 
CSIDL_WINDOWS 36 GetWindowsDirectory() 
CSIDL_SYSTEM 37 GetSystemDirectory() 
CSIDL_PROGRAM_FILES 38 C:\Program Files 
CSIDL_MYPICTURES 39 C:\Program Files\My Pictures 
CSIDL_PROFILE 40 USERPROFILE 
CSIDL_SYSTEMX86 41 x86 system directory on RISC 
CSIDL_PROGRAM_FILESX86 42 x86 C:\Program Files on RISC 
CSIDL_PROGRAM_FILES_COMMON 43 C:\Program Files\Common 
CSIDL_PROGRAM_FILES_COMMONX86 44 x86 Program Files\Common on RISC 
CSIDL_COMMON_TEMPLATES 45 All Users\Templates 
CSIDL_COMMON_DOCUMENTS 46 All Users\Documents 
CSIDL_COMMON_ADMINTOOLS 47 All Users\Start Menu\Programs\Administrative Tools 
CSIDL_ADMINTOOLS 48 \Start Menu\Programs\Administrative Tools 
CSIDL_CONNECTIONS 49 Network and Dial-up Connections 
CSIDL_COMMON_MUSIC 53 All Users\My Music 
CSIDL_COMMON_PICTURES 54 All Users\My Pictures 
CSIDL_COMMON_VIDEO 55 All Users\My Video 
CSIDL_RESOURCES 56 Resource Direcotry 
CSIDL_RESOURCES_LOCALIZED 57 Localized Resource Direcotry 
CSIDL_COMMON_OEM_LINKS 58 Links to All Users OEM specific apps 
CSIDL_CDBURN_AREA 59 USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning 
CSIDL_COMPUTERSNEARME 60 Computers Near Me (computered from Workgroup membership) 

答案2

感谢您的有益评论和回答!

这是我的工作登录脚本:

@echo off
IF EXIST D:\USERS\%USERNAME% GOTO EXISTS
GOTO FIRSTLOGON

:FIRSTLOGON
:: Create user folder on D:\
mkdir "D:\USERS\%USERNAME%"
:: copy folder structure from template to new user folder
xcopy "D:\USERS\template\*.*" "D:\USERS\%USERNAME%" /E /Y /Q
:: Set rights on new folder
::: Remove inheritance, grant owner everything and admin everything
icacls "D:\USERS\%USERNAME%" /inheritance:r /grant %USERNAME%:(OI)(CI)F
icacls "D:\USERS\%USERNAME%" /grant Administratoren:(OI)(CI)F
:: User Notification
msg "%username%" Profilefiles were created, please logon again.
:: Logoff
ping 1.1.1.1. -n 1 -w 5000 > NUL
shutdown /l /f
GOTO END

:SECONDLOGON
:: Remove old user folders on C:\
IF EXIST "c:\Users\%username%\Desktop" rmdir /S /Q "c:\Users\%username%\Desktop"
IF EXIST "c:\Users\%username%\Documents" rmdir /S /Q "c:\Users\%username%\Documents"
IF EXIST "c:\Users\%username%\Downloads" rmdir /S /Q "c:\Users\%username%\Downloads"
IF EXIST "c:\Users\%username%\Music" rmdir /S /Q "c:\Users\%username%\Music"
IF EXIST "c:\Users\%username%\Pictures" rmdir /S /Q "c:\Users\%username%\Pictures"
GOTO END

:EXISTS
IF EXIST "c:\Users\%username%\Desktop" GOTO SECONDLOGON
echo Benutzerordner existiert bereits

:END

文件夹重定向由自定义本地组策略完成(默认情况下 Windows 上缺少该策略)。

导入路径当然是这两行

icacls “D:\USERS\%USERNAME%”/inheritance:r /grant %USERNAME%:(OI)(CI)F

icacls "D:\USERS\%USERNAME%" /grant Administratoren:(OI)(CI)F

/inheritance:r - 这将删除所有继承的权利,然后我授予当前用户和管理员所有权利,这些权利也适用于所有子文件夹和文件(OI),(CI)。

相关内容