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

时间:2014-06-16 21:44:19

标签: powershell

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

gci -force "\\computername\c$\users\username\Documents" -recurse

gci -force "\\computername\c$\users\username\My Documents" -recurse

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

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

等?

"我的音乐"和"我的照片"不在那个位置,但"文件"或者"我的文件"似乎报告了所有这些文件夹。

但是,如果我使用' dir'它只返回物理在'我的文档'之下的文件。此外,如果我gci'我的图片'它只返回“我的图片”的内容。我知道各种个人资料文件夹都是特殊文件夹,但有一种方法可以返回“我的文档”的内容。

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

所以输出总是如下:

Scanning users ........... testuser
.......................... My Documents => 500 MB
.......................... My Pictures  => 500 MB
.......................... My Videos => 0 MB
.......................... Downloads => 0 MB
.......................... Total => 1000 MB

所以在这个例子中,' Total'实际上只是报告了500 MB的图片,其中一张是我的图片'一旦进入我的文件'

3 个答案:

答案 0 :(得分:3)

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

要在PowerShell中避免此问题,请不要使用-Force选项,并且不应包含联结。

如果您愿意,也可以通过执行GCI $env:UserProfile\Documents并注意三个联结文件夹没有列表,然后执行相同但附加{{1>来在PowerShell中执行相同操作。它注意到这三个现在出现了。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这将生成所有SpecialFolder项目的列表。

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