網路安全自學篇(十九)| Powershell基礎入門及常見用法(一)
- 2020 年 4 月 10 日
- 筆記
一.Powershell初識
1.基礎概念
Windows PowerShell 是一種命令行外殼程式和腳本環境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強大功能。它引入了許多非常有用的新概念,從而進一步擴展了您在 Windows 命令提示符和 Windows Script Host 環境中獲得的知識和創建的腳本。
傳統的CMD支援腳本編寫,但擴展性不好,而Powershell類似於Linux shell,具有更好的遠程處理、工作流、可更新的幫助、預定任務(Scheduled Job)、CIM等優點。
那麼,如何進入Powershell呢?
一種方法是在運行中直接輸入Powershell打開,另一種方法是CMD中輸入Powershell打開。



不同作業系統內置的Powershell是不一樣的,比如win7或win2008,如何查看版本呢?

輸出結果如下圖所示:

2.為什麼強大?
首先,它可以進行計算任務,包括計算1gb大小(以位元組為單位),還有基本的運算。

其次,Powershell可以獲取電腦的服務詳細資訊、狀態等。

其顯示結果如下圖所示,採用動詞+名詞方式命名,比較清楚。

而CMD中無法獲取services的(輸入services.msc),它是以圖形化方式顯示出來的。


最後,由於Powershell具有以下特點,它被廣泛應用於安全領域,甚至成為每一位Web安全必須掌握的技術。
方便
支援面向對象
支援和.net平台交互
強大的兼容性,和cmd、vbs相互調用
可擴展性好,它可以用來管理活動目錄、虛擬機產品等平台
3.控制台和快捷鍵
滑鼠右鍵屬性,可以對Powershell控制台進行編輯,並且它支援兩種編輯模式,快速編輯模式默認鉤上的。


Powershell快捷鍵包括:

例如,使用快捷鍵Ctrl+C打斷了正在運行的ping指令;使用tab快捷鍵補齊了service.msc命令。

4.數學運算
Powershell支援數學運算,比如:

顯示結果如下圖所示:


二.Powershell管道和重定向
1.管道
Powershell管道旨在將上一條命令的輸出作為下一條命令的輸出。

管道並不是什麼新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以將結果分屏顯示。傳統的Cmd管道是基於文本的,但是Powershell管道是基於對象。例如:


如果只獲取其中的name、mode值,則使用如下指令。


2.重定向
重定向旨在把命令的輸出保存到文件中,『>』為覆蓋,』>>』追加。

上面程式碼是將ls顯示文件內容的name和mode資訊存儲至本地demo.txt文件夾中,再調用「type demo.txt」列印文件內容。如果兩個 >> 它會在原來的基礎上,再進行補充(類似 a+),而單個大於號是刪除原來的寫入(類似 w)。

輸出結果如下圖所示。


三.Powershell執行外部命令及命令集
1.外部命令
Powershell是CMD的一個擴展,仍然能夠讓CMD中的命令在Powershell中使用,Powershell初始化時會載入CMD應用程式,所以CMD命令正常情況下在Powershell中都能使用,例如ipconfig。
查看埠資訊

包括協議、本地地址、外部地址、狀態、PID(進程號)。

查看網路配置資訊


列印路由資訊


自定義文件路徑,打開應用程式

notepad放在C盤下面的WindowsSystem32文件中,能夠直接打開。

系統變數


Python可以直接打開,Wordpad不能打開,需要添加環境變數中。

2.命令集
通過get-command獲取所有命令,通常是動名詞的方式。


獲取其用法的命令如下,簡稱gcm。


獲取進程資訊


獲取當前會話的別名


獲取輸入的歷史命令資訊


獲取當前時間



四.Powershell別名使用
1.別名基本用法
獲取所有命令get-command可以用別名gcm替代。


獲取當前目錄的所有文件資訊get-childitem,可以用ls、dir兩個命令達到同樣的效果。



獲取相關的幫助資訊,其命令如下:


獲取別名所對應真實的命令


查找所有以Remove開頭的別名

其中,where來做一個管道的篩選,$_表示當前的元素,definition 定義一個字元串數組類型。Powershell支援.net強大的類庫,裡面的definition包括字元串startswith操作,獲取字元串開頭函數。

查找所有別名,並調用sort降序排序及計算排列。


注意:自定義別名是臨時生效的,當關閉Powershell時就會失效。
2.自定義別名
設置別名,將notepad設置為新的別名pad。pad打開notepad,表明我們的別名創建成功。


別名是臨時生成的,關掉Powershell即可失效,也可以撰寫命令刪除。


保存別名



導入別名命令如下,其中-force表示強制導入。


五.Powershell變數基礎
五.Powershell變數基礎
1.基礎用法
Powershell變數跟PHP很類似,如下所示。


Powershell對大小寫不敏感,a 和 A 一樣。複雜變數用大括弧引起來,但不建議同學們這裡定義。


變數也可以設置等於命令。


變數多個同時賦值,但不建議這麼寫。


2.變數操作
變數的基本運算操作


傳統變數交換方法


現在變數交換的寫法


查看當前的變數


查找特定的變數值,星號表示代替所有的值(num開頭)。


查找變數是否存在


刪除變數


專用變數管理的命令

3.自動化變數
powershell打開會自動載入變數,例如:窗口打開它會自動載入大小,再比如程式的配置資訊自動載入。
根目錄資訊


當前進程的標誌符,該自動化內置變數只能讀取,不能寫入。


4.環境變數
查看當前環境變數


列印某個環境變數的值


創建新的環境變數


刪除環境變數


更新環境變數,注意它只是臨時生效,並不會記錄到我們的系統中。


永久生效如何實現呢?增加路徑至環境變數PATH中,只對User用戶生效。

系統變數對所有用戶都生效,用戶變數只對當前用戶生效。


生效之後如下圖所示,用戶變數增加了相關值。


六.Powershell調用腳本程式
1.腳本文件執行策略
首先,發現我們的腳本文件是禁止執行的。


接著,我們嘗試獲取策略幫助資訊。


最後修改許可權,讓其能運行Powershell腳本文件。

它會提示你需要啟動管理員身份運行。

通過管理員身份打開CMD,再設置其許可權即可,設置完成之後可以調用相關的腳本程式。

2.調用腳本程式
(1) 定義一個demo.bat文件,其內容如下,關閉回寫,列印hello world。

運行命令打開:


(2) 定義一個demo.vbs文件,內容如下:

運行命令打開:


(3) 運行Powershell腳本文件也類似。

運行結果如下圖所示:


那麼,如何在CMD中運行Powershell文件呢? 我們將demo.bat修改為如下內容,其中&表示運行。


運行命令:

下面方法也可以直接運行



七.總結
「沒有網路安全就沒有國家安全,沒有資訊化就沒有現代化」,這是我第三次聽院士授課。每次的感受都很震撼,他們是這個國家的脊樑,總能站在國家和民族的角度去思考問題、解決問題,用通俗易懂的圖表去詮釋知識,去構建祖國的重大工程和夢想,致敬。俠之為大,為國為民。補充一句,沈院士很早就到了會場修改PPT,特別增加了區塊鏈的知識。
