探索PowerShell(九) 條件控制、邏輯
更新時(shí)間:2012年12月05日 17:20:06 作者:
PowerShell作為一個(gè)動(dòng)態(tài)腳本語(yǔ)言,同樣具有條件判斷、邏輯控制的能力。諸如if、elseif、else以及switch都是被PowerShell所支持的
邏輯判斷
先來(lái)簡(jiǎn)單介紹最基本的邏輯判斷:
• -eq 判斷是否等于(equal)
• -lt 判斷時(shí)候小于(less than)
• -gt 判斷是否大于(greater than)
• -ge 判斷是否大于或等于(greater of equal)
• -le 判斷是否小于或等于(less or equal)
• -ne 判斷是否不等于(no equal)
在之前的幾個(gè)小節(jié)中,如果你注意的話(huà),應(yīng)該可以發(fā)現(xiàn)PowerShell對(duì)于大小寫(xiě)并不敏感,可是在某些時(shí)候我們卻需要區(qū)分它們,因此,還可以使用諸如:
• -ieq (case-insensitive)
• -ceq (case-sensitive)
前者是忽略大小寫(xiě),后者則是區(qū)分大小寫(xiě)。
示例:
"MaRui" -eq "marui" <enter>
結(jié)果:"True"
"MaRui" -ieq "MARUI" <enter>
結(jié)果:"True"
"MaRui" -ceq "MARUI" <enter>
結(jié)果:"False"
邏輯運(yùn)算
• -and 與
• -or 或
• -not 非
• ! 非
條件
if、else、elseif語(yǔ)句
基本語(yǔ)法:
if (條件)
{代碼}
elseif (條件)
{代碼}
else (條件)
{代碼}
else
{代碼}
例如:
$n=10
if ($n -eq 1)
{"n=1"}
elseif ($n -ne 1)
{"n!=1,and n=$n"}

下面的腳本是用來(lái)查看本機(jī)操作系統(tǒng)的,使用了"if"語(yǔ)句。請(qǐng)復(fù)制下面的腳本并且保存為"OS.ps1",用PowerShell運(yùn)行試試。
$ComputerName = (Get-WmiObject -class win32_computersystem).name
$OS_Version = (Get-WmiObject -class win32_operatingsystem -computer $ComputerName).version
if (($OS_Version -eq "5.1.2600") -or ($OS_Version -eq "5.2.3790"))
{
write-host "Computer Name:"$ComputerName
if ($OS_Version -eq "5.1.2600")
{
write-host "OS:Windows XP"
}
elseif ($OS_Version -eq "5.2.3790")
{
write-host "OS:Windows 2003"
}
}
elseif (($OS_Version -eq "5.0.2195") -or ($OS_Version -eq "6.1.7600"))
{
write-host "Computer Name:"$ComputerName
if ($OS_Version -eq "5.0.2195")
{
write-host "OS:Windows 2000 Server"
}
elseif ($OS_Version -eq "6.1.7600")
{
write-host "OS:Windows 7"
}
}
else
{
write-host "$ComputerName is not supported."
}
"–END OF REPORT–"
在我的計(jì)算機(jī)上的運(yùn)行結(jié)果:

"switch"語(yǔ)句
基本語(yǔ)法:
switch (表達(dá)式)
{
(表達(dá)式) {代碼}
值 {代碼}
default {默認(rèn)執(zhí)行代碼}
}
例如,我們可以查詢(xún)"domainRole"的值來(lái)判斷計(jì)算機(jī)在當(dāng)前Active Directory域中擔(dān)任的角色,試試下面的代碼:
switch ((Get-WmiObject -Class win32_ComputerSystem).domainRole)
{
0 {Write-Host "Standalone Workstation"}
1 {Write-Host "Member Workstation"}
2 {Write-Host "Standalone Server"}
3 {Write-Host "Member Server"}
4 {Write-Host "Backup Domain Controller"}
5 {Write-Host "Primary Domain Controller"}
default {Write-Host "Cannot determine domain role"}
}
判斷語(yǔ)句為表達(dá)式的例子:
switch (100)
{
(99 + 1) {Write-Host "99+1=100"}
(1 + 100) {Write-Host "1+100=100"}
(50*2) {Write-Host "50*2=100"}
(33.333*3) {Write-Host "33.333*3=100"}
}
運(yùn)行結(jié)果:

這節(jié)就說(shuō)到這里吧,下一節(jié)將講一講循環(huán)語(yǔ)句的使用。
先來(lái)簡(jiǎn)單介紹最基本的邏輯判斷:
• -eq 判斷是否等于(equal)
• -lt 判斷時(shí)候小于(less than)
• -gt 判斷是否大于(greater than)
• -ge 判斷是否大于或等于(greater of equal)
• -le 判斷是否小于或等于(less or equal)
• -ne 判斷是否不等于(no equal)
在之前的幾個(gè)小節(jié)中,如果你注意的話(huà),應(yīng)該可以發(fā)現(xiàn)PowerShell對(duì)于大小寫(xiě)并不敏感,可是在某些時(shí)候我們卻需要區(qū)分它們,因此,還可以使用諸如:
• -ieq (case-insensitive)
• -ceq (case-sensitive)
前者是忽略大小寫(xiě),后者則是區(qū)分大小寫(xiě)。
示例:
復(fù)制代碼 代碼如下:
"MaRui" -eq "marui" <enter>
結(jié)果:"True"
"MaRui" -ieq "MARUI" <enter>
結(jié)果:"True"
"MaRui" -ceq "MARUI" <enter>
結(jié)果:"False"
邏輯運(yùn)算
• -and 與
• -or 或
• -not 非
• ! 非
條件
if、else、elseif語(yǔ)句
基本語(yǔ)法:
復(fù)制代碼 代碼如下:
if (條件)
{代碼}
elseif (條件)
{代碼}
else (條件)
{代碼}
else
{代碼}
例如:
復(fù)制代碼 代碼如下:
$n=10
if ($n -eq 1)
{"n=1"}
elseif ($n -ne 1)
{"n!=1,and n=$n"}

下面的腳本是用來(lái)查看本機(jī)操作系統(tǒng)的,使用了"if"語(yǔ)句。請(qǐng)復(fù)制下面的腳本并且保存為"OS.ps1",用PowerShell運(yùn)行試試。
復(fù)制代碼 代碼如下:
$ComputerName = (Get-WmiObject -class win32_computersystem).name
$OS_Version = (Get-WmiObject -class win32_operatingsystem -computer $ComputerName).version
if (($OS_Version -eq "5.1.2600") -or ($OS_Version -eq "5.2.3790"))
{
write-host "Computer Name:"$ComputerName
if ($OS_Version -eq "5.1.2600")
{
write-host "OS:Windows XP"
}
elseif ($OS_Version -eq "5.2.3790")
{
write-host "OS:Windows 2003"
}
}
elseif (($OS_Version -eq "5.0.2195") -or ($OS_Version -eq "6.1.7600"))
{
write-host "Computer Name:"$ComputerName
if ($OS_Version -eq "5.0.2195")
{
write-host "OS:Windows 2000 Server"
}
elseif ($OS_Version -eq "6.1.7600")
{
write-host "OS:Windows 7"
}
}
else
{
write-host "$ComputerName is not supported."
}
"–END OF REPORT–"
在我的計(jì)算機(jī)上的運(yùn)行結(jié)果:

"switch"語(yǔ)句
基本語(yǔ)法:
復(fù)制代碼 代碼如下:
switch (表達(dá)式)
{
(表達(dá)式) {代碼}
值 {代碼}
default {默認(rèn)執(zhí)行代碼}
}
例如,我們可以查詢(xún)"domainRole"的值來(lái)判斷計(jì)算機(jī)在當(dāng)前Active Directory域中擔(dān)任的角色,試試下面的代碼:
復(fù)制代碼 代碼如下:
switch ((Get-WmiObject -Class win32_ComputerSystem).domainRole)
{
0 {Write-Host "Standalone Workstation"}
1 {Write-Host "Member Workstation"}
2 {Write-Host "Standalone Server"}
3 {Write-Host "Member Server"}
4 {Write-Host "Backup Domain Controller"}
5 {Write-Host "Primary Domain Controller"}
default {Write-Host "Cannot determine domain role"}
}
判斷語(yǔ)句為表達(dá)式的例子:
復(fù)制代碼 代碼如下:
switch (100)
{
(99 + 1) {Write-Host "99+1=100"}
(1 + 100) {Write-Host "1+100=100"}
(50*2) {Write-Host "50*2=100"}
(33.333*3) {Write-Host "33.333*3=100"}
}
運(yùn)行結(jié)果:

這節(jié)就說(shuō)到這里吧,下一節(jié)將講一講循環(huán)語(yǔ)句的使用。
相關(guān)文章
Powershell小技巧--遠(yuǎn)程對(duì)比服務(wù)配置
這篇文章主要介紹了使用Powershell遠(yuǎn)程對(duì)比服務(wù)配置的方法,大家可以推廣下獲取服務(wù)器其他參數(shù)進(jìn)行對(duì)比,希望對(duì)大家能有所幫助2014-09-09PowerShell中把相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑的2個(gè)方法
這篇文章主要介紹了PowerShell中把相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑的2個(gè)方法,并對(duì)他的區(qū)別做了講解,需要的朋友可以參考下2014-08-08Powershell獲取系統(tǒng)中所有可停止的服務(wù)
這篇文章主要介紹了Powershell獲取系統(tǒng)中所有可停止的服務(wù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03PowerShell腳本開(kāi)發(fā)之收發(fā)TCP消息包
這篇文章里將會(huì)描述如何在PSNet包中創(chuàng)建針對(duì)TCP消息包的函數(shù)Receive-和TCPMessageSend-TCPMessage。并把相關(guān)代碼分享給大家,有需要的朋友可以參考下。2014-10-10Windows Powershell Switch 語(yǔ)句
如果語(yǔ)句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch,看起來(lái)比較清爽一點(diǎn)。2014-10-10詳談Ubuntu PowerShell(小白入門(mén)必看教程)
下面小編就為大家?guī)?lái)一篇詳談Ubuntu PowerShell(小白入門(mén)必看教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06