Powershell“文档”或“我的文档”

mho*_*100 5 powershell

任何人都可以解释为什么使用类似的东西:

gci -force "\\computername\c$\users\username\Documents" -recurse
Run Code Online (Sandbox Code Playgroud)

或者

gci -force "\\computername\c$\users\username\My Documents" -recurse
Run Code Online (Sandbox Code Playgroud)

查看输出时,它实际上返回:

"\\computername\c$\users\username\My Documents\"
"\\computername\c$\users\username\My Documents\My Pictures"
"\\computername\c$\users\username\My Documents\My Music"
Run Code Online (Sandbox Code Playgroud)

ETC?

“我的音乐”和“我的图片”不在该位置下,但“文档”或“我的文档”似乎报告了所有这些文件夹。

但是,如果我使用“dir”,它只会返回“我的文档”下物理上的文件。另外,如果我 gci“我的图片”,它仅返回“我的图片”的内容,我知道各种配置文件文件夹是特殊文件夹,但有没有办法只返回“我的文档”的内容。

我的脚本基本上是解析用户配置文件并返回所有计算机的大小,为重定向配置文件做准备。

所以输出总是类似:

Scanning users ........... testuser
.......................... My Documents => 500 MB
.......................... My Pictures  => 500 MB
.......................... My Videos => 0 MB
.......................... Downloads => 0 MB
.......................... Total => 1000 MB
Run Code Online (Sandbox Code Playgroud)

因此,在示例中,“总计”实际上只是报告 500 MB 的图片,其中一张位于“我的图片”中,一张位于“我的文档”中

Rob*_*use 5

接受的答案实际上是不正确的。如果用户的文档文件夹位于默认位置,则该方法有效,但如果文档文件夹已映射到其他位置,则该方法无效。例如,如果您有较小的 SSD 驱动器,您可以将文档文件夹映射到另一个驱动器,或者组织可以将用户的文档文件夹映射到网络共享。

在 Powershell 中获取用户文档文件夹的正确方法是使用[environment]::getfolderpath("mydocuments")它将返回映射位置。


The*_*ian 3

这不是特定于 powershell 的,这是因为 Windows 7 在“我的音乐”、“我的图片”和“我的视频”的“文档”文件夹下的任何配置文件中都有连接。通过拉出命令提示符,导航到文档文件夹,然后执行DIR /AD将显示这些连接点的操作,可以看到这一点。

为了避免在 PowerShell 中出现此问题,请勿使用 -Force 选项,并且它不应包含连接。

如果您愿意,也可以通过在 PowerShell 中执行相同的操作来看到此行为,方法是执行GCI $env:UserProfile\Documents并注意没有列出三个连接的文件夹,然后执行相同的操作但附加-Force到它并注意现在出现了这三个文件夹。

正如 Rob Prouse 所指出的,只有当用户的文档文件夹位于默认位置时,这才有效。如果它已被重定向到其他地方,那么它不会为您提供重定向的位置。它适用于OP的原始问题,因为他们显然正在查看默认位置,但对于其他用户,您将希望使用以下方式获取路径[environment]::GetFolderPath('MyDocuments')