Powershell';文件';或';我的文件';

Powershell';文件';或';我的文件';,powershell,Powershell,有人能解释一下为什么要用这样的方法: gci -force "\\computername\c$\users\username\Documents" -recurse Scanning users ........... testuser .......................... My Documents => 500 MB .......................... My Pictures => 500 MB .......................

有人能解释一下为什么要用这样的方法:

gci -force "\\computername\c$\users\username\Documents" -recurse
Scanning users ........... testuser
.......................... My Documents => 500 MB
.......................... My Pictures  => 500 MB
.......................... My Videos => 0 MB
.......................... Downloads => 0 MB
.......................... Total => 1000 MB

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

"\\computername\c$\users\username\My Documents\"
"\\computername\c$\users\username\My Documents\My Pictures"
"\\computername\c$\users\username\My Documents\My Music"
等等

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

但是,如果我使用'dir',它只返回实际位于'My Documents'下的文件。此外,如果我gci“我的图片”,它只返回“我的图片”的内容,我知道各种配置文件文件夹都是特殊文件夹,但是否有方法只返回“我的文档”的内容

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

因此,输出总是类似于:

gci -force "\\computername\c$\users\username\Documents" -recurse
Scanning users ........... testuser
.......................... My Documents => 500 MB
.......................... My Pictures  => 500 MB
.......................... My Videos => 0 MB
.......................... Downloads => 0 MB
.......................... Total => 1000 MB

因此,在本例中,“总数”实际上只是报告500 MB的图片,一个在“我的图片”中,一个在“我的文档”中这不是特定于powershell的,这是因为Windows 7在“文档”文件夹下的任何配置文件中都有用于我的音乐、图片和视频的连接。这可以通过拉一个命令提示符,导航到您的文档文件夹,然后执行一个将显示这些连接的
DIR/AD
来看到

要在PowerShell中避免此问题,请不要使用-Force选项,并且它不应包括连接

如果您愿意,也可以在PowerShell中执行相同的操作,执行
GCI$env:UserProfile\Documents
并注意到这三个连接的文件夹没有列表,然后执行相同的操作,但将
-Force
添加到其中,并注意这三个文件夹现在已出现


正如Rob Prouse所指出的,只有当用户的Documents文件夹位于默认位置时,这才有效。如果它已被重定向到其他地方,那么它将无法为您获得该重定向位置。它适用于OP的原始版本,因为他们显然在查看默认位置,但对于其他用户,您将希望使用
[environment]:GetFolderPath('MyDocuments')获取路径。
接受的答案实际上是不正确的。如果用户的“文档”文件夹位于默认位置,则此选项有效,但如果“文档”文件夹已映射到其他位置,则此选项无效。例如,如果您有较小的SSD驱动器,则可能会将文档文件夹映射到另一个驱动器,或者组织可能会将用户的文档文件夹映射到网络共享


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

这将生成所有特殊文件夹项的列表

([Environment+SpecialFolder]).GetEnumValues() |
    ForEach-Object { '{0} === {1}' -f $_, [Environment]::GetFolderPath($_) }

啊,当然!老实说,我正在学习几个月前写的这个脚本,我不记得我为什么要首先使用武力。我现在就测试一下,一旦我确认工作正常,我会把它标记为答案。我相信我只是在测试过程中使用“强制”来克服一些问题。删除强制和文件夹将再次单独报告。再次感谢你,伙计!谢谢你让我保持诚实。我已经更新了我的答案,以包括你的建议,只是为了确保人们看到它,而不是仅仅停留在“接受的答案”和错过你的。我一定会相信你的。