Get-Childitem部分排除

时间:2014-10-15 17:41:55

标签: powershell get-childitem

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 char:10   + $ items = Get-ChildItem $ source -Recurse -Exclude $ exclude -Include $ includes | ? ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

干杯!

1 个答案:

答案 0 :(得分:0)

$source = "C:\"
$destination = "C:\Backup"
$Exclude =  @("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"
$regex = "($($Exclude -join "|"))"
$items = Get-ChildItem $source -Recurse -Include $includes -ErrorAction SilentlyContinue | 
        ?{ $_.fullname -notmatch $regex } #| Copy-Item -Destination $Destination -Container -Force

我不认为它会在读取它们之前排除目录,因此错误。一个comprimise将是读取它可以的所有目录和文件(是的,我知道它很慢),因为它不能以提升的权限运行。对于能够阅读的文件,将使用Where-Object -notmatch从您的$exclude变量构建的正则表达式字符串。正如你所看到的,我不得不逃避正则表达式的一些角色。因此,将排除在其中包含这些单词的任何文件。

<强>买者

截至目前,它将排除backup.docx。如果这是一个问题,您可以将"backup"中的$Exclude编辑为"\\backup\\",以仅排除该目录中的文件。正则表达式需要\\,因为\是控制字符。当您认为Copy-Item有效时,可以取消注释C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Cumulative Setu... C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Platform Suites... C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Serial Number V... C:\Program Files (x86)\LibreOffice 3.6\program\python-core-2.6.1\lib C:\Program Files (x86)\Microsoft Office\Office14\1033 C:\Program Files (x86)\Simon Sez IT\SharePoint Foundation 2013 Training\exercis... C:\Temp

测试样本

在我自己的计算机上运行 unelevated 从以下目录返回了17个文件。

{{1}}