Windows Powershell 變量的類(lèi)型和強(qiáng)類(lèi)型
變量可以自動(dòng)存儲(chǔ)任何Powershell能夠識(shí)別的類(lèi)型信息,可以通過(guò)$variable的GetType().Name查看和驗(yàn)證Powershell分配給變量的數(shù)據(jù)類(lèi)型。
PS> (10).gettype().name
Int32
PS> (9999999999999999).gettype().name
Int64
PS> (3.14).gettype().name
Double
PS> (3.14d).gettype().name
Decimal
PS> ("WWW.MOSSFLY.COM").gettype().name
String
PS> (Get-Date).gettype().name
DateTimePowershell
會(huì)給數(shù)據(jù)分配一個(gè)最佳的數(shù)據(jù)類(lèi)型;如果一個(gè)整數(shù)超出了32位整數(shù)的上限([int32]::MaxValue),它就會(huì)分配一個(gè)64位整數(shù)的數(shù)據(jù)類(lèi)型;如果碰到小數(shù),會(huì)分配一個(gè)Double類(lèi)型;如果是文本,Powershell會(huì)分配一個(gè)String類(lèi)型;如果是日期或者時(shí)間,會(huì)被存儲(chǔ)為一個(gè)Datetime對(duì)象。
這種類(lèi)型自適應(yīng)也稱(chēng)作“弱類(lèi)型”,雖然使用起來(lái)方便,但是也會(huì)有一些限制,甚至危險(xiǎn)。如果powershell選擇了一個(gè)錯(cuò)誤的類(lèi)型付給變量,可能會(huì)引發(fā)一些奇怪的現(xiàn)象。例如有一個(gè)變量要存儲(chǔ)的是即將拷貝文件的個(gè)數(shù),可是在賦值時(shí)付了一個(gè)字符串,Powershell不會(huì)去做過(guò)多的判斷,它會(huì)更新這個(gè)變量的類(lèi)型,并且存儲(chǔ)新的數(shù)據(jù)。所以一般專(zhuān)業(yè)的程序員或者腳本開(kāi)發(fā)者更喜歡使用“強(qiáng)類(lèi)型”,哪怕在賦值時(shí)類(lèi)型不兼容的報(bào)錯(cuò),他們也樂(lè)意接受。
喜歡使用強(qiáng)類(lèi)型的另一個(gè)原因是:每一個(gè)數(shù)據(jù)類(lèi)型都有屬于自己的函數(shù)。例如DateTime,和XML,盡管這兩種類(lèi)型都可以用純文本表示,但是使用強(qiáng)類(lèi)型[DateTime]和[XML],對(duì)于數(shù)據(jù)操作起來(lái)更方便,這兩個(gè)類(lèi)型的方法可是很豐富奧!
指定類(lèi)型定義變量
定義變量時(shí)可以在變量前的中括號(hào)中加入數(shù)據(jù)類(lèi)型。例如定義一個(gè)Byte類(lèi)型的變量,因?yàn)锽yte的定義域?yàn)閇0,255],一旦嘗試使用一個(gè)不在定義域中的值賦給該變量就會(huì)顯示一條錯(cuò)誤信息。
PS> [byte]$b=101 PS> $b 101 PS> $b=255 PS> $b 255 PS> $b.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Byte System.ValueType PS> $b=256 Cannot convert value "256" to type "System.Byte". Error: "Value was either too large or too small for an unsigned byte. " At line:1 char:3 + $b <<<< =256 + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
使用固定類(lèi)型的優(yōu)點(diǎn)
手動(dòng)地定義類(lèi)型的一個(gè)重要原因是每個(gè)特殊的數(shù)據(jù)類(lèi)型都有自己的特殊命令和特殊方法。比如把一個(gè)日期字符串賦給一個(gè)變量,Powershell不會(huì)自動(dòng)把這個(gè)字符串轉(zhuǎn)換成日期對(duì)象賦給一個(gè)變量,因?yàn)镻owershell畢竟是機(jī)器,沒(méi)有人那么智能。當(dāng)你在賦值時(shí)指定DateTime類(lèi)型時(shí),你會(huì)發(fā)現(xiàn)幾乎所有的.Net 中DateTime類(lèi)型的方法在這里都得到支持。
PS> [DateTime]$date="2012-12-20 12:45:00" PS> $date 2012年12月20日 12:45:00 PS> $date.DayOfWeek Thursday PS> $date.DayOfYear 355 PS> $date.AddDays(-10) 2012年12月10日 12:45:00Powershell
處理Xml文檔也很方便,
例如有如下LogoTest.xml
<LOGOTEST> <EXTENSIONS> <E>.exe</E> <E>.dll</E> </EXTENSIONS> <FILES> <F></F> </FILES> <DIRS></DIRS> </LOGOTEST>
查詢(xún).exe 和 .dll結(jié)點(diǎn)
PS> [ XML ]$xml=(Get-Content .LogoTestConfig.xml) PS> $xml.LogoTest.Extensions.E .exe .dllPowershell
默認(rèn)支持的.NET類(lèi)型如下。
[array],[bool],[byte],[char],[datetime],[decimal],[double],[guid],[hashtable],[int16],[int32],[int],[int64],[long],[nullable],[psobject],[regex],[sbyte].[scriptblock],[single],[float],[string],[switch],[timespan],[type],[uint16],[uint32],[uint64],[ XML ]
相關(guān)文章
PowerShell腳本中控制Windows DNS服務(wù)的方法
這篇文章主要介紹了PowerShell腳本中控制Windows DNS服務(wù)的方法,本文給出了相關(guān)例子和命令,需要的朋友可以參考下2014-08-08
PowerShell函數(shù)指定返回值類(lèi)型實(shí)例
這篇文章主要介紹了PowerShell函數(shù)指定返回值類(lèi)型,即定義PowerShell函數(shù)的返回值類(lèi)型,需要的朋友可以參考下2014-07-07
Powershell中調(diào)用郵件客戶(hù)端發(fā)送郵件的例子
這篇文章主要介紹了Powershell中調(diào)用郵件客戶(hù)端發(fā)送郵件的例子,需要的朋友可以參考下2014-05-05
Powershell的break、continue和return簡(jiǎn)單總結(jié)
這篇文章主要介紹了Powershell的break、continue和return簡(jiǎn)單總結(jié),和其它語(yǔ)言中的作用相同,所以本文的總結(jié)比較短小,需要的朋友可以參考下2014-07-07
PowerShell打開(kāi)或關(guān)閉光驅(qū)
這里給大家分享的是使用PowerShell實(shí)現(xiàn)打開(kāi)或關(guān)閉光驅(qū)的小程序,大家也許根本用不到,這里只是個(gè)例子,讓大家學(xué)習(xí)下如何操作windows API2015-09-09
Windows Powershell Switch 語(yǔ)句
如果語(yǔ)句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch,看起來(lái)比較清爽一點(diǎn)。2014-10-10

