首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

操作系统

Windows 9X | Linux&Uinx | Windows Server | 其它操作系统 | Vista | FreeBSD | Windows 7 |
首页 > 操作系统 > Windows Server > Windows PowerShell 講座 (7)—運算子(下) > 正文

Windows PowerShell 講座 (7)—運算子(下)

出处:www.goodman-lai.idv.tw 作者:賴榮樞 时间:2008-6-7 14:18:07

本文將繼續介紹 Windows PowerShell 所提供的運算子,這些實用的運算子將資料的處理有很大的幫助。

本頁內容
邏輯運算子邏輯運算子
位元運算子位元運算子
替代運算子替代運算子
型別運算子型別運算子
範圍運算子範圍運算子
格式運算子格式運算子
結語結語

補述其他的運算子之前先提醒您,包括上一篇文章介紹的比較運算,以及本文即將說明的邏輯運算、型別運算,其結果都是 True 或 False 的布林值,因此在需要條件判斷的地方,經常會使用這類的運算;例如資料過濾的條件式,或者是迴圈、流程控制等。

邏輯運算子

如果要評估兩個以上的條件式,就是使用邏輯運算子的時機。例如:

2008 年 4 月 1 日產生「而且」識別碼為 672 的事件記錄

副檔名為 log「而且」512 KB 以上的檔案

使用者名稱為 SYSTEM「或者」NETWORK SERVICE 的行程

Windows PowerShell 提供了四種邏輯運算子,其中反閘有兩種表示法,可以用文字的 - not,或者是符號 !,不論哪一種,反閘的作用就是將 True 變成 False,或將 False 變成 True。這些運算子列表如下。

運算子說明簡例結果

-and

及閘,所有運算式都必須為 True,結果才會是 True。

(3 -eq 3) -and (2 -eq 5)

False

-or

或閘,至少要有一個運算式為 True,結果就會是 True。

(3 -eq 3) -or (2 -eq 5)

True

-xor

互斥閘,只有其中一個運算式為 True,結果才會是 True。

(3 -eq 3) -xor (2 -eq 2)
(3 -eq 3) -xor (2 -eq 5)

False
True

-not(!)

反閘,逆轉運算結果。

(3 -eq 3) -and !(2 -eq 5)

(3 -eq 3) -and -not(2 -eq 5)

True

資料過濾應該算是比較運算和邏輯運算最實際的應用,我們在利用 Windows PowerShell 的 cmdlet 時,其執行結果經常會得到相當大量的資料,如果要以肉眼檢視結果,往往很困難,有時甚至會因為資料量實在太大而不可能以肉眼檢視。因此必須再藉由另一段指令碼來過濾資料。

Where-Object(別名為 Where)是經常用來過濾資料的 cmdlet,而過濾資料的條件式就會用到(上一篇文章)介紹到的比較運算子;有些較為複雜的過濾,就需要用到這裡提及的邏輯運算子。

例如以下兩個片段的例子,都各有兩個條件式,但第一個必須同時符合兩個條件式,第二個則只要符合其中一個條件式:

# 找出日期為 2008 年 4 月 1 日,「而且」識別碼為 672 的事件記錄date - match "2008/4/1" -and ID -eq "672" # 使用者名稱為 SYSTEM「或者」NETWORK SERVICE 的行程UserID -eq "SYSTEM" -or UserID -eq "NETWORK SERVICE"            
 

位元運算子

如果需要位元運算,Windows PowerShell 也提供了四種基本的位元運算子,這些運算子都是以代表位元的 b 開頭,列表如下。

運算子說明簡例結果

-band

位元及閘運算,參與運算的兩邊位元都是 1,結果才是 1(只要一邊為 0,結果就是 0)。

10 -band 3

2

-bor

位元或閘運算,參與運算的兩邊位元只要一邊是 1,結果就會是 1。

10 -bor 3

11

-bxor

位元互斥閘運算,參與運算的兩邊位元只有一邊是 1,結果才會是 1。

10 -bxor 3

9

-bnot

位元反閘,逆轉位元值。

-bnot 1 -band 1

0

位元運算是針對二進位的位元資料,雖然在 Windows PowerShell 可以如上述直接以十進位表示欲進行位元運算的資料,但改以二進位可能更有助於您理解運算過程:

10 -band 3  轉換成二進位→  1010 -band 0011 = 0010  轉換成十進位→  210 -bor 3   轉換成二進位→   1010 -bor 0011 = 1011   轉換成十進位→  1110 -xbor 3  轉換成二進位→   1010 -xbor 0011 = 1001  轉換成十進位→  9-bnot 1 -band 1  →  0 -band 1 = 0            
 

替代運算子

Windows PowerShell 還包括了一些特別且實用的運算子,這些運算子所能完成的功能,在其他語言通常需要好幾個運算子共同完成。首先介紹的是替代運算子,它的功能就如同我們經常會用到的「搜尋後取代」,它的用法如下:

            <"欲處理的字串"> -replace <"欲搜尋的字串">, <"欲替代的字串">            

如同其他能比較字串的比較運算子,-replace 也另外有 c 開頭和 i 開頭的運算子:-replace 和 -ireplace 忽略大小寫,-creplace 不會忽略大小寫。以下是幾個關於 -replace 的例子。

# 將 PowerShell 裡的 e 換成 5PS > "PowerShell" -replace "e", "5"Pow5rSh5ll # 將 PowerShell 裡的 a 換成 z,就算沒有任何替代(因為 PowerShell 沒有 a),# 也不會顯示錯誤訊息,依然顯示運算過的字串PS > "PowerShell" -replace "a", "z"PowerShell # 再將替代後的結果指定給原變數PS > $var = "PowerShell"PS > $var = $var -replace -replace "e", "5" # 亦可處理字串陣列PS > $var = @("aaa","bbb","azaz","ccc")PS > $var = $var -replace "a", "z"PS > $varzzzbbbzzzzccc            

再次提醒,上述簡例都未處理字母大小寫,如果希望能處理大小寫,請使用 c 開頭的 -creplace。

 

型別運算子

Windows PowerShell 也提供了檢查資料型別的運算子,可以用來檢查是不是某種型別,以及能用來轉換型別;這些運算子列表如下。

運算子說明簡例

-is

是某種型別嗎?傳回 True 或 False。

$var -is [int]

-isnot

不是某種型別嗎?傳回 True 或 False。

$var -isnot [int]

-as

將物件轉成指定的型別

$var -as [string]

要注意的是,使用這些運算子時,運算子右邊必須是欲檢查或指定的運算子,運算子左邊可以是變數或值,例如以下的例子:

# 檢查 123 是整數嗎?傳回 True 表示「是」。PS > 123 -is [int]True # 檢查 123 不是字串嗎?傳回 True 表示「不是」。PS > 123 -isnot [string]True # 將 123 轉成字串,並指定到 $varPS > $var = 123 -as [string]# 接著 $var 是字串嗎?傳回 True 表示「是」。PS > $var -is [string]True           

此外,如果想要知道變數到底是哪一種型別,可以透過變數的 GetType() 方法,這個方法回傳會一個物件,物件的 Name 屬性存放著型別名稱。例如承上 $var 變數的例子(必須注意的是,GetType() 的小括號不能省略):

PS > $var.GetType()IsPublic IsSerial Name     BaseType---------- ---------- --------     --------------True    True   String     System.Object或PS > $var.GetType().NameString           
 

範圍運算子

範圍運算子的符號是由兩個英文句點所構成(..)。之前的文章曾經使用過這個運算子,當時是將一段數值範圍指定給陣列,例如以下的例子:

PS > $var = @(1..5)			

必須注意的是,範圍運算子只能用在整數,如果用在字串會產生錯誤,如果用在浮點數,則會產生出乎意料的結果,例如以下的例子:

# 不能用在字串,會產生錯誤PS > $var = @("a" .. "i") # 結果並非 1.1 到 1.9 的浮點數,而是 1、2 兩個整數PS > $var = @(1.1 .. 1.9)PS > $var12			
 

格式運算子

Windows PowerShell 提供了格式運算子(-f),這個運算子可以讓您將 .NET 提供的格式化機制用在 Windows PowerShell。.NET 格式化機制的細節本文暫且不表,細節可參考 MSDN 文件:(Formatting Overview)。

格式運算子的使用方式如下:

<格式< -f >欲格式化的字串>			

也就是將欲格式化的字串,按照「格式」加以處理。以下以實例說明格式運算子所提供的功能。

# 日期時間的格式化# 格式化之前,$var 的內容包含了完整的日期及時間,並請留意其格式PS > $var = Get-DatePS > $var2008 年 5 月 10 日  下午 03:39:01 # 格式化日期PS > "{0:d}" -f $var2008/5/10 # 格式化日期,請注意 D 是大小PS > "{0:D}" -f $var2008 年 5 月 10 日 # 格式化時間PS > "{0:t}" -f $var下午 03:39 # 格式化時間,請注意 T 是大小PS > "{0:T}" -f $var下午 03:39:01 # 數值的格式化$val = 12345.6789 # 加上三位數逗號,且小數位數預設為兩位PS > "{0:N}" -f $val12,345.68 # 將小數位數指定成三位PS > "{0:N3}" -f $val12,345.679 # 與 "{0:N}" 相同,但不加三位數逗號PS > "{0:F}" -f $val12345.68 # 將小數位數指定成三位PS > "{0:F3}" -f $var12345.679			
 

結語

本文介紹了 Windows PowerShell 的邏輯運算子、位元運算子、替代運算子、型別運算子、範圍運算子、格式運算子,雖然有些運算子應用的機會較少,但仍是重要且實用的運算子。應用機會較多的可能就是邏輯運算子,尤其在需要以兩個條件式過濾資料的時候,就會用到。

此外,有些運算子雖然不在這兩篇文章的說明之列,但它們仍是 Windows PowerShell 相當重要的運算子,包括重導運算子(>、>>)、用來存取物件方法或屬性的「點」(.)等等;這些運算子已經在之前的文章介紹過了,因此這兩篇專述運算子的文章就不再重複。

相关文章 热门文章
  • 微软宣布已售出4亿份Windows 7许可
  • 文件共享的12条军规——多一点规划可以使你的共享文件夹环境更合理
  • Powercfg 从命令行控制系统的电源管理
  • windows NT 4.0 Domain升级到windows server 2008 R2需要注意的几个问题
  • windows 7使用GPO统一桌面黑屏
  • Windows 2003域更名工具(Domain Rename Tool)
  • PowerShell命令解释器技巧
  • PowerShell脚本优化技巧
  • 创建Windows 7部署介质
  • 轻松传送——Windows Easy Transfer
  • 使用MDT 2010执行Windows 7裸机安装
  • Windows Server 2008 R2和Windows 7的组策略
  • “http 500内部服务器错误”的解决方法
  • 利用Windows 2000 Server的RRAS实现VPN服务器
  • 用凤凰万能启动盘解决本地/域管理员密码丢失
  • Win2003 Server企业版安装配置
  • Active directory 灾难恢复
  • Windows 2000/03域和活动目录
  • 如何在vmware4上创建windows 2003群集
  • MSI文件制作全过程
  • Win2000命令全集(一)
  • Windows 2000/AD技巧
  • 此系统的本地策略不允许您采用交互式登录解决方法
  • Win2000路由的安装与设置实现不同网段互通
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号