【发布时间】:2014-10-15 17:41:54
【问题描述】:
Get-ChildItem 有一个奇怪的问题。我正在尝试在 C: 驱动器中搜索办公文件,但排除其中的一些文件夹。为此,我尝试了很多方法。我首先尝试使用 Copy-item 直接排除,但没有奏效。然后我尝试了 Get-ChildItem ,但在某些文件夹中停止说访问被拒绝。
我在link 中尝试过这种方法。如果我只做一个文件夹,它会像预期的那样跳过它。但是即使该文件夹在排除列表中,也会搜索其他一些文件夹。
这是我的代码。
$source = "C:\"
$destination = "C:\Backup"
$Exclude = @('*C:\PerfLogs*' , "Backup" , "boot" , "MSOCache" , "programdata" , "Recovery" , "TrueDelete" , "Users", "Windows", "Documents and Settings", "Program Files (x86)\Google\" , "System Volume Information" , "`$Recycle.Bin" , "Config.Msi" , "bmm")
$includes ="*.xls " , "*.xlsx" , "*.doc" , "*.docx" , "*.ppt" , "*.pptx"
$items = Get-ChildItem $source -Recurse -Exclude $exclude -Include $includes | ?{ $_.fullname -notmatch "\\perflogs\\?" -or "\\backup\\?" } | Copy-Item -Destination $Destination -Container -Force
我最初想用文件夹树复制所有内容,但这也不起作用。运行此代码后,它首先在“Perflogs”处停止,如果我让它继续,它只会搜索并在排除列表中的其他一些文件夹上被拒绝访问。
Get-ChildItem:对路径“C:\PerfLogs\”的访问被拒绝。在 C:\pstools\backup\2.ps1:6 字符:10 + $items = Get-ChildItem $source -Recurse -Exclude $exclude -Include $includes | ? ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
干杯!
【问题讨论】:
-
您是从提升的提示符下运行它吗?此外,
Where-object子句很可能无法按您的意愿工作。?{ $_.fullname -notmatch "\\(perflogs|backup)\\?"}将是我将如何做到的......虽然如果你修复第一部分,它主要是不需要的。 -
嗨,马特,不,我不是。我需要能够在没有海拔的情况下运行它。除了“排除”部分外,一切都很好。谢谢。
-
不是最好的解决方案,但您可能会默默地出错
-ErrorAction SilentlyContinue。它仍然会获取文件夹的其余详细信息。 -
这将部分工作。但是当涉及到“用户”文件夹时,它将开始复制我不想要的所有办公文件。