變量可以自動存儲任何Powershell能夠識別的類型信息,可以通過$variable的GetType().Name查看和驗(yàn)證Powershell分配給變量的數(shù)據(jù)類型。
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
會給數(shù)據(jù)分配一個最佳的數(shù)據(jù)類型;如果一個整數(shù)超出了32位整數(shù)的上限([int32]::MaxValue),它就會分配一個64位整數(shù)的數(shù)據(jù)類型;如果碰到小數(shù),會分配一個Double類型;如果是文本,Powershell會分配一個String類型;如果是日期或者時間,會被存儲為一個Datetime對象。
這種類型自適應(yīng)也稱作“弱類型”,雖然使用起來方便,但是也會有一些限制,甚至危險。如果powershell選擇了一個錯誤的類型付給變量,可能會引發(fā)一些奇怪的現(xiàn)象。例如有一個變量要存儲的是即將拷貝文件的個數(shù),可是在賦值時付了一個字符串,Powershell不會去做過多的判斷,它會更新這個變量的類型,并且存儲新的數(shù)據(jù)。所以一般專業(yè)的程序員或者腳本開發(fā)者更喜歡使用“強(qiáng)類型”,哪怕在賦值時類型不兼容的報錯,他們也樂意接受。
喜歡使用強(qiáng)類型的另一個原因是:每一個數(shù)據(jù)類型都有屬于自己的函數(shù)。例如DateTime,和XML,盡管這兩種類型都可以用純文本表示,但是使用強(qiáng)類型[DateTime]和[XML],對于數(shù)據(jù)操作起來更方便,這兩個類型的方法可是很豐富奧!
指定類型定義變量
定義變量時可以在變量前的中括號中加入數(shù)據(jù)類型。例如定義一個Byte類型的變量,因?yàn)锽yte的定義域?yàn)閇0,255],一旦嘗試使用一個不在定義域中的值賦給該變量就會顯示一條錯誤信息。
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
使用固定類型的優(yōu)點(diǎn)
手動地定義類型的一個重要原因是每個特殊的數(shù)據(jù)類型都有自己的特殊命令和特殊方法。比如把一個日期字符串賦給一個變量,Powershell不會自動把這個字符串轉(zhuǎn)換成日期對象賦給一個變量,因?yàn)镻owershell畢竟是機(jī)器,沒有人那么智能。當(dāng)你在賦值時指定DateTime類型時,你會發(fā)現(xiàn)幾乎所有的.Net 中DateTime類型的方法在這里都得到支持。
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>
查詢.exe 和 .dll結(jié)點(diǎn)
PS> [ XML ]$xml=(Get-Content .LogoTestConfig.xml) PS> $xml.LogoTest.Extensions.E .exe .dllPowershell
默認(rèn)支持的.NET類型如下。
[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 ]
標(biāo)簽:南昌 湘潭 疫苗接種 汕頭 天水 襄陽 喀什 臨汾
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Windows Powershell 變量的類型和強(qiáng)類型》,本文關(guān)鍵詞 Windows,Powershell,變量,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。