Windows 识别powershell中其他用户的特殊文件夹
我有一个文件服务器,它承载用户的主驱动器。一部分用户具有文件夹重定向,因此从资源管理器查看时,他们的文件夹名称都称为“我的文档” e、 g.Windows 识别powershell中其他用户的特殊文件夹,windows,powershell,Windows,Powershell,我有一个文件服务器,它承载用户的主驱动器。一部分用户具有文件夹重定向,因此从资源管理器查看时,他们的文件夹名称都称为“我的文档” e、 g. \Auser \布瑟 … \库塞尔 \我的文档 \我的文档 \我的文档 \用户 .... Powershell似乎忽略了特殊的“我的文档”名称,只在下面列出了真实的文件夹名称。普通文件夹和重定向文件夹的powershell属性似乎相同 如何使用powershell识别哪些文件夹具有特殊的“我的文档”名称?感谢jscott提供有关Desktop.ini的
\Auser
\布瑟
…
\库塞尔
\我的文档
\我的文档
\我的文档
\用户
.... Powershell似乎忽略了特殊的“我的文档”名称,只在下面列出了真实的文件夹名称。普通文件夹和重定向文件夹的powershell属性似乎相同
如何使用powershell识别哪些文件夹具有特殊的“我的文档”名称?感谢jscott提供有关Desktop.ini的线索 下面是我如何得到我的列表的,它显示了每个用户的文件夹名称,以及它是“普通”文件夹还是哈希表中定义的特殊重定向文件夹之一('桌面'文档'…)
如果要查找Windows 7用户目录中的特殊重定向文件夹,则至少需要使用
Get ChildItem
和-Force
,这允许cmdlet获取用户无法访问的项目,如隐藏或系统文件,如
上述操作将返回上述文件夹,因为它们具有ReparsePoint属性。可以找到更多关于这方面的信息。对于我认为您正在寻找的内容,您需要的最低限度
-Force
文件夹列表毫无意义,因为它在同一位置多次列出同一文件夹。你的意思是\Auser\My Documents\Buser\My Documents\Cuser\My Documents等吗?或者,您是否试图声明只有某些用户的共享中才会列出“我的文档”文件夹?如果是这样,这些用户是由GPO定义的吗?每个文件夹都是我的文档的根级别。通常情况下,您不能有相同的子文件夹,但对于特殊文件夹,资源管理器会多次将标签显示为“我的文档”。该文件夹实际上是一个唯一的用户名文件夹,如powershell和cmd提示符中所示。由于文件夹中有Desktop.ini文件,因此这些文件夹似乎只命名为“My Documents”。实际目录名不是“我的文档”。您可以在每个用户的配置文件中检查Desktop.ini文件,但阅读该文件并确定它是否使用了“My Documents”的显示名称将取决于您。通常这是通过LocalizedResourceName=
配置的。
$SpecialFolders = @{}
$SpecialFolders.Add("LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21770","Documents")
$SpecialFolders.Add("LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21769","Desktop")
$SpecialFolders.Add("LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21798","Downloads")
$SpecialFolders.Add("LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21779","Pictures")
$SpecialFolders.Add("PersonalizedName=","CustomName")
$folders = Get-ChildItem "\\someServer\homeDirs"
$folders | Select Name,@{l="Type";e={
$desktopini = gci $_.fullname 'Desktop.ini' -Force
if($desktopini){
$desktopiniContents = Get-Content $desktopini.FullName
$SpecialFolders.Keys | %{
if($desktopiniContents -contains $_){$SpecialFolders.Item($_)}
}
} else {
"normal"
}
}}
Get-ChildItem C:\users\SomeUser -Force | Where-Object {$_.Attributes.ToString().Contains("ReparsePoint")}