如何在Powershell v4 vs v2中使用Get-ChildItem

时间:2015-10-20 13:41:24

标签: powershell get-childitem

可能是问题的标题有些误导,但我怀疑从2.0到4.0已经做了一些我不知道的变化......所以这里有了

以下代码将使用Powershell 2.0

为我提供Windows 2008服务器上的预期结果
dataB

正在执行的命令将是

## Get files/items using above variables
$LogFiles = @(Get-ChildItem "$IhsLogFolder\*.*" -include $LogFileMatch)  
$log.debugFormat("Found in {0} are {1}", $IhsLogFolder, $LogFiles)
foreach ($LogFile in $LogFiles) {
   $log.debugFormat("Found {0}", $LogFile.Name)
}

$LogFiles += @(Get-ChildItem "$PluginLogFolder" -recurse -include $LogFileMatch)
$log.debugFormat("Found in {0} are {1}", $PluginLogFolder, $LogFiles)

Get-ChildItem e:\logs\HTTPServer\*.* -include error.log,access.log,http_plugin.log

在使用Powershell 4.0的Windows 2012上尝试相同的脚本,上面的代码不会返回任何文件,但是如果我在Powershell中只尝试命令就会找到文件

Get-ChildItem e:\logs\WebPlugin\webserver\*.* -include error.log,access.log,http_plugin.log

有没有明显的理由让PS C:\> Get-ChildItem e:\logs\HTTPServer\*.* -include error.log,access.log,http_plugin.log Directory: E:\logs\HTTPServer Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 20.10.2015 15:35 4296922 access.log -a--- 19.10.2015 15:26 189102 error.log 在Powershell 4.0中没有返回文件?

更新

  1. 参考。评论 - 是的我确定$ log不是问题
  2. 我确实发现以下内容确实有效(硬编码包含)@(Get-ChildItem...,将include作为变量应用 more 而不是一个文件不会在4.0上返回任何结果服务器,但使用变量只有一个文件工作。
  3. 更好的代码段

    $LogFiles = @(Get-ChildItem "$IhsLogFolder\*.*" -include error.log,access.log,http_plugin.log)

1 个答案:

答案 0 :(得分:0)

-include参数采用字符串数组:

> Get-Help Get-ChildItem -Full
  ...
  -Include <string[]>

因此,构建$includeFile作为数组应该有效,目前您将其设置为字符串。

尝试改为:

$includeFile = "file1.txt","file2.txt"
$result = Get-ChildItem $pathToFolder -include $includeFile