这个让我有些难过。我通常在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接受逗号描述似乎是一个技巧。是否可以使用某种数组,哈希表等来重新创建它?
有人知道吗?
答案 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中所述,