2016-07-26 2 views
0

Ich habe folgende Powershell-Befehl:Wie fügt man einem Objekt/Ergebnis eines Powershell-Ausdrucks eine Spalte hinzu?

dir -r packages.config | % { ([xml](Get-Content $_.FullName)).packages.package; $_.DirectoryName } 

, die die XML-Dateien packages.config und ergibt die folgende Ausgabe für das 3 Element parst Attribute:

id         version  targetFramework 
--         -------  --------------- 
log4net       2.0.0   net45   
Newtonsoft.Json     8.0.3   net45   
protobuf-net      2.0.0.621  net45   
C:\code\Services\TestProfile 
EntityFramework     6.1.1   net45   
log4net       2.0.0   net45   
Newtonsoft.Json     8.0.3   net45   
protobuf-net      2.0.0.621  net45   
C:\code\Services\Tests

Hinweis der Verzeichnisname wird nach dem beigefügten Tabellenausgabe (dh keine ID in einer neuen Zeile).

Wie bekomme ich den Verzeichnisnamen als vierte Spalte jeder Zeile statt als zusätzliche Zeile nach jeder XML-Tabelle?

So:

id         version  targetFramework Path 
--         -------  --------------- ---- 
log4net       2.0.0   net45   C:\code\Services\TestProfile 
Newtonsoft.Json     8.0.3   net45   C:\code\Services\TestProfile 
protobuf-net      2.0.0.621  net45   C:\code\Services\TestProfile 
EntityFramework     6.1.1   net45   C:\code\Services\Tests 
log4net       2.0.0   net45   C:\code\Services\Tests 
Newtonsoft.Json     8.0.3   net45   C:\code\Services\Tests 
protobuf-net      2.0.0.621  net45   C:\code\Services\Tests

Snippet aus packages.config, die XML-Struktur zu veranschaulichen:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="log4net" version="2.0.0" targetFramework="net45" /> 
</packages> 
+1

'% {$ Pfad = $ _. DirectoryName; ([xml] (Get-Content $ _. FullName)). packages.package | Wähle *, @ {L = 'Pfad'; E = {$ Pfad}} ' –

+0

Danke @ MathiasR.Jessen! Verschieben Sie es zu einer Antwort und ich werde es als die akzeptierte Antwort markieren. –

Antwort

2

Verwenden Select-Object mit einer berechneten Eigenschaft!

Get-ChildItem -Recurse packages.config |ForEach-Object { 
    $Path = $_.DirectoryName 
    ([xml](Get-Content $_.FullName)).packages.package |Select-Object *,@{L='Path';E={$Path}} 
} 
+0

Danke, aber das fällt nach dem ersten packages.config aus. Der Befehl -r findet mehrere package.config-Dateien, aber aus irgendeinem Grund wird nur die erste Datei ausgegeben. –

+0

Ausschneiden? Es tut mir leid, aber ich kann dieses Verhalten nicht reproduzieren. Mit zwei verschiedenen packages.config Dateien in verschiedenen Ordnern bekomme ich die erwartete Ausgabe –

+0

Shoot, du hast Recht. Ich habe den Befehl von einem der Unterverzeichnisse statt von der Wurzel ausgeführt. Gut gemacht, und Entschuldigung für die Verwirrung. –

Verwandte Themen