PowerShell管道入門,看看你都會不(管道例子大全)

来源:http://www.cnblogs.com/lavender000/archive/2017/06/04/6941393.html
-Advertisement-
Play Games

PowerShell的一個重中之重的功能就是管道(pipeline),本文從淺入深,一步一步詳解管道的使用方法和例子,來看看有沒有你所不知道的吧,如果全知道,恭喜你已經很厲害啦——適用於所有PowerShell應用小白與技術老鳥。另外歡迎各位技術大牛來補充討論學習~ 1. 管道(pipeline)是 ...


PowerShell的一個重中之重的功能就是管道(pipeline),本文從淺入深,一步一步詳解管道的使用方法和例子,來看看有沒有你所不知道的吧,如果全知道,恭喜你已經很厲害啦——適用於所有PowerShell應用小白與技術老鳥。另外歡迎各位技術大牛來補充討論學習~

1.   管道(pipeline)是什麼

在Shell中一個重要的基本概念就是管道(pipeline),即在一組命令中,輸出的命令結果成為下一個命令的輸入參數。管道的概念與真實生活中的生產線比較相似:在不同的生產環節進行連續的再加工,如下圖例子:

“Get-ChildItem”意思是獲取當前路徑的所有項目,“|Where-Object {$_.Length -gt 200}”意思是查看上一步結果,取所有長度大於200的項目,“|Sort-Object -Descending Name”意思是查看上一步結果,按照Name進行倒敘排列。

在PowerShell中,使用管道符號(|)來劃分管道中的每個命令,上述例子說明瞭管道的強大功能,同時PowerShell在管道中傳遞的是高保真對象,不僅僅是文本描述。

 

下麵主要給大家介紹一下常用的管道處理命令。

2.   Where-Object:過濾列表項或命令輸出結果

可以使用Where-Object(別名是where和?)從列表或者命令輸出結果中過濾選擇你需要的項目。

對於輸入的每一項,Where-Object都會根據{}中定義的腳本塊對輸入進行計算,如果返回True,則輸出,否則不輸出。如下例子:

{}表示一個腳本塊,可以輸入一系列PowerShell命令,其中$_代表當前輸入對象,在這個例子中,$_就代表一個文件項目。-gt是比較操作符,意思是大於,關於比較操作符的介紹如下:

PowerShell中比較操作符是用於對錶達式進行比較的。預設情況比較操作符不區分大小寫,如果想要區分,需要使用-C首碼,不需要區分的,使用-I首碼。

所有可用的比較操作符如下表格:

操作符

意義

返回True的例子

-eq

相等符

10 -eq 10

-ne

不相等符

10 -ne 9

-ge

大於等於操作符

10 -ge 9

-gt

大於操作符

10 -gt 9

-lt

小於操作符

10 -lt 11

-le

小於等於操作符

10 -le 11

-like

相似操作符

"Bob" -like "*ob"

-notlike

非相似操作符

"Bob" -notlike "1*ob"

-match

匹配操作符

"Bob" -match "B*ob"

-notmatch

非匹配操作符

"Bob" -notmatch "123*"

-contains

包含操作符

"Bob","Bob1" -contains   "Bob"

-notcontains

非包含操作符

"Bob","Bob1" -notcontains   "ob"

-is

類型操作符

"Bob" -is "System.String"

-isnot

非類型操作符

"Bob" -isnot "System.Int32"

3.   ForEach-Object:處理列表或者命令輸出的每一個項目

使用ForEach-Object命令(別名是foreach和%)來處理列表中的每一項。

使用例子如下:

例子中1..10的意思是簡單聲明瞭一個1~10的一組數字。其中處理列表中每一項還可以用for、foreach、do和while等,以後會更詳細的介紹。

4.   Select-Object:選擇列表項或輸出結果只輸出要的結果

使用Select-Object(別名是select)對象可以選擇一個對象或者一組對象的指定屬性。還可以從對象的數組中選擇唯一的對象,也可以從對象數組的開頭或末尾選擇指定個數的對象。

如果使用 Select-Object 來選擇指定屬性,則它會從輸入對象中複製這些屬性的值,並創建具有指定的屬性和複製的值的新對象。使用 Property 參數指定您要選擇的屬性。或者,使用 First、Last、Unique、Skip 和 Index 參數從輸入對象數組中選擇特定對象。

使用例子如下:

a)       選擇當前路徑下所有項目的Name和Length屬性:

b)      選擇當前路徑下前三個項目:

c)       選擇當前路徑下所有項目的Name和自定義屬性,名字叫做Last Modified Day,結果是通過LastWriteTime屬性算出來的:

d)      選擇當前路徑下第一個和第六個項目:

e)      選擇當前路徑下除第五個項目外的所有項目:

f)        顯示數組中的唯一數字:

5.   Sort-Object:對列表項或者輸出結果進行排序

使用Sort-Object(別名是sort)可以按照特定屬性值對對象進行排序。您可以指定一個屬性或多個屬性(用於多鍵排序),也可以選擇區分大小寫或不區分大小寫的排序。您還可以指示 Sort-Object 只顯示對於特定屬性具有唯一值的對象。

如果某個對象不具有所指定的屬性之一,則 cmdlet 會將該對象的屬性值解釋為 NULL,並將其放置在排序順序的末尾。

使用例子如下:

a)       對當前路徑下所有的項目按照長度從小到大排序:

b)      對整個數組的唯一性數字按照降序排列:

6.   Tee-Object:保存並輸出列表項或者輸出結果

使用Tee-Object(別名是tee)命令可以將命令輸出結果保存在文件或者變數中,同時將其顯示在控制臺中。

a)       將當前路徑下所有大小大於900的項目都保存到文件中並顯示在控制臺中:

b)      將當前路徑下所有大小大於900的項目都保存在變數中並顯示在控制臺中:

7.   Group-Object:對列表項或者輸出結果進行分組

使用Group-Object(group)對列表項或者輸出結果進行分組,指定的屬性包含相同值的組對象。Group-Object 返回一個表,其中每個屬性值對應一行,同時一個列顯示具有該值的項目數。

還可以讓返回的對象是個HashTable——key-value的鍵值對數組,指定-AsHashTable參數:

8.   Measure-Object:對列表項或輸出結果進行計算

使用Measure-Object(measure)計算對象的數字屬性以及字元串對象(如文本文件)中的字元數、單詞數和行數。它計算某些類型對象的屬性值。Measure-Object 執行三種類型測量,具體取決於命令中的參數。可以對對象計數並計算數字值的最小值、最大值、總和及平均值。對於文本對象,它可以計數並計算行數、單詞數和字元數。

a)       計算當前路徑下項目的總數:

b)      計算當前路徑下項目的長度的最小值、最大值以及平均值:

c)       計算當前文件中字元、行、單詞的總數:

9.   Compare-Object:對兩組對象進行比較

用Compare-Object(別名是compare和diff)可以將兩組對象進行比較,一組對象為Reference組,而另一組為Difference組。比較的結果將指示屬性值是只出現在 Reference 組中的對象中(由 <= 符號指示),或是只出現在 Difference 組中的對象中(由 => 符號指示),抑或(在指定了 IncludeEqual 參數的情況下)同時出現在這兩個對象中(由 == 符號指示)。

10. ConvertTo-Html:將對象轉換為HTML

用ConvertTo-Html可以將Microsoft.Net Framework對象轉換為可在Web瀏覽器中顯示的HTML:

11. Export-Csv:將對象轉換為CSV字元串存儲在文件中

用Export-Csv(別名是epcsv)將 Microsoft .NET Framework 對象轉換為一系列以逗號分隔的、長度可變的 (CSV) 字元串,並將這些字元串保存到一個 CSV 文件中。

12. Format-List、Format-Table、Format-Wide:將輸出結果格式化

Format-List(別名是fl)可以將輸出的格式設置為屬性列表,其中每個屬性均各占一行顯示:

Format-Table(別名是ft)可以將輸出的格式設置為表:

Format-Wide(別名是fw)可以將對象的格式設置為只能顯示每個對象的一個屬性的寬表:

13. Get-Unique:獲取輸出結果的唯一值

使用Get-Unique(別名是gu)可以從排序列表中返回唯一項目。

14. Out-File:將輸出結果輸出到文件

可以使用Out-File將輸出發送到文件:

15. Get-Member:如何獲取管道操作對象的屬性

管道操作的時候經常會用到管道輸入對象的屬性,使用Get-Member(gm)來獲取對象的屬性和方法。

a)       獲取對象的公有屬性:

b)      獲取對象的公有方法:

當得知對象的公有屬性和方法的名字後,就可以在管道操作中使用了。

16. 如何判斷一個命令是否支持管道輸入

學會使用管道後,得學會判斷一個命令是否支持管道輸入。使用Get-Help命令獲取一個命令的使用方法,對於參數,可以看到是否支持管道輸入,或者通過MSDN去查詢命令幫助。

比如PowerShell Core裡面的Where-Object的MSDN的幫助站點是:https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.core/Where-Object

對於裡面的-InputObject則是支持管道輸入,-Is則不支持管道輸入:

比如PowerShell Core裡面的Move-Item的MSDN的幫助站點是:https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.management/Move-Item

對於裡面的-Path則是支持管道輸入,-UseTransaction則不支持管道輸入:

對於沒有任何一個參數支持管道輸入的命令則是不支持管道輸入的命令。

17. 自動化處理數據密集型任務

如果要對大量的數據進行處理簡單的任務,可以把數據保存在一個CSV文件裡面,使用Import-Csv來導入數據,導入後為每一行自動創建對象,並將列的名字作為對象的屬性,之後用foreach對數據的每一項進行操作。

如果你命名的CSV文件中的列的名字和管道使用的參數名一致,PowerShell可以實現這種部分或全部參數的映射。

PowerShell的一個主要的優點就是具有自動化重覆性任務的能力。有時候,這些重覆性的任務是動作密集的(如系統維護,操作註冊表,或者文件清理),並且包括複雜的有順序的互相調用的命令。在這種情況下,可以通過編寫腳本將這些操作組合到一起,這樣可以節省時間,降低錯誤的發生。

 

上述列舉的只是常用的命令和使用方法,PowerShell強大的命令集完全不止這些。

 

[原創文章,轉載請註明出處,僅供學習研究之用,如有錯誤請留言,如覺得不錯請推薦,謝謝支持]

[原文:http://www.cnblogs.com/lavender000/p/6941393.html,來自永遠薰薰]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • PropertyGrid是一個很強大的控制項,使用該控制項做屬性設置面板的一個好處就是你只需要專註於代碼而無需關註UI的呈現,PropertyGrid會預設根據變數類型選擇合適的控制項顯示。但是這也帶來了一個問題,就是控制項的使用變得不是特別靈活,主要表現在你無法根據你的需求很好的選擇控制項,比如當你需要用S... ...
  • 1.分散式系統的架構體系 基於對象的體系機構 面向服務的架構(SOA) REST風格的架構 微服務架構(MSA) 容器技術 Serverless架構 2.分散式消息服務 Apache ActiveMQ RabbitMQ RocketMQ Apache Kafka 3.分散式計算 MapReduce ...
  • 學校選課系統!!! ...
  • 第一次寫博客,其實老早就註冊博客園了,有寫博客的想法,就是沒有行動,總是學了忘,忘了丟,最後啥都沒有,電腦里零零散散,東找找,西看看,今天認識到寫博客的重要性。 最近閑著看了潭州教育的線上直播課程,頗受老師講課實用有感。只作為自己筆記學習,我們都知道學習一門編程都是先照抄,在創作。這裡完全按照老師講 ...
  • 1、定義:相同數據類型的數據的組合。 不使用數組的定義方式: 使用一維數組的定義方式: 1、靜態初始化:在聲明並初始化數組與給數組相應的元素賦值操作同時進行; int[] scores = new int[]{72,90,59}; 2、動態初始化:在聲明並初始化數組與給數組相應的元素賦值操作分開進行 ...
  • 題目鏈接 Problem Description Using regular expression to define a numeric string is a very common thing. Generally, use the shape as follows:(0|9|7) (5|6) ...
  • 1 //1、核心代碼遞歸實現組裝數形數據 2 public String getResourceTreeToJson() { 3 return this.createTreeJson(findAll());//findAll()是全查select * from tableName 4 } 5 6 /... ...
  • 一、 什麼是java,它包含哪些技術 1、 java是一種面向對象的高級編程語言 2、 java包括 a) javase(java基礎) b) javaee(java企業級應用) 二、 用記事本編寫java程式的3個步驟 1、 創建擴展名為.java的java源文件 2、 編譯java源文件,產生擴 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...