Windows Powershell 變數的類型和強型別_PowerShell

來源:互聯網
上載者:User

變數可以自動儲存任何Powershell能夠識別的類型資訊,可以通過$variable的GetType().Name查看和驗證Powershell分配給變數的資料類型。

PS> (10).gettype().nameInt32PS> (9999999999999999).gettype().nameInt64PS> (3.14).gettype().nameDoublePS> (3.14d).gettype().nameDecimalPS> ("WWW.MOSSFLY.COM").gettype().nameStringPS> (Get-Date).gettype().nameDateTimePowershell

會給資料分配一個最佳的資料類型;如果一個整數超出了32位整數的上限([int32]::MaxValue),它就會分配一個64位整數的資料類型;如果碰到小數,會分配一個Double類型;如果是文本,Powershell會分配一個String類型;如果是日期或者時間,會被儲存為一個Datetime對象。

這種類型自適應也稱作“弱類型”,雖然使用起來方便,但是也會有一些限制,甚至危險。如果powershell選擇了一個錯誤的類型付給變數,可能會引發一些奇怪的現象。例如有一個變數要儲存的是即將拷貝檔案的個數,可是在賦值時付了一個字串,Powershell不會去做過多的判斷,它會更新這個變數的類型,並且儲存新的資料。所以一般專業的程式員或者指令碼開發人員更喜歡使用“強型別”,哪怕在賦值時類型不相容的報錯,他們也樂意接受。

喜歡使用強型別的另一個原因是:每一個資料類型都有屬於自己的函數。例如DateTime,和XML,儘管這兩種類型都可以用純文字表示,但是使用強型別[DateTime]和[XML],對於資料操作起來更方便,這兩個類型的方法可是很豐富奧!

指定類型定義變數

定義變數時可以在變數前的中括弧中加入資料類型。例如定義一個Byte類型的變數,因為Byte的定義域為[0,255],一旦嘗試使用一個不在定義域中的值賦給該變數就會顯示一條錯誤資訊。

PS> [byte]$b=101PS> $b101PS> $b=255PS> $b255PS> $b.gettype()IsPublic IsSerial Name                   BaseType-------- -------- ----                   --------True   True   Byte                   System.ValueTypePS> $b=256Cannot 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

使用固定類型的優點

手動地定義類型的一個重要原因是每個特殊的資料類型都有自己的特殊命令和特殊方法。比如把一個日期文字賦給一個變數,Powershell不會自動把這個字串轉換成日期對象賦給一個變數,因為Powershell畢竟是機器,沒有人那麼智能。當你在賦值時指定DateTime類型時,你會發現幾乎所有的.Net 中DateTime類型的方法在這裡都得到支援。

PS> [DateTime]$date="2012-12-20 12:45:00"PS> $date2012年12月20日 12:45:00PS> $date.DayOfWeekThursdayPS> $date.DayOfYear355PS> $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結點

PS> [ XML ]$xml=(Get-Content .LogoTestConfig.xml)PS> $xml.LogoTest.Extensions.E.exe.dllPowershell 

預設支援的.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 ]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.