Pour $_
pour avoir une valeur, vous devez l'utiliser dans un contexte où il est réellement défini. cela signifie que vous devez envelopper votre appel à svn
dans une applet de commande ForEach-Object
Pour votre scénario spécifique:
dir * -include *.cs | Select-String -simplematch -pattern "HeadURL$" | select filename | % { svn propset svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_ }
(je l'ai utilisé les %
alias ici par souci de concision)
intérieur qui ForEach
la $_
variable a une valeur et peut être utilisé.
Cependant, j'ai vu quelques utilisations où l'objet de pipeline actuel a été ajouté aux arguments d'un programme lors de la tuyauterie dans les non-cmdlets. Je n'ai pas entièrement compris cela jusqu'à présent, cependant. Mais pour comprendre ce que vous faites ici: Vous essayez de définir svn:keywords
sur tous les fichiers qui en utilisent un. Une approche sans doute plus robuste et plus lisible serait en fait filtre la liste que vous numérisez:
gci * -inc *.cs |
Where-Object {
(Get-Content $_) -match 'HeadURL$'
}
(pourrait fonctionner, n'ont pas testé)
Vous pouvez alors continuer en juste tuyauterie en foreach:
| ForEach-Object {
svn ps svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_.FullName
}
en outre, ici vous pouvez accéder à toutes les propriétés de l'objet fichier et pas besoin de compter sur l'objet Select-String
vous donne.
Salut. Merci beaucoup pour votre aide! J'ai blogué sur ma solution: http://startbigthinksmall.wordpress.com/2009/07/27/setting-svnkeywords-for-specific-files-with-windows-powershell-or-grep-with-powershell/ –