Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 基于CSV文件从Get ChildItem中排除目录列表_Powershell - Fatal编程技术网

Powershell 基于CSV文件从Get ChildItem中排除目录列表

Powershell 基于CSV文件从Get ChildItem中排除目录列表,powershell,Powershell,目录结构如下: Directory: \\L04274\C$\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/

目录结构如下:

Directory: \\L04274\C$\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/12/2018 2:04 PM AutomatedImportProcess d----- 3/13/2018 11:34 AM f1 d----- 3/13/2018 11:33 AM f2 我只希望看到以下文件夹:

\\L04274\C$\Temp\AutomatedImportProcess\ \\L04274\C$\Temp\AutomatedImportProcess\
Exclude
仅对文件名有效

您必须在以下事实之后使用嵌套的
Where Object
语句:

$path = '\\L04274\C$\Temp\f1' 
$exclusions = @(Import-Csv -LiteralPath '\\L04274\C$\Temp\Exclusions.csv') |Select-Object -Expand ExcludeDirectory

Get-ChildItem -Path $path -Force |Where-Object {
    $FullName = $_.FullName
    -not($exclusions|Where-Object {
        $FullName -like "$_*"
    })
}

如果完整路径与任何排除项都不匹配,则
-not(…)
语句将返回
$true
,否则文件将被忽略
排除
仅对文件名有效

您必须在以下事实之后使用嵌套的
Where Object
语句:

$path = '\\L04274\C$\Temp\f1' 
$exclusions = @(Import-Csv -LiteralPath '\\L04274\C$\Temp\Exclusions.csv') |Select-Object -Expand ExcludeDirectory

Get-ChildItem -Path $path -Force |Where-Object {
    $FullName = $_.FullName
    -not($exclusions|Where-Object {
        $FullName -like "$_*"
    })
}
如果完整路径与任何排除项不匹配,则
-not(…)
语句将返回
$true
,否则将忽略该文件此操作:

$path = '\\L04274\C$\Temp' 
$exclusion = @(Get-Content -LiteralPath '\\L04274\C$\Temp\Exclusions.csv')

 (Get-ChildItem -Path $path -Force -Exclude $exclusion | ForEach-Object -Process { 
  $allowed = $true 
  foreach ($exclude in $exclusion) { 
     if ( $_.FullName  -like $exclude) {  
       $allowed = $false
       break
    }

  }
  if ($allowed) {
    $_ 
  }
 }).FullName
这起到了作用:

$path = '\\L04274\C$\Temp' 
$exclusion = @(Get-Content -LiteralPath '\\L04274\C$\Temp\Exclusions.csv')

 (Get-ChildItem -Path $path -Force -Exclude $exclusion | ForEach-Object -Process { 
  $allowed = $true 
  foreach ($exclude in $exclusion) { 
     if ( $_.FullName  -like $exclude) {  
       $allowed = $false
       break
    }

  }
  if ($allowed) {
    $_ 
  }
 }).FullName

看看这个问题:@JamesC。这不是我想做的。在您提到的问题中,他们使用以下内容来排除:[$archive=archive,archive,archive]我希望从csv读取到数组或某个列表中,并使用该列表排除文件夹/文件。因此,如果要排除f1文件夹,则应使用条目“\\L04274\C$\Temp\f1\”来排除。如果我只想排除文本文件,则应使用“\\L04274KAMRANF\C$\Temp\f1*.txt”。我注意到的第一件事是,您在“\\L04274\C$\Temp\f1”处执行Get ChildItem,但排除项的根是C:\Temp。请看这个问题:@JamesC。这不是我想做的。在您提到的问题中,他们使用以下内容来排除:[$archive=archive,archive,archive]我希望从csv读取到数组或某个列表中,并使用该列表排除文件夹/文件。因此,如果要排除f1文件夹,则应使用条目“\\L04274\C$\Temp\f1\”来排除。如果我只想排除文本文件,则“\\L04274KAMRANF\C$\Temp\f1*.txt”应该使用。我注意到的第一件事是,您在“\\L04274\C$\Temp\f1”上执行Get ChildItem,但您的排除项的根是C:\Temp。这引发了一个异常,但它确实让我想到了解决问题的方法:FYI异常如下:无法找到Select对象:属性“ExcludeDirectory”。在C:\Users\kamranf\Documents\PoweShellScripts\Untitled15.ps1:2 char:85+。。。RANF\C$\Temp\Exclutions.csv')选择对象-展开ExcludeDirectory+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:InvalidArgument:(ExcludeDirectory:PSObject)[选择对象],PSArgumentException+FullyQualifiederRoId:ExpandPropertyNotFound,Microsoft.PowerShell.Commands。SelectObjectCommand@KamranFarzami我的错误应该是
导入Csv
而不是
获取内容
谢谢。这引发了一个异常,但它确实给了我一个想法,让我解决了这个问题:仅供参考,异常如下:选择对象:找不到属性“ExcludeDirectory”。在C:\Users\kamranf\Documents\PoweShellScripts\Untitled15.ps1:2 char:85+。。。RANF\C$\Temp\Exclutions.csv')选择对象-展开ExcludeDirectory+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:InvalidArgument:(ExcludeDirectory:PSObject)[选择对象],PSArgumentException+FullyQualifiederRoId:ExpandPropertyNotFound,Microsoft.PowerShell.Commands。SelectObjectCommand@KamranFarzami我的错误应该是
导入Csv
而不是
获取内容
注意
“\\L04274\C$\Temp\f2\file.txt”-比如“\\L04274\C$\Temp\f2\”
是错误的。您需要将其设置为“\\L04274\C$\Temp\f2\file.txt”
“\\L04274\C$\Temp\f2\*”
才能为真。但是,不确定您想要的是什么。请注意,
“\\L04274\C$\Temp\f2\file.txt”-如“\\L04274\C$\Temp\f2\”
是错误的。您需要将其设置为“\\L04274\C$\Temp\f2\file.txt”
“\\L04274\C$\Temp\f2\*”
才能为真。不过,我不知道你在追求什么。