2017-04-26 2 views
2

Was sind in PowerShell Unterschiede zwischen | und >?Powershell: Unterschiede zwischen | und>?

dir | CLIP #move data to clipboard 
dir > CLIP #not moving, creating file CLIP (no extension) 

Bin ich richtig | bewegt das aktuelle Ergebnis auf den nächsten Block in der Pipeline zu übernehmen und > speichert die Daten in einer Datei?

Gibt es noch andere Unterschiede?

+2

Der Umleitungsoperator '>' auch die Ausgabe in eine Zeichenfolge konvertiert, während das Rohr '|' hält die Objekte wie –

Antwort

5

(nicht vollständig) ja.

| und > sind zwei verschiedene Dinge.

> ist ein sogenannter Umleitungsoperator.

Ein Umleitungsoperator leitet die Ausgabe eines Streams in eine Datei oder einen anderen Stream um. Der Pipelineoperator leitet das Rückgabeobjekt eines Cmdlets oder einer Funktion an das nächste (oder das Ende der Pipeline). Während das Rohr das ganze Objekt mit seinen Eigenschaften pumpt, leitet das Umleitungsrohr nur seinen Ausgang. Wir können dies illustrieren mit einem einfachen Beispiel:

#Get the first process in the process list and pipe it to `Set-Content` 
PS> (Get-Process)[0] | Set-Content D:\test.test 
PS> Get-Content D:/test.test 

Ausgänge

System.Diagnostics.Process (AdAppMgrSvc)

Ein Versuch, das Objekt in eine Zeichenfolge zu konvertieren.


#Do the same, but now redirect the (formatted) output to the file 
PS> (Get-Process)[0] > D:\test.test 
PS> Get-Content D:/test.test 

Ausgänge

Handles NPM(K) PM(K)  WS(K)  CPU(s)  Id SI ProcessName 
------- ------ -----  -----  ------  -- -- ----------- 
    420  25  6200  7512    3536 0 AdAppMgrSvc 

Ein drittes Beispiel die Fähigkeiten des Bedieners Rohr zeigen:

PS> (Get-Process)[0] | select * | Set-Content D:\test.test 
PS> Get-Content D:/test.test 

Dieser Wille Ausgang ein Hashtable mit allen Eigenschaften des Prozesses:

@{Name=AdAppMgrSvc; Id=3536; PriorityClass=; FileVersion=; HandleCount=420; WorkingSet=9519104; PagedMemorySize=6045696; PrivateMemorySize=6045696; VirtualMemorySize=110989312; TotalProcessorTime=; SI=0; Handles=420; VM=110989312; WS=9519104; PM=6045696; NPM=25128; Path=; Company=; CPU=; ProductVersion=; Description=; Product=; __NounName=Process; BasePriority=8; ExitCode=; HasExited=; ExitTime=; Handle=; SafeHandle=; MachineName=.; MainWindowHandle=0; MainWindowTitle=; MainModule=; MaxWorkingSet=; MinWorkingSet=; Modules=; NonpagedSystemMemorySize=25128; NonpagedSystemMemorySize64=25128; PagedMemorySize64=6045696; PagedSystemMemorySize=236160; PagedSystemMemorySize64=236160; PeakPagedMemorySize=7028736; PeakPagedMemorySize64=7028736; PeakWorkingSet=19673088; PeakWorkingSet64=19673088; PeakVirtualMemorySize=135786496; PeakVirtualMemorySize64=135786496; PriorityBoostEnabled=; PrivateMemorySize64=6045696; PrivilegedProcessorTime=; ProcessName=AdAppMgrSvc; ProcessorAffinity=; Responding=True; SessionId=0; StartInfo=System.Diagnostics.ProcessStartInfo; StartTime=; SynchronizingObject=; Threads=System.Diagnostics.ProcessThreadCollection; UserProcessorTime=; VirtualMemorySize64=110989312; EnableRaisingEvents=False; StandardInput=; StandardOutput=; StandardError=; WorkingSet64=9519104; Site=; Container=} 
1

Sie sind richtig:

  • | Rohre nach unten Objekten der Erfolg/Ausgabe-Stream

Wenn Sie Objekte über die Pipeline von einem Cmdlet an ein anderes, die Sie nicht den Empfang Cmdlets wollen Empfangen von Fehlern, Warnungen, Debugging-Meldungen oder ausführlichen Nachrichten zusammen mit den Objekten, die es verarbeiten soll.

Also leitet der Pipe-Operator (|) Objekte in den Ausgabestrom (Stream # 1).

  • > Sendet die Ausgabe an eine bestimmte Datei
  • >> Hängt Ausgabe in eine bestimmte Datei

Mehr Informationen über die Umleitung: https://msdn.microsoft.com/powershell/reference/5.1/Microsoft.PowerShell.Core/about/about_Redirection

Verwandte Themen