Да, $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
см. документы .
Что касается то, что вы пытались :
$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, ...
поддерживается только в том случае, если вы передаете массив в качестве аргумента команды , не в контексте создания массива с выражением , таким как $LogsToGather = 'foo', 'bar', ..
Причина в том, что PowerShell имеет два основных режима синтаксического анализа - режим аргумента и режим выражения , как объяснено в этот ответ ,