Невозможно найти позиционный параметр, который принимает аргумент '\'

Я пытаюсь получить метаданные из каталога, и я получаю сообщение об ошибке, что не может быть найден позиционный параметр, принимающий аргумент '\'. Не знаете, как это исправить?

$FileMetadata = Get-FileMetaData -folder (Get-childitem $Folder1 + "\" + $System.Name + "\Test" -Recurse -Directory).FullName

Ответы

Ответ 1

Вам нужно выполнить конкатенацию в подвыражении:

$FileMetadata = Get-FileMetaData -folder (Get-childitem ($Folder1 + "\" + $System.Name + "\Test") -Recurse -Directory).FullName

или вставьте переменные в строку следующим образом:

$FileMetadata = Get-FileMetaData -folder (Get-childitem "$Folder1\$($System.Name)\Test" -Recurse -Directory).FullName

Ответ 2

Самый надежный способ в Powershell для создания пути, когда части пути хранятся в переменных, - это использовать командлет cmdlet Join-Path.

Это также устраняет необходимость использования "\".

Итак, в вашем случае это будет:

$FoldersPath = Join-Path -Path $Folder1 -ChildPath "$System.Name\Test"

$FileMetadata = Get-FileMetaData -folder (Get-ChildItem $FoldersPath -Recurse -Directory).FullName

Ответ 3

Если вы пришли из мира VBScript. В Powershell каждое пробел интерпретируется как отдельный параметр, передаваемый командлету. Вам нужно либо поместить формулу в круглые скобки, чтобы формула была оценена до ее передачи в качестве параметра пути, либо заключена в кавычки:

Powershell считает, что это не два параметра:

$ Folder1 + "\" + $ System.Name

Будем работать с скобками:

($Folder1 + "\" + $System.Name)

Также будет работать вместе, когда заключено в кавычки:

"$Folder1\$System.Name"

Ссылка