4
votes

Est-il possible d'utiliser des commentaires dans les commandes Powershell à plusieurs lignes?

Le débogage et le test des commandes multilignes dans Powershell ISE me dérangent depuis des années. J'aime avoir plusieurs commandes de ligne parce qu'elles sont faciles à lire, mais elles rendent les choses plus difficiles à déboguer. À titre d'exemple, j'utilise la commande suivante pour obtenir des dossiers plus anciens que $ days (ce qui fonctionne d'ailleurs).

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
#    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) `
    | Sort-Object -Property LastWriteTime

Je voudrais changer AddDays en AddMinutes pour tester différents ensembles de résultats, mais je veux laisser la ligne d'origine, donc je peut facilement basculer d'avant en arrière. Ci-dessous, j'ai copié la ligne que je veux conserver et l'ai commentée, et sur la nouvelle ligne, j'ai changé AddDays en AddMinutes L'ajout d'un # casse la multiligne fonctionnalité. Existe-t-il un moyen simple de contourner ce problème: je n'ai pas à couper ma ligne copiée et à la déplacer "hors" de la commande? Ou y a-t-il un moyen de diviser / annuler une commande en plusieurs lignes?

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) `
    | Sort-Object -Property LastWriteTime

(ci-dessus ne fonctionne pas en raison de la ligne commentée)

p>


1 commentaires

Obtenir de l'aide about_Comment_Based_Help


4 Réponses :


3
votes

Utilisez la syntaxe de commentaire multiligne au lieu de #.

<# comment #> 

Cela devrait vous permettre de commenter du texte dans une commande multiligne.

Cependant, cela ne fonctionne que si vous utilisez Powershell 2.0


0 commentaires

1
votes

Essayez ceci, qui peut être inclus comme exemple de commentaire multiligne

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 `
<#    | Where CreationTime -gt (Get-Date).AddDays(-1 * $days) #> ` | Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) `
    | Sort-Object -Property LastWriteTime


0 commentaires

5
votes

votre problème, ce sont les backticks [méchants, méchants]. [ grin ] powershell sait qu'il y en a plus après un tube ... donc il n'est pas nécessaire d'ajouter un backtick si vous placez le tube à la fin du segment qui est diffusé. comme ça ...

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
    # Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $days) |
    Sort-Object -Property LastWriteTime


5 commentaires

Tu m'as battu par 7secs 😉


@LotPings - wheeeeee! [ sourire ]


@WhiskerBiscuit - c'est parfois un véritable essai ... "plusieurs bonnes réponses, une seule peut être acceptée" peut être partiellement traité en votant pour les deux, mais [ sourire ]


Cette solution est très spécifique aux canalisations, mais pas à tout autre scénario multi-lignes. <# comment #> est une solution correcte


@ mr.buttons - ouais! la question semblait spécifique, donc ma réponse était précise. la réponse générale est d'utiliser des continuations de lignes naturelles [virgules, accolades ouvertes / paren, notation par points, commentaires multilignes, etc ...] au lieu de backticks. [ sourire ]



5
votes

Comme powershell attend une continuation après un | ou un ,
en tant que dernier caractère d'une ligne, vous n'avez pas besoin du backtick et
vous pouvez mettre en forme différemment, alors le commentaire d'une seule ligne dans un tube plus long fonctionne toujours:

$dirs = Get-ChildItem $targetDir -Directory -exclude *.ps1 |
#   Where CreationTime -gt (Get-Date).AddDays(-1 * $days) |
    Where CreationTime -gt (Get-Date).AddMinutes(-1 * $minutes) |
    Sort-Object -Property LastWriteTime


1 commentaires

Sainte vache. Nous l'avons fait mal toutes ces années