web-dev-qa-db-fra.com

Impossible de trouver un paramètre de position acceptant l'argument '\'

J'essaie d'obtenir les métadonnées d'un répertoire et j'obtiens une erreur indiquant qu'il est impossible de trouver un paramètre de position acceptant l'argument '\'. Vous ne savez pas comment corriger cela?

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

Vous devez faire la concaténation dans une sous-expression:

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

ou incorporer les variables dans une chaîne comme celle-ci:

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

Le moyen le plus efficace dans Powershell de créer un chemin lorsque des parties du chemin sont stockées dans des variables consiste à utiliser la cmdlet Join-Path.

Cela élimine également la nécessité d’utiliser "\".

Donc dans votre cas, ce serait:

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

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

Si vous venez du monde de VBScript. Avec Powershell, chaque espace est interprété comme un paramètre complètement séparé transmis à la cmdlet. Vous devez soit placer la formule entre parenthèses pour que la formule soit évaluée avant de la passer en tant que paramètre de chemin, ou le mettre entre guillemets fonctionne également:

Cela ne fonctionnera pas, Powershell pense qu'il s'agit de deux paramètres:

$ Dossier1 + "\" + $ System.Name

Travaillera avec des crochets:

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

Travaillera également ensemble lorsqu'il est placé entre guillemets:

"$Folder1\$System.Name"

Ref.

1
Jeremy Thompson