日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Powershell快速入门(二) Shell编程

發(fā)布時間:2025/7/14 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Powershell快速入门(二) Shell编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這一部分著重于介紹Powershell的程序知識,讓我們能夠編寫功能強(qiáng)大的Powershell腳本,執(zhí)行比較復(fù)雜的任務(wù)。

變量

變量使用$變量名創(chuàng)建和引用。舉個例子,Get-Location命令用于獲取當(dāng)前工作目錄位置,它的別名是pwd。那么我們可以使用下面的命令來創(chuàng)建一個變量,存儲當(dāng)前目錄位置。

C:\Users\asddf> $current=pwd

然后我們訪問$current,就可以獲取實際值了。

C:\Users\asddf> $currentPath ---- C:\Users\asddf

如果知道這個命令返回的實際是.NET對象的話,我們還可以更進(jìn)一步,比方說直接訪問這個對象的Path屬性,獲取值。

C:\Users\asddf> $current.Path C:\Users\asddf

還有一個命令Get-Member,別名是gm,用于獲取對象的屬性。比方說,我們將Get-Location命令的結(jié)果通過管道傳遞給Get-Member命令,就會顯示下面的輸出。如果不了解.NET的話,可能感覺比較陌生。但是如果你懂得.NET和C#的話,就會像我一樣大喊一聲:“臥槽,還能這樣玩?!”

C:\Users\asddf> Get-Location|Get-MemberTypeName:System.Management.Automation.PathInfoName MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property string Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {get;} ProviderPath Property string ProviderPath {get;}

如果我們要獲取對象的所有屬性,使用MemberType參數(shù)。

C:\Users\asddf> pwd|gm -MemberType Property

我們還可以在變量上調(diào)用方法, 比如說將路徑轉(zhuǎn)換為全小寫。

C:\Users\asddf> $current.Path.ToLower() c:\users\asddf

最后,如果不再需要一個變量,可以使用Remove-Variable刪除變量,它的別名是rv。

C:\Users\asddf> Remove-Variable current

操作符

來看看Powershell中支持的操作符。

數(shù)學(xué)運(yùn)算符

首先,基本的數(shù)學(xué)運(yùn)算符都是支持的。

PS D:\Desktop> $i=5 PS D:\Desktop> $sum=3+4*($i-3)/2 PS D:\Desktop> $sum 7

前置后置自增自減運(yùn)算符也是支持的。

PS D:\Desktop> $i=0 PS D:\Desktop> $i-- PS D:\Desktop> $i++ PS D:\Desktop> ++$i PS D:\Desktop> --$i

比較運(yùn)算符

然后是比較運(yùn)算符,這些和Linux Shell中很相似,有大于(-gt),大于等于(-ge),小于(-lt),小于等于(-le),等于(-eq),不等于(-ne)幾個。

字符串匹配運(yùn)算符

-like和-notlike用于?*這樣的通配符。

PS D:\Desktop> 'hello' -like '?ello' True PS D:\Desktop> 'hello' -notlike '?ello' False PS D:\Desktop> 'hello' -like '*o' True

-match和-notmatch用于正則表達(dá)式。

PS D:\Desktop> 'aabcc' -match 'a*b?c+' True PS D:\Desktop> 'aab' -match 'a*b?c+' False

包含和替換運(yùn)算符

-contains查找序列中是否包含某個元素。

PS D:\Desktop> 'hello','zhang3' -contains 'zhang3' True

-replace用于替換字符串中某個部分,當(dāng)然正則表達(dá)式也是支持的。

PS D:\Desktop> 'hello zhang3' -replace 'zhang3','yitian' hello yitian

分隔和連接運(yùn)算符

-split和-join用于將一個字符串分為幾個子部分,或者將幾個子部分組合為一個字符串。

PS D:\Desktop> 'A B C DE' -split ' ' A B C DE PS D:\Desktop> 'A','B','C' -join ',' A,B,C

上面這些運(yùn)算符都是大小寫不敏感的,如果需要大小寫敏感的功能,可以在運(yùn)算符前面添加c前綴。

PS D:\Desktop> 'yitian' -match 'Yitian' True PS D:\Desktop> 'yitian' -cmatch 'Yitian' False

邏輯運(yùn)算符

邏輯運(yùn)算符有與(-and)、或(-or)、非(-not或!)以及異或(xor)幾個,并且支持短路計算。

如果需要使用真值和假值字面量,可以使用$true和$false。

類型運(yùn)算符

Powershell 和.NET平臺綁定,所以它是一門強(qiáng)類型的腳本。因此我們可以在腳本中判斷數(shù)據(jù)的類型,只要使用-is或-isnot運(yùn)算符即可,類型需要寫到方括號中。這里的類型可以是所有合適的.NET類型。

PS D:\Desktop> 3.14 -is [Double] True PS D:\Desktop> 3.14 -isnot [Float] True

重定向運(yùn)算符

這個稍微比較麻煩一點(diǎn)。

首先是>和>>運(yùn)算符,用于將標(biāo)準(zhǔn)輸出流重定向到文件,前者會覆蓋已有文件,后者則是追加到已有文件末尾。

然后我們來說說日志級別,如果有使用過某些語言的日志框架的話,就很好理解了。在這里,2代表錯誤、3代表警告、4代表信息、5代表調(diào)試信息。n>和n>>運(yùn)算符就是用于將對應(yīng)級別的輸出重定向到文件的,這兩者的區(qū)別和前面相同。n>&1將對應(yīng)級別的輸出和標(biāo)準(zhǔn)輸出一起重定向到文件。

最后就是*>和*>>了,這兩者將所有輸出信息重定向到文件。

需要注意,Powershell使用Unicode編碼來輸出信息。如果你需要使用其他類型的編碼,就不能使用重定向運(yùn)算符了,而應(yīng)該使用Out-File命令。

特殊運(yùn)算符

&運(yùn)算符將它后面的命令設(shè)置為后臺運(yùn)行,當(dāng)運(yùn)行的命令需要阻塞當(dāng)前終端的時候很有用。

.\\運(yùn)算符用于執(zhí)行一個腳本或命令。如果執(zhí)行的是Powershell腳本,那么腳本會在自己的作用域中執(zhí)行,也就是說在當(dāng)前環(huán)境下無法訪問被執(zhí)行的腳本中的變量。

[]運(yùn)算符用于轉(zhuǎn)換變量的類型,比如說下面的代碼,就將pi變量轉(zhuǎn)換為了Float類型。

[Float]$pi = 3.14 $pi -is [Float]

.運(yùn)算符用于調(diào)用.NET對象的成員,它也可以用于執(zhí)行腳本。當(dāng)它用于執(zhí)行腳本的時候,腳本會在當(dāng)前作用域中執(zhí)行。所以腳本結(jié)束之后,我們可以訪問腳本中的元素。

::運(yùn)算符用于調(diào)用類中的靜態(tài)成員,例如下面就會調(diào)用.NET平臺中DateTime類的Now屬性。

PS D:\Desktop> [DateTime]::Now2017年5月18日 22:45:42

..運(yùn)算符用于創(chuàng)建一個范圍閉區(qū)間,例如下面這樣。

PS D:\Desktop> 1..3 1 2 3 PS D:\Desktop> 3..1 3 2 1

-f運(yùn)算符用于格式化數(shù)據(jù),例如下面這樣。格式化方法和C#中的完全相同,所以如果不熟悉的話直接看在C#中如何格式化數(shù)據(jù)就行了。

PS D:\Desktop> 'My name is {0}, I am {1} years old' -f 'yitian',24 My name is yitian, I am 24 years old

$運(yùn)算符可以將字符串內(nèi)部的變量轉(zhuǎn)換為實際的值,例如下面這樣。需要注意使用內(nèi)插操作符的時候,外部字符串需要使用雙引號,否則Powershell會直接輸出字符串內(nèi)容。

PS D:\Desktop> $name='yitian' PS D:\Desktop> $age=24 PS D:\Desktop> "My name is $name, I am $age years old." My name is yitian, I am 24 years old.

@()運(yùn)算符用于將一系列值轉(zhuǎn)換為一個數(shù)組。假如在腳本中有一個函數(shù)可能返回0、1或多個值,就可以使用這個操作符,將一系列值合并為一個數(shù)組,方便后續(xù)處理。

,逗號運(yùn)算符如果放置在單個值前面,就會創(chuàng)建一個包含這個值的單元素數(shù)組。

條件判斷

if判斷

Powershell中的條件判斷和一般的編程語言以及Shell編程都很類似,直接看代碼就能理解。

$condition = $trueif ($condition -eq $true) {Write-Output "condition is $true" } elseif ($condition -ne $true ) {Write-Output "condition is $false" } else {Write-Output "other ocndition" }

switch判斷

如果需要多重判斷,可以考慮使用switch語句。一個典型的switch如下所示。

$n = 4 switch ($n) {1 {"n is 1"}2 {"n is 2"}3 {"n is 3"}default {"n is others"} }

其實細(xì)說起來,這個switch的坑還是不少的。例如,switch語句可以接受多個值來測試,在switch語句中還可以編寫多個case相同的語句。這里我就不細(xì)說了,想具體了解的話直接看官方文檔 about_Switch吧。

循環(huán)語句

提醒一下,不管是哪種循環(huán)語句,在循環(huán)體內(nèi)都可以使用break或continue中斷/繼續(xù)循環(huán)。

do循環(huán)

首先來看看do-while循環(huán),先執(zhí)行循環(huán)體,然后判斷是否滿足條件,如果滿足條件則繼續(xù)執(zhí)行。

$i = 0 do {$i++Write-Output $i }while ($i -ne 3)

然后是do-until循環(huán),和do-while類似,不過當(dāng)條件不滿足的時候才會繼續(xù)循環(huán),如果滿足條件則退出循環(huán)。

$i = 0 do {$i++Write-Output $i }until ($i -eq 3)

while循環(huán)

while循環(huán)是先判斷循環(huán)條件,滿足條件時執(zhí)行循環(huán)。

$i = 0 while ($i -lt 3) {Write-Output $i$i++ }

for循環(huán)

for循環(huán)可以看做是while循環(huán)的另一種形式,常用于固定次數(shù)的循環(huán)。

for ($i = 0; $i -ne 3; $i++) {Write-Output $i }

for-each循環(huán)

for-each循環(huán)用于遍歷一個集合中的所有元素。

$array = @(1, 2, 3, 4) foreach ($i in $array) {Write-Output $i }

值得一提的是,for-each語句用在管道上時,還有以下一種用法。

<command> | foreach {<beginning command_block>}{<middle command_block>}{<ending command_block>}

使用這種方法時,for-each后面可以跟三個語句塊,第一個語句塊是開始語句塊,在循環(huán)前執(zhí)行一次,常用來初始化一些數(shù)據(jù);第三個是結(jié)束語句塊,在循環(huán)結(jié)束之后執(zhí)行一次,常用于統(tǒng)計一些循環(huán)數(shù)據(jù);第二個就是正常的循環(huán)語句塊,會循環(huán)多次。

函數(shù)

定義函數(shù)

定義函數(shù)使用function關(guān)鍵字。

function hello {Write-Output 'Hello Powershell' }

定義好函數(shù)之后,就可以使用函數(shù)名來調(diào)用函數(shù)了。

hello

函數(shù)的參數(shù)

函數(shù)當(dāng)然也可以帶參數(shù)了,參數(shù)列表有兩種寫法:第一種是C風(fēng)格的,參數(shù)列表寫在函數(shù)名后面,使用小括號分隔開;第二種方式是在方法體中,使用param關(guān)鍵字聲明參數(shù)。這兩種方法是完全等價的,當(dāng)然我習(xí)慣上還是喜歡使用第一種方式。

Powershell是一種強(qiáng)類型的腳本語言,所以可以在參數(shù)列表上添加參數(shù)類型,參數(shù)類型是可選的,不過我還是推薦寫的時候帶上類型,方便閱讀和類型檢查。

function Say-Hello ([string] $name) {Write-Output "Hello, $name" }function Say-Hello2 {param([string] $name)Write-Output "Hello, $name" }

調(diào)用帶參數(shù)的函數(shù)時,需要向調(diào)用命令那樣,使用-參數(shù)名來傳遞參數(shù),例如下面這樣。

Say-Hello -name 'yitian'

默認(rèn)參數(shù)

Powershell支持默認(rèn)參數(shù),直接用賦值號=在參數(shù)列表上指定參數(shù)默認(rèn)值即可。

function Say-Hello3 {param([string] $name = 'zhang3')Write-Output "Hello, $name" }

位置參數(shù)

Powershell也支持位置參數(shù),它會把所有參數(shù)包裝到$args數(shù)組中,所以我們可以通過這個變量訪問所有位置的參數(shù)。例如下面,將所有參數(shù)合并一個字符串,然后打印出來。

function Say-Hellos {$names = $args -join ','Write-Output "Hello, $names" }

這個函數(shù)調(diào)用時候需要指定多個參數(shù),注意不要在多個參數(shù)之間添加括號,否則會變成一個數(shù)組參數(shù),而不是多個參數(shù)。

Say-Hellos 'yitian' 'zhang3' 'li4'

開關(guān)參數(shù)

開關(guān)參數(shù)沒有類型,作用僅僅是標(biāo)志是或者否。如果在使用函數(shù)的時候帶上開關(guān)參數(shù),那么它就是的狀態(tài),否則就是關(guān)的狀態(tài)。開關(guān)參數(shù)需要指定參數(shù)類型為switch。

function Answer-Hello ([switch] $yes) {if ($yes) {Write-Output "Hi"} }

然后在調(diào)用時就可以看出區(qū)別了。

Answer-Hello -yes Answer-Hello

函數(shù)返回值

最后來說說函數(shù)返回值。這個其實也很簡單,只要使用return語句就可以了。

function Add ([double]$a, [double]$b) {$c = $a + $breturn $c }

然后我們調(diào)用函數(shù),就可以看到結(jié)果了。

Add -a 3 -b 5

關(guān)于Powershell編程的知識就介紹到這里,其實如果看看官方文檔的話,就知道這里介紹的也僅僅是一部分而已。不過這一部分對于我們?nèi)粘J褂煤蛯W(xué)習(xí)基本上也夠用了。

如果要查看詳細(xì)幫助的話,可以運(yùn)行一下下面的命令,這樣會顯示所有和Powershell相關(guān)的幫助文檔。

Get-Help about*

然后,就可以閱讀自己感興趣的部分了。比方說,如果我們想了解用Powershell編寫類,就可以使用下面的命令。如果想在瀏覽器中瀏覽器在線版本,加上-online參數(shù)即可。

Get-Help about_Classes

參考資料

https://msdn.microsoft.com/en...

http://windowsitpro.com/power...

總結(jié)

以上是生活随笔為你收集整理的Powershell快速入门(二) Shell编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。