Comment diviser les chemins avec la commande Split-Path PowerShell

Avez-vous besoin de diviser les chemins pour obtenir des parties spécifiques ? Si c’est le cas, alors PowerShell Split-Path est l’ami sur lequel vous pouvez compter. Lorsque vous travaillez avec des fichiers, des certificats et le registre, vous remarquerez que les chemins représentent leurs emplacements.

Et à un moment donné, vous devrez peut-être filtrer quelle partie d’un chemin retourner, peut-être lors de l’automatisation. Heureusement pour vous, ce tutoriel vous apprendra des façons d’utiliser la cmdlet PowerShell Split-Path pour le faire.

Allez ! Continuez à lire, et permettez-moi de vous procurer une nouvelle arme pour votre arsenal PowerShell !

Prérequis

Si vous prévoyez de suivre les exemples de ce tutoriel pratique, vous aurez besoin d’un ordinateur exécutant n’importe quelle version moderne de Windows avec PowerShell 5.1 ou version ultérieure. Ce tutoriel utilisera Windows 10 20H2 avec PowerShell 7.1.1.

Qu’y a-t-il dans un chemin ?

Avant de plonger profondément avec la cmdlet PowerShell Split-Path, assurez-vous d’être clair sur ce qu’est un chemin. Un chemin détermine l’emplacement d’un élément qui suit un format spécifique.

Par exemple, le chemin d’un fichier pourrait être C:\demo\subfolder1\TestFile_11.txt. Si vous séparez ce chemin en parties, le chemin inclut ce qui suit :

  • C: is the drive or the qualifier, or the specified path. The qualifier is the part of the path from the left up to the colon (:) character.
  • \demo\subfolder1\ est le dossier et le(s) sous-dossier(s) ou conteneurs.
  • TestFile_11.txt est le nom de fichier ou la feuille. La feuille est le dernier élément ou partie d’un chemin.

Remember, cependant, que les chemins ne sont pas exclusifs aux fichiers et dossiers. D’autres chemins valides peuvent inclure :

  • Certificat (par exemple, Cert:\CurrentUser\My)
  • Registre (par exemple, HKCU:\Software)
  • Fonction (par exemple, Function:\New-Guid)
  • Variable (par exemple, Variable:\PSEdition)
  • Annuaire actif (par exemple, AD:\CN=Utilisateurs,DC=Constoso,DC=com)

Les paramètres de Split-Path dans PowerShell

Comme toute cmdlet, Split-Path est livré avec un ensemble de paramètres qui manipulent le comportement de la cmdlet et renvoient sa sortie. Et ces paramètres constituent la syntaxe de Split-Path dans PowerShell.

  • -Path – Ce paramètre accepte une ou plusieurs chaînes de chemin que vous souhaitez diviser. Ce paramètre accepte également l’entrée du pipeline. Les jokers dans les chemins sont également acceptables.
  • -LiteralPath – Comme le paramètre -Path, le paramètre -LiteralPath accepte également des chemins à diviser. Mais ce paramètre traitera le chemin tel qu’il est écrit. En d’autres termes, la commande n’interprétera pas les jokers si vous utilisez ce paramètre pour spécifier des chemins.
  • -Resolve – Ce paramètre indique à la cmdlet Split-Path de résoudre les fichiers ou éléments référencés par le chemin que vous avez fourni. En raison de sa nature littérale, vous ne pouvez pas utiliser ce paramètre avec le paramètre -LiteralPath.
  • -IsAbsolute – Ce paramètre renvoie une valeur booléenne pour déterminer si le chemin spécifié est un chemin absolu ou non.

La cmdlet PowerShell Split-Path dispose également d’un paramètre appelé -Credential, qui accepte apparemment un objet PSCredential. Mais selon Microsoft, ce paramètre n’est pas pris en charge par l’un des fournisseurs PowerShell intégrés et génère une erreur lors de son utilisation.

Les paramètres suivants sont appelés les paramètres de division d’emplacement. Ces paramètres indiquent à la cmdlet PowerShell Split-Path quel élément ou quelle partie d’un chemin renvoyer. Étant donné que la cmdlet ne peut renvoyer qu’un seul élément d’un chemin, vous ne pouvez utiliser qu’un seul de ces paramètres à la fois.

  • -Parent – Renvoie l’emplacement parent (sans l’élément ou le nom de fichier) du chemin spécifié. Ce paramètre est également le paramètre de division d’emplacement par défaut, ce qui signifie que vous pouvez omettre ce paramètre et obtenir quand même l’emplacement parent comme résultat.
  • -Leaf – Renvoie uniquement le dernier élément du chemin ou la feuille.
  • -LeafBase – Renvoie uniquement le dernier élément du chemin ou la feuille sans l’extension. Ce paramètre n’est disponible que dans PowerShell 6.0 et ultérieur.
  • -Extension – Retourne uniquement l’extension de la feuille (du dernier point « . » jusqu’au dernier caractère du chemin). Ce paramètre n’est disponible que dans PowerShell 6.0 et supérieur.
  • -Qualifier – Retourne uniquement le lecteur ou le qualificateur du chemin.
  • -NoQualifier – Supprime le lecteur ou le qualificateur du reste du chemin.

Utilisation du cmdlet Split-Path de PowerShell (Exemples)

Le cmdlet Split-Path de PowerShell vous permet de diviser et de disséquer des parties d’un chemin. Ensuite, vous pouvez spécifier quelle partie d’un chemin retourner. Selon vos besoins de sortie, vous pouvez choisir de retourner le qualificateur, le chemin sans qualificateur et le(s) nom(s) de fichier.

Obtenir le dossier parent d’un chemin

Pour retourner le dossier parent du chemin, exécutez le cmdlet PowerShell Split-Path et ajoutez le paramètre -Parent.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Parent

Le résultat ci-dessous montre que la commande retourne le chemin du dossier parent.

Returning the parent containers of the Item

Astuce: Exécuter le cmdlet PowerShell Split-Path sans paramètres retournera le dossier parent par défaut, le même comportement que l’utilisation du paramètre -Parent.

Astuce: Le paramètre -Path accepte plusieurs chemins, ce qui vous permet de diviser plusieurs valeurs de chaînes de chemin en une seule commande.

e.g., Split-Path -Path 'c:\folder1','c:\folder2'

Affichage d’un chemin sans le qualificateur

Imaginez que vous créez un script qui duplique une structure d’arborescence de dossiers d’un lecteur à un autre (par exemple, C:\demo\subfolder1 à D:\demo\subfolder1). Vous voudrez peut-être que votre code divise le chemin source et obtienne uniquement la structure de dossiers sans la lettre du lecteur.

Pour obtenir le chemin sans le qualificatif, exécutez la commande PowerShell Split-Path avec le paramètre -NoQualifier comme ci-dessous. Cette commande divise le chemin tout en omettant la lettre du lecteur dans le résultat.

Split-Path -Path C:\demo\subfolder1 -NoQualifier

Comme vous pouvez le voir dans le résultat ci-dessous, l’utilisation du paramètre noQualifier renvoie le chemin mais sans la chaîne de qualificatif.

Returning the Path Without the Qualifier

Obtention du lecteur ou du qualificatif d’un chemin

Il peut arriver que vous ayez besoin de renvoyer uniquement le qualificatif ou la lettre du lecteur. Par exemple, lorsque vous voulez que votre script résume les résultats en fonction des lettres de lecteur.

Et pour ce faire, exécutez la commande PowerShell Split-Path ci-dessous avec le paramètre -Qualifier. Cette commande divisera le chemin et ne renverra que la chaîne de qualificatif en résultat.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Qualifier
Returning the Path’s Drive or Qualifier

Affichage du nom d’un fichier, d’un répertoire ou d’un élément

Pensez à un chemin comme à un arbre. Le qualificatif est l’arbre lui-même, les dossiers sont les branches et à la fin, vous trouverez la feuille. Une feuille est une chaîne de longueur non nulle à la fin du chemin.

Lorsque vous avez besoin de diviser un chemin pour obtenir la feuille, exécutez la commande Split-Path ci-dessous et ajoutez le paramètre -Leaf.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Leaf

En conséquence, l’image ci-dessous montre que la commande a uniquement renvoyé le nom de fichier du chemin que vous avez spécifié.

Returning the Path’s Leaf

Fractionner le nom de fichier et l’extension (≥PowerShell 6.0)

Note : Cette section s’applique à PowerShell 6.0 et versions ultérieures.

Vous avez donc divisé le chemin et récupéré l’élément. Et l’élément, dans ce cas, est un nom de fichier (TestFile_11.txt), qui comprend deux parties – la base et l’extension. La cmdlet PowerShell Split-Path vous permet de diviser davantage la feuille en ces deux parties avec les paramètres -LeafBase et -Extension.

Pour obtenir la base et l’extension d’un nom de fichier, exécutez les commandes ci-dessous.

Si le chemin n’a pas d’extension, le paramètre Extension renverra une chaîne vide.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -LeafBase
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Extension
Splitting the Leaf’s Base and Extension

Fractionner le nom de fichier et l’extension (≤ Windows PowerShell 5.1)

Malheureusement, les paramètres -LeafBase et -Extension ne sont pas disponibles dans Windows PowerShell 5.1 et les versions inférieures. Ne vous inquiétez pas cependant, avec un peu de magie PowerShell, vous pouvez reproduire la sortie de ces paramètres même si vous n’avez que Windows PowerShell 5.1.

Mais au lieu de la cmdlet Split-Path, vous utiliserez la prochaine meilleure chose – la combinaison de la méthode split() et de l’opérateur -replace.

A PowerShell string object, such as the path, contains a split() method. This method allows you to split a string into multiple elements based on a delimiter character that you provide. And in the case of paths, the delimiter is the (\\) back-slash character.

D’autre part, l’opérateur -replace vous permet de remplacer des chaînes en utilisant des expressions régulières (RegEx).

Pour imiter les résultats du paramètre -LeafBase, exécutez la commande ci-dessous dans PowerShell.

# Divisez le chemin ('C:\demo\subfolder1\TestFile_11.txt') en utilisant '\' comme délimiteur.
# Sélectionnez le dernier élément '[-1]' après la division (TestFile_11.txt)
# Recherchez la chaîne qui correspond à ce motif --> '\.[^.]*$'
# ^ ce motif correspondra au dernier point "." dans le chemin ET à tous les autres caractères après celui-ci.
# Puis remplacez la correspondance par rien/valeur vide ''.
('C:\demo\subfolder1\TestFile_11.txt').split('\')[-1] -replace '\.[^.]*$',''

En conséquence, la capture d’écran ci-dessous montre que la commande a renvoyé uniquement le nom de base du fichier.

Getting the file base in PowerShell 5.1

Maintenant, pour obtenir uniquement l’extension de fichier, exécutez la commande ci-dessous dans PowerShell.

# Divisez le chemin ('C:\demo\subfolder1\TestFile_11.txt') en utilisant '.' comme délimiteur.
# Sélectionnez le dernier élément '[-1]' après la division (txt)
('C:\demo\subfolder1\TestFile_11.txt').split('.')[-1]

Le résultat ci-dessous montre que la commande a renvoyé uniquement l’extension de fichier – txt.

Getting the file extension in PowerShell ≤ 5.1

Détermination si le chemin est absolu

En tant qu’administrateur système, vous rencontrerez deux types de chemins—absolu et relatif. Mais quelle est la différence? Un chemin absolu commence par un qualificateur, tel que C:\demo ou HKCU:\Software. En revanche, un chemin relatif n’a pas de qualificateur, comme .\demo ou \folder1\folder2.

Le cmdlet Split-Path de PowerShell peut vous aider à identifier un chemin absolu en utilisant le paramètre -IsAbsolute. Pour ce faire, exécutez les commandes ci-dessous pour déterminer si le chemin est absolu.

# Ce chemin est absolu
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -IsAbsolute
# Ce chemin est relatif
Split-Path -Path .\demo\subfolder1\TestFile_11.txt -IsAbsolute

Comme vous pouvez le voir ci-dessous, le paramètre -isAbsolute renvoie une valeur booléenne pour indiquer si le chemin est absolu (TRUE) ou relatif (FALSE).

Determining if the Path is Absolute

Division et Résolution des chemins avec des Jokers

Jusqu’à présent, les chemins que vous avez divisés avec le cmdlet Split-Path n’ont pas besoin d’exister. Que le chemin existe ou non, ce cmdlet le divisera et vous donnera le résultat.

Mais le cmdlet Split-Path de PowerShell a un autre paramètre appelé -Resolve. Ce paramètre vous permet de résoudre les éléments référencés par des jokers. Et si vous utilisez ce paramètre, le chemin que vous diviserez et les éléments à l’intérieur doivent déjà exister.

Par exemple, pour retourner les éléments correspondant à l’extension de fichier *.txt, exécutez la commande ci-dessous. Le paramètre -Leaf garantit que le cmdlet ne renvoie que les éléments et non les conteneurs parents.

Le joker (*) représente un ou plusieurs caractères à correspondre, tandis que (?) représente un joker de caractère unique.

Split-Path -Path C:\demo\subfolder1\*.txt -Leaf -Resolve

Le résultat ci-dessous répertorie les fichiers TestFile_11.txt à TestFile_20.txt. Ces fichiers correspondent tous à l’extension de nom de fichier .txt.

Resolving matching filenames

Pour résoudre une correspondance de caractère unique, remplacez l’astérisque (*) par le joker (?), comme dans la commande ci-dessous.

Split-Path -Path C:\demo\subfolder1\TestFile_2?.txt -Resolve -Leaf

La sortie ci-dessous montre uniquement le fichier TestFile_20.txt car ce fichier est le seul qui correspondait.

Resolving matching single character

Si le chemin contient un caractère d’échappement, tel que l’accent grave (« `), enfermez le chemin entre guillemets simples pour résoudre le chemin. Par exemple, la commande ci-dessous divise et résout un chemin contenant un caractère d’échappement.

Split-Path -Path 'C:\demo\subfolder1\dir`n\TestFile_2?.txt' -Leaf -Resolve
Splitting and Resolving a Path with Escape Characters

À titre de preuve de concept, si vous n’entourez pas ce chemin de guillemets simples, la commande renverra une erreur indiquant que le chemin n’existe pas. La même erreur se produit également si vous utilisez des guillemets doubles à la place.

Split-Path -Path C:\demo\subfolder1\dir`n\TestFile_2?.txt -Leaf -Resolve
Split-Path -Path "C:\demo\subfolder1\dir`n\TestFile_2?.txt" -Leaf -Resolve
Resolving a Path without enclosing single quotation marks

Conclusion

La commande PowerShell Split-Path est un outil indispensable pour les administrateurs système et les utilisateurs. Ce tutoriel visait à vous apprendre comment la commande Split-Path peut diviser n’importe quel chemin donné et renvoyer des éléments spécifiques en fonction du paramètre que vous utilisez.

Avez-vous déjà utilisé Split-Path dans vos tâches auparavant ? Sinon, ce tutoriel vous a-t-il convaincu de l’utiliser dans vos travaux manuels ou d’automatisation ? Ou connaissez-vous une autre manière de diviser les chemins mieux que Split-Path de PowerShell ne le peut ?

Source:
https://adamtheautomator.com/powershell-split-path/