1.基礎(chǔ)概念
Windows PowerShell 是一種命令行外殼程序和腳本環(huán)境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強(qiáng)大功能。它引入了許多非常有用的新概念,從而進(jìn)一步擴(kuò)展了您在 Windows 命令提示符和 Windows Script Host 環(huán)境中獲得的知識和創(chuàng)建的腳本。
傳統(tǒng)的CMD支持腳本編寫,但擴(kuò)展性不好,而Powershell類似于Linux shell,具有更好的遠(yuǎn)程處理、工作流、可更新的幫助、預(yù)定任務(wù)(Scheduled Job)、CIM等優(yōu)點。
那么,如何進(jìn)入Powershell呢?
一種方法是在運行中直接輸入Powershell打開,另一種方法是CMD中輸入Powershell打開。
不同操作系統(tǒng)內(nèi)置的Powershell是不一樣的,比如win7或win2008,如何查看版本呢?
$psversiontable
輸出結(jié)果如下圖所示:
首先,它可以進(jìn)行計算任務(wù),包括計算1gb大小(以字節(jié)為單位),還有基本的運算。
其次,Powershell可以獲取計算機(jī)的服務(wù)詳細(xì)信息、狀態(tài)等。
get-service
其顯示結(jié)果如下圖所示,采用動詞+名詞方式命名,比較清楚。
而CMD中無法獲取services的(輸入services.msc),它是以圖形化方式顯示出來的。
最后,由于Powershell具有以下特點,它被廣泛應(yīng)用于安全領(lǐng)域,甚至成為每一位Web安全必須掌握的技術(shù)。
方便
支持面向?qū)ο?/p>
支持和.net平臺交互
強(qiáng)大的兼容性,和cmd、vbs相互調(diào)用
可擴(kuò)展性好,它可以用來管理活動目錄、虛擬機(jī)產(chǎn)品等平臺
3.控制臺和快捷鍵
鼠標(biāo)右鍵屬性,可以對Powershell控制臺進(jìn)行編輯,并且它支持兩種編輯模式,快速編輯模式默認(rèn)鉤上的。
Powershell快捷鍵包括:
ALT+F7 清楚命令的歷史記錄PgUp PgDn 翻頁Enter 執(zhí)行當(dāng)前命令End 將光標(biāo)移動至當(dāng)前命令的末尾Del 從右開始刪除輸入的命令字符Esc 清空當(dāng)前命令行F2 自動補(bǔ)充歷史命令至指定字符處F4 刪除命令行至光標(biāo)右邊指定字符處F7 對話框顯示命令行歷史記錄F8 檢索包含指定字符的命令行歷史記錄F9 根據(jù)命令行的歷史記錄編號選擇命令,歷史記錄編號可以通過F7查看 左/右 左右移動光標(biāo)上/下 切換命令行的歷史記錄Home 光標(biāo)移至命令行字符最左端Backspace 從右刪除命令行字符Ctrl+C 取消正在執(zhí)行的命令Tab 自動補(bǔ)齊命令或文件名
例如,使用快捷鍵Ctrl+C打斷了正在運行的ping指令;使用tab快捷鍵補(bǔ)齊了service.msc命令。
Powershell支持?jǐn)?shù)學(xué)運算,比如:
PS C:\Users\yxz> 2+46PS C:\Users\yxz> 4-22PS C:\Users\yxz> 4*312PS C:\Users\yxz> 9%21PS C:\Users\yxz> (1+3*5)/28PS C:\Users\yxz> 1gb/1mb1024PS C:\Users\yxz> 1gb/1mb*18kb18874368PS C:\Users\yxz> 1gb -gt 1mbTruePS C:\Users\yxz> 0xabcd43981
顯示結(jié)果如下圖所示:
Powershell管道旨在將上一條命令的輸出作為下一條命令的輸出。
管道并不是什么新事物,以前的Cmd控制臺也有重定向的命令,例如Dir | More可以將結(jié)果分屏顯示。傳統(tǒng)的Cmd管道是基于文本的,但是Powershell管道是基于對象。例如:
linux:lscmd:dir
如果只獲取其中的name、mode值,則使用如下指令。
ls | format-table name, mode
重定向旨在把命令的輸出保存到文件中,‘>’為覆蓋,’>>’追加。
ls | format-table name, mode > demo.txttype demo.txt
上面代碼是將ls顯示文件內(nèi)容的name和mode信息存儲至本地demo.txt文件夾中,再調(diào)用“type demo.txt”打印文件內(nèi)容。如果兩個 >> 它會在原來的基礎(chǔ)上,再進(jìn)行補(bǔ)充(類似 a+),而單個大于號是刪除原來的寫入(類似 w)。
輸出結(jié)果如下圖所示。
1.外部命令
Powershell是CMD的一個擴(kuò)展,仍然能夠讓CMD中的命令在Powershell中使用,Powershell初始化時會加載CMD應(yīng)用程序,所以CMD命令正常情況下在Powershell中都能使用,例如ipconfig。
查看端口信息
netstat -ano
包括協(xié)議、本地地址、外部地址、狀態(tài)、PID(進(jìn)程號)。
查看網(wǎng)絡(luò)配置信息
ipconfig
打印路由信息
route print
自定義文件路徑,打開應(yīng)用程序
start notepadnotepad
notepad放在C盤下面的Windows\System32文件中,能夠直接打開。
系統(tǒng)變量
$env:path
Python可以直接打開,Wordpad不能打開,需要添加環(huán)境變量中。
通過get-command獲取所有命令,通常是動名詞的方式。
get-command
獲取其用法的命令如下,簡稱gcm。
get-help get-command
獲取進(jìn)程信息
get-process
獲取當(dāng)前會話的別名
get-alias
獲取輸入的歷史命令信息
get-history
獲取當(dāng)前時間
get-date
獲取所有命令get-command可以用別名gcm替代。
get-commandgcm
獲取當(dāng)前目錄的所有文件信息get-childitem,可以用ls、dir兩個命令達(dá)到同樣的效果。
get-childitemlsdir
獲取相關(guān)的幫助信息,其命令如下:
get-help get-childitem
獲取別名所對應(yīng)真實的命令
get-alias -name lsget-alias -name dir
查找所有以Remove開頭的別名
get-alias | where{$_.definition.startswith('Remove')}
其中,where來做一個管道的篩選,$_表示當(dāng)前的元素,definition 定義一個字符串?dāng)?shù)組類型。Powershell支持.net強(qiáng)大的類庫,里面的definition包括字符串startswith操作,獲取字符串開頭函數(shù)。
查找所有別名,并調(diào)用sort降序排序及計算排列。
get-alias | group-object definition | sort -descending Count
注意:自定義別名是臨時生效的,當(dāng)關(guān)閉Powershell時就會失效。
2.自定義別名設(shè)置別名,將notepad設(shè)置為新的別名pad。pad打開notepad,表明我們的別名創(chuàng)建成功。
set-alias -name pad -value notepad
別名是臨時生成的,關(guān)掉Powershell即可失效,也可以撰寫命令刪除。
del alias:pad
保存別名
export-alias demo.psdirtype demo.ps
導(dǎo)入別名命令如下,其中-force表示強(qiáng)制導(dǎo)入。
import-alias -force demo.ps
Powershell變量跟PHP很類似,如下所示。
$name='eastmount'$name$age=28$age
Powershell對大小寫不敏感,$a 和 $A 一樣。復(fù)雜變量用大括號引起來,但不建議同學(xué)們這里定義。
${'I am a' var ()}='yxz'${'I am a' var ()}$n=(7*6+8)/2$n=3.14
變量也可以設(shè)置等于命令。
$n=ls
變量多個同時賦值,但不建議這么寫。
$n1=$n2=$n3=25$n1,$n2,$n3
2.變量操作變量的基本運算操作
$a=2$b=10$c=a+b$a,$b,$c
傳統(tǒng)變量交換方法
$num1=10$num2=20$temp=$num1$num1=$num2$num2=$temp$num1,$num2
現(xiàn)在變量交換的寫法
$num1=10$num2=20$num1,$num2=$num2,$num1$num1,$num2
查看當(dāng)前的變量
ls variable:
查找特定的變量值,星號表示代替所有的值(num開頭)。
ls variable:num*ls variable:num1
查找變量是否存在
test-path variable:num1test-path variable:num0
刪除變量
del variable:num1test-path variable:num1
專用變量管理的命令
clear-variableremove-variablenew-variable
3.自動化變量powershell打開會自動加載變量,例如:窗口打開它會自動加載大小,再比如程序的配置信息自動加載。
根目錄信息
$home
當(dāng)前進(jìn)程的標(biāo)志符,該自動化內(nèi)置變量只能讀取,不能寫入。
$pid$$
查看當(dāng)前環(huán)境變量
ls env:
打印某個環(huán)境變量的值
$env:windir
創(chuàng)建新的環(huán)境變量
$env:name='eastmount'ls env:na*
刪除環(huán)境變量
del env:namels env:na*
更新環(huán)境變量,注意它只是臨時生效,并不會記錄到我們的系統(tǒng)中。
$env:OS$env:OS='Linux'$env:OS
永久生效如何實現(xiàn)呢?增加路徑至環(huán)境變量PATH中,只對User用戶生效。
[environment]::setenvironmentvariable('PATH','E:\','User')[environment]::getenvironmentvariable('PATH','User')
系統(tǒng)變量對所有用戶都生效,用戶變量只對當(dāng)前用戶生效。
生效之后如下圖所示,用戶變量增加了相關(guān)值。
首先,發(fā)現(xiàn)我們的腳本文件是禁止執(zhí)行的。
get-executionpolicy
接著,我們嘗試獲取策略幫助信息。
get-help set-executionpolicy
最后修改權(quán)限,讓其能運行Powershell腳本文件。
set-executionpolicy RemoteSigned
它會提示你需要啟動管理員身份運行。
通過管理員身份打開CMD,再設(shè)置其權(quán)限即可,設(shè)置完成之后可以調(diào)用相關(guān)的腳本程序。
(1) 定義一個demo.bat文件,其內(nèi)容如下,關(guān)閉回寫,打印hello world。
@echo offecho hello world
運行命令打開:
cd desktop.\demo.bat
(2) 定義一個demo.vbs文件,內(nèi)容如下:
msgbox 'CSDN Eastmount'
運行命令打開:
cd desktop.\demo.vbs
(3) 運行Powershell腳本文件也類似。
$number=49switch($number){ {($_ -lt 50) -and ($_ -gt 40)} {'此數(shù)值大于50且小于40'} 50 {'此數(shù)值等于50'} {$_ -gt 50} {'此數(shù)值大于50'}}
運行結(jié)果如下圖所示:
那么,如何在CMD中運行Powershell文件呢?
我們將demo.bat修改為如下內(nèi)容,其中&表示運行。
@echo offpowershell '&'C:\Users\yxz\Desktop\demo.ps1''
運行命令:
cd desktop.\demo.bat
下面方法也可以直接運行
start demo.batdemo.bat
“沒有網(wǎng)絡(luò)安全就沒有國家安全,沒有信息化就沒有現(xiàn)代化”,這是我第三次聽院士授課。每次的感受都很震撼,他們是這個國家的脊梁,總能站在國家和民族的角度去思考問題、解決問題,用通俗易懂的圖表去詮釋知識,去構(gòu)建祖國的重大工程和夢想,致敬。俠之為大,為國為民。補(bǔ)充一句,沈院士很早就到了會場修改PPT,特別增加了區(qū)塊鏈的知識。
很多大牛和老師的分享都讓我受益匪淺,來自清華大學(xué)和俄亥俄州立大學(xué)的兩位張老師的分享是我第三次聽了,但還是很懵,下次爭取能聽懂。來年在雄安新區(qū)舉辦,希望能像學(xué)弟和學(xué)妹一樣,站上講臺,加油!
聯(lián)系客服