天天看點

40個powershell指令,讓你玩明白windows的powershell指令行

作者:萊迪娜的風聲

我們将首先介紹powershell的幫助系統,get-help get-command -showwindow 這個指令将會在擷取get-command的指令時 顯示出來 幫助視窗,最具特色的地方在于你更加友善搜尋幫助的某一部分,比如這裡我希望檢視get-childitem的example

40個powershell指令,讓你玩明白windows的powershell指令行

每天我們都可以使用update-help -force 這将強制更新本地的powershell幫助,微軟的從業人員将會把每天編輯好的幫助檔案推送到伺服器之上,是的,微軟一直在更新他們的幫助系統。而我們隻需要 updata-help -force 就可以從伺服器擷取最新的幫助了

40個powershell指令,讓你玩明白windows的powershell指令行

get-help get星号通配符 powershell的所有指令都支援通配符這一符号,這意味着我們可以通過它模糊的查詢我們需要的結果。

40個powershell指令,讓你玩明白windows的powershell指令行

瞧一瞧在使用這個指令的過程中我發現了什麼?我們的老朋友AutoItX,我沒想到會在這裡碰到它,Cmdlet,這是否意味着我們可以在Powershell中直接使用這些cmdlet,這是一個問号,我打算嘗試一下

40個powershell指令,讓你玩明白windows的powershell指令行

get-au3clip 這非常神奇,autoitx擴充了powershell的cmdlet 這使得powershell更加的強大了,要知道我們在程式設計語言中使用autoit的過程是非常繁瑣的,而在powershell則非常的簡單,這是一個意外的收獲,我相信對你也非常有幫助。get-au3clip的功能是擷取剪切闆的内容,當我執行它的時候,我得到了剪切闆上的内容

40個powershell指令,讓你玩明白windows的powershell指令行

(get-module auotitX).ExporteCommands 我打算擷取這個autoit子產品的所有可用的cmdlet,在經過一番嘗試後我得到了結果,成功擷取了AutoIT子產品下我們所有可以使用的Cmdlet,也是直接可以使用的指令,我相信這對于擅長autoit的人非常重要

40個powershell指令,讓你玩明白windows的powershell指令行

get-module 在這個過程中我用到了 get-module 這個指令,它可以擷取目前加載的module,注意是目前加載的子產品,可以看到我的powershel中除了加載了AutoItX以外還有 powershell utility 以及 PSReadline

40個powershell指令,讓你玩明白windows的powershell指令行

$env:psmodulepath 通過檢視 modulepath的内容我們可以從中看出一些端倪,在這裡面包含了所有包含powershell子產品的檔案夾,在最後我們可以看到autoit的安裝目錄檔案夾

40個powershell指令,讓你玩明白windows的powershell指令行

打開這個檔案夾我們可以在其中看到psd1的檔案,以及autoit powershell dll 的子產品,這兩個檔案就是powershell的子產品檔案

40個powershell指令,讓你玩明白windows的powershell指令行

繼續打開psd1檔案,我們可以看到在 psd1這個檔案中定義了一些有關AutoitX的一些子產品資訊

40個powershell指令,讓你玩明白windows的powershell指令行

get-help get-command -showwindow 我比較喜歡這個指令的原因是因為 -showwindow 彈出了一個視窗來顯示get-command的詳細資訊,這有助于我們更直覺的清晰的擷取準确的幫助

40個powershell指令,讓你玩明白windows的powershell指令行

在powershell指令行中,允許你同時寫多條語句,每一條語句使用分号分隔開。而在cmd中你需要使用 & 連接配接符來完成這個工作

40個powershell指令,讓你玩明白windows的powershell指令行

get-command 管道符 export-csv -PATH powershell_commands.csv 執行這個指令你将會在目前目錄下發現一個名為 powershell_commands.csv 的檔案,打開它你會看到get-command 輸出的詳細内容都在這檔案之中

40個powershell指令,讓你玩明白windows的powershell指令行

在下圖中我們可以清晰的看到上個指令執行之後的作用,這對于要儲存一些資訊的我們而言非常有用

40個powershell指令,讓你玩明白windows的powershell指令行

get-process 管道符 export-clixml -path system_process.xml 剛剛我執行了這樣一條指令,擷取了目前系統中的所有程序的快照,并将其儲存為system_process.xml 這個文檔,你可以看到最終生成的文檔非常大,這是因為程序的資訊很多,我也使用vscode打開了這個文檔。裡面的内容相信對于專注windows安全的人員非常有用

40個powershell指令,讓你玩明白windows的powershell指令行

接下來我執行了兩個程式,一個電腦,一個notepad

40個powershell指令,讓你玩明白windows的powershell指令行

compare-object -referenceobject (import-clixml system_process.xml) -DifferenceObject (get-process) -property name 緊接着,我執行了這個指令。并得到了結果

40個powershell指令,讓你玩明白windows的powershell指令行

這個指令的功能在于比較目前的get-process快照,與我之前儲存的get-process 的差別,我們可以看到,多出了notepad以及win32calc 剛剛打開的程式,還有chromedrive,這是因為我在跑一個自動化的浏覽器,以及其他的由系統或者其他程式自動打開的程序

40個powershell指令,讓你玩明白windows的powershell指令行

get-process 管道符 out-file -filepath system_process.txt 這個指令将擷取的程序資訊全部輸出到一個system_process.txt 文檔中

40個powershell指令,讓你玩明白windows的powershell指令行

打開這個system_process.txt 我們可以看到其中的一些内容

40個powershell指令,讓你玩明白windows的powershell指令行

get-content system_process.txt 當然我們除了可以輸出到檔案,還可以從檔案擷取内容,使用 get-content system_process.txt 我們可以擷取 system_process.txt 中的所有内容,并輸出到目前的控制台視窗中

40個powershell指令,讓你玩明白windows的powershell指令行

get-help out星号通配符 使用這個指令,你可以擷取out開頭的所有指令,可以看到你可以輸出到default 預設控制台 host 控制台 file 檔案 gridview 一個gui界面 printer 列印機 string 字元串 等等,這為我們提供了更多的選擇

40個powershell指令,讓你玩明白windows的powershell指令行

out-gridview ,使用 get-process 管道符 select-object -first 5 管道符 out-gridview 我們将會看到,指令會彈出一個視窗,裡面整體的放置了我們要檢視的資訊,并且在指定的項上按ctrl+c我們可以複制選中的行

40個powershell指令,讓你玩明白windows的powershell指令行

convertto-html,get-process 管道符 convertto-html 管道符 out-file system_process.html 這個指令将會将擷取到的系統快照輸出到一個html文檔,如果說我可以選擇一種檢視方式的話,我會選擇html,因為html會非常的容易檢視,而且很友善

40個powershell指令,讓你玩明白windows的powershell指令行

我截取了html文檔中的一些内容,這非常酷,你會想說這就是我們想要的結果的。

40個powershell指令,讓你玩明白windows的powershell指令行

get-command 管道符 convertto-html 管道符 out-file commands.html ,同樣我們也可以擷取指令的html輸出形式

40個powershell指令,讓你玩明白windows的powershell指令行

get-service 管道符 stop-service -whatif,powershell 有一個非常有意思的參數,叫做 -whatif,假如...會怎麼樣的意思,是的,在stop-service 就有這樣一個參數,當你執行這個指令之後,它會提示你系統會做些什麼。。不得不說powershell的建立者非常有意思...

40個powershell指令,讓你玩明白windows的powershell指令行

get-service 管道符 stop-service -confirm,當然了,既然有卧龍就會有鳳雛,使用-confirm參數,系統會提示你是否要終止一個服務,而不是直接終止

40個powershell指令,讓你玩明白windows的powershell指令行

Get-Module -ListAvailable 在前面我們使用了get-module這個指令,而在這裡,我們添加了參數 listavailable ,它将更加詳細的擷取有關于powershell module的子產品資訊,以及其子產品對應的檔案夾

40個powershell指令,讓你玩明白windows的powershell指令行

module的加載,在于你是否使用了對應子產品中的cmdlet,隻要你使用了相應的子產品中的module,那麼使用get-moudel就會顯示出來目前(注意是目前)powershell所加載的module,這個功能是psv3中添加的,而在v2中你隻能手動加載,那非常痛苦

40個powershell指令,讓你玩明白windows的powershell指令行

get-help 星号通配符AU3星号通配符,重新打開一個指令行然後執行這個指令,現在我們無需擔心子產品加載的問題,即使沒有加載子產品,get-help 仍然能夠擷取對應的cmdlet的幫助,這很酷

40個powershell指令,讓你玩明白windows的powershell指令行

接下來我們要談一談powershellISE,關于這個我想很多人都有了解過powerhsellISE,但是使用的人數卻不多。其實powerhsellISE很強大,我們來了解一下powershell的ISE

40個powershell指令,讓你玩明白windows的powershell指令行

首先你絕對沒有想到powershellISE居然會有指令行提示,這個像是在寫代碼一樣。。。而在普通的powershell控制台是沒有這個提示的

40個powershell指令,讓你玩明白windows的powershell指令行

Param($param1=“”,$param2=“”)大家可以觀察一下,我正在這裡寫的這個腳本,首先是Param這個指令,它接收來自指令行的參數,每一個參數使用英文的逗号隔開,這樣我們就制作了一個cmdlet,并且可以讓其他人使用的cmdlet

40個powershell指令,讓你玩明白windows的powershell指令行

powershell ISE同樣擁有很多的快捷鍵,我們可以使用CTRL+R打開窗格,或者隐藏窗格,這個快捷鍵在後面我們會經常用到,其他的快捷鍵,大家可以去微軟的官方查詢一下,這些都屬于API問題了

40個powershell指令,讓你玩明白windows的powershell指令行

$variable 在powershell中,變量就是這樣定義的。另外需要說明的是,powershell是強類型的,這是它一切皆對象的根本。也就是說這個powershell實際和python一樣的,都是動态強類型語言。其實我認為應該将powershell作為一門程式設計語言,而不是指令行來看待會比較好一些。

40個powershell指令,讓你玩明白windows的powershell指令行

$variable.getType() 在powershell中我們可以很輕松的擷取對象的類型,在python中我們需要使用type()函數來擷取對象的類型,我感覺powershell更加友善一些,而java,java天生靜态強類型。這是靜态強類型的王者語言。當知道類型以後,我們就能夠很友善的做一些事情。我喜歡強類型語言,如果是靜态的那麼更好。

40個powershell指令,讓你玩明白windows的powershell指令行

[String]$b=“你好,世界” 我們可以為變量指定一個類型,powershell中類型的指定方式和其他程式設計語言都有所不同,他是使用的中括号将類型括起來,而且它和變量之前沒有任何分隔,是以看起來會顯得擁擠,不像其他程式設計語言似的,要麼有一個空格(java),要麼類型在後用冒号分開(kotlin,python),這是需要我們注意的。我們還可以執行long類型,預設的數字為int32類型,這些都是csharp的類型系統

40個powershell指令,讓你玩明白windows的powershell指令行

左尖括号# 幫助資訊 #右尖括号 我們可以自定義自己編寫的cmdlet的的幫助資訊,這非常有趣,你可以看一下我的輸出内容,這和我們用的系統cmdlet顯示的内容都一樣,如果我們深入powershell,這将是無法規避的學習點

40個powershell指令,讓你玩明白windows的powershell指令行

點選左上角的建立腳本,然後按鍵盤的ctrl+j鍵,之後再彈出的視窗中選擇Cmdlet(進階功能)- 完成,你會看到很多的代碼片段,如果你懶得寫那些幫助資訊或者尖括号 井号鍵 Synopsis 什麼的 ,那麼這個按鍵非常有用

40個powershell指令,讓你玩明白windows的powershell指令行

你可以看到powershell自動生成的内容,我們隻需要做一些修改就可以了,這非常有用,我們要善用ctrl+j這個快捷鍵

40個powershell指令,讓你玩明白windows的powershell指令行

繼續閱讀