0

尝试在 Powershell 中扫描目标目录时出现错误。

我正在使用的代码是;

    $path = read-host 'Enter the target drive letter'

    $objects = get-childitem $path -force -recurse

基本上我想要做的是让这个通用搜索工作(扫描用户指定的位置),以便我可以对其进行细化以搜索特定项目,例如按文件类型、大小等搜索的文件。但是,当它运行时,我得到一个当路径包含空格时出错,例如驱动器中的“文档和设置”或“程序文件”文件夹。

有什么办法可以做到这一点而不会出现此错误?我对powershell还是很陌生,我在其他任何地方都看不到这个答案,但如果这已经在其他地方有所介绍,我深表歉意。

更新:

它在 Powershell v2.0 上运行。想一想,我认为它与空间有关的原因是因为这些是唯一似乎出错的项目,但消息本身就说明了;

    Get-ChildItem : Access to the path 'C:\Documents and Settings' is denied. At
    C:\users\robert\desktop\v1.ps1:5 char:25 + $objects = get-childitem <<<<  $path
    - force -recurse + CategoryInfo : PermissionDenied: (C:\Documents and
    Settings:String) [Get-ChildItem], UnauthorizedAccessException +
    FullyQualifiedErrorId :
    DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

抱歉,如果这具有误导性,我认为当我以具有不受限制的执行策略的管理员身份运行此程序时,权限应该不是问题,但如果这实际上是导致它的原因,那么有一种方法可以覆盖它,因此它会扫描所有内容目标驱动器?

4

2 回答 2

0

Vista 还是 Windows 7?也许没问题,如果它只是在根目录上的“文档和设置”连接处绊倒。联结链接到 c:\users 并且 gci 可能不跟随链接,以防止循环或不完整的搜索。这是偶然发现的另一种方法:

在香草 cmd:

cd 'C:\documents and settings'
explorer .

在 Win7 上,我收到一条弹出错误消息:

Location is not available
C:\documents and settings is not accessible
Access is denied

没有错误,cd 'C:\documents and settings'shell 在该文件夹内返回提示(与链接目标相反,c:\users);并运行单个命令explorer 'C:\documents and settings'启动我的文档文件夹没有错误......但我离题了。

我们不希望递归搜索在无限循环中运行或跳过“文档和设置”和用户之间的文件夹。也许 get-childItem 应该以更好的方式处理这个问题,不知道。

同时,您可以通过这种方式排除连接点。我没有以这种方式测试过大型递归搜索,但它们可能会运行更长时间。

gci "c:\" -force | where {($_.attributes.toString() -like "*ReparsePoint*") -eq $false}

结果不包括“文档和设置”,除非我们$true换成$false.

于 2013-02-14T14:18:13.963 回答
0

使用:(见附加双引号)

$objects = get-childitem "$path" -force -recurse
于 2013-02-13T13:09:35.197 回答