通过变量具有多个路径的Get-ChildItem

时间:2019-10-16 13:54:20

标签: powershell

这个让我有些难过。我通常在Powershell方面感觉很高级,但我根本不了解这一功能的细微差别。

这有效

$LogFiles = Get-ChildItem -Path c:\windows\temp\*.log,c:\temp\*.log,C:\programdata\Microsoft\IntuneManagementExtension\Logs\*.log

我想做的(不起作用)是这样:

$LogsToGather = "c:\windows\temp\*.log,c:\temp\*.log,C:\programdata\Microsoft\IntuneManagementExtension\Logs\*.log"
$LogFiles = Get-ChildItem -Path "$($LogsToGather)" -Recurse

我尝试将VAR设置为数组,并尝试了一些使用字符串的方法。我能够解决这个问题,但是我对了解哪种数据类型-path具有这种常见的描述并能够动态创建它具有独特的兴趣。

该cmdlet接受逗号描述似乎是一个技巧。是否可以使用某种数组,哈希表等来重新创建它?

有人知道吗?

1 个答案:

答案 0 :(得分:7)

是的,$LogsToGather必须是字符串的数组,命令才能起作用:

$LogsToGather = 'c:\windows\temp\*.log', 'c:\temp\*.log', 'C:\programdata\Microsoft\IntuneManagementExtension\Logs\*.log'

请注意,用,分隔的数组元素必须分别用 引用(见底部)。


Get-Help-Parameter是检查给定参数期望的数据类型的快速方法:

PS> Get-Help Get-ChildItem -Parameter Path

-Path <String[]>
    Specifies a path to one or more locations. Wildcards are permitted. The default location is the current directory (`.`).

    Required?                    false
    Position?                    0
    Default value                Current directory
    Accept pipeline input?       True (ByPropertyName, ByValue)
    Accept wildcard characters?  false

String[]表示[][string])个实例的数组(System.String)-请参见about_Command_Syntax

有关Get-ChildItem的更多信息,请参见the docs


关于您尝试过的事情

  

$LogsToGather = "c:\windows\temp\*.log,c:\temp\*.log,C:\programdata\Microsoft\IntuneManagementExtension\Logs\*.log"

这将创建一个单个字符串,该字符串在传递给Get-ChildItem时,将整体解释为单个路径,显然是行不通的。

请注意,指定数组中未引用 的元素,如:

  

Get-ChildItem -path c:\windows\temp\*.log, c:\temp\*.log, ...

仅当您将数组作为命令参数 传递时,才支持

,而不是在创建具有 expression 的数组时,例如$LogsToGather = 'foo', 'bar', ..

原因是 PowerShell具有两种基本的解析模式-参数模式表达模式 ,如this answer中所述,