PowerShell是一個物件導向的語言,在申明變數的時候不強制要求申明資料型別,使用$開頭來申明變數即可。
基本資料型別
PowerShell本身是基於.Net開發出來的,所以在.Net中的基本資料型別,在PowerShell中也可以使用,只是在PowerShell中用”[]”來標識具體的資料型別。比如[int],[long],[string],[bool],[double]等。
使用-is來判斷某個變數是否指定的資料型別,和C#中的is關鍵字是一樣的。比如:
$a -is [int]
$a -is [double]
第二行返回True,第三行返回False。
我們也可以在定義變數時指定資料型別。比如我們要定義decimal型別的10,那麼可以寫為:
$c.GetType() 可以看到我們的型別為Decimal。
資料型別轉換
關於預設資料型別轉換,PowerShell和C#的行為有所不同。PowerShell會根據第一個變數的型別作為目標型別,然後將運算後面的聯絡轉換為第一個型別。比如我們申明兩個變數:
$b="10";
如果我們使用加法運算:
該運算會返回20,因為第一個變數是int型別的,所以後面的變數都會轉換為int型別。如果我們調整變數的順序:
該運算返回的結果為1010,因為第一個變數是string型別。習慣了C#的預設型別轉換,那麼我們可以強制進行型別轉換後再進行運算。強制型別轉換的方法也是與C#相同。
比如我們要按int型別來計算,那麼我們第二個加法可以改為:
我們也可以使用-as命令,那麼第二個加法改為:
List/Array型別
我們平時使用的各種Get-XXX命令,很多都是返回對應型別的Array,比如Get-Process.
如果我們要定義一個集合,那麼可以使用”@(物件1,物件2,物件3…)”的格式申明集合。比如我們定義一個字串集合:
其實不使用@和括號也是可以的,只需要用逗號分割各個Item即可。
如果是申明一個空的集合,就必須寫為:
與C#不同的是,在PowerShell中,往集合中新增元素,可以使用+=符號。
$a+="abc"
$a+="dddd"
Write-Host $a
如果要移除某個元素,那麼就不簡單了,需要使用Where查詢(簡寫為?),找出要保留的元素,然後將保留的元素集合再重新賦值會變數。比如對於字串集合,我們要移除字元c,那麼操作如下:
$a= $a | ? {$_ -ne 'c'}
Write-Host $a
訪問某個元素使用[idx]即可和C#相同。至於對集合的各種操作,可以參見我上一篇博文。
Hashtable/Dictionary型別
雜湊表就是一個Key-Value對的集合。雜湊表的建立格式如下:
@{Key1=Value1;Key2=Value2;…}
這裡Key一般是字串,但是並不需要用引號引起來(當然,使用了引號更好),Value可以是任意型別。比如我們建立一個員工和部門的Hashtable,命令如下:
使用keys屬性可以獲得雜湊表的Key列表,使用values屬性可以獲得Value列表。
如果要往雜湊表中新增元素,可以使用.Add(Key,Value)方法。比如新增一個員工:
這裡需要注意的是Key必須要帶引號。而且雜湊表的Key是不允許重複的,如果已經存在相同的值,新增會報錯。可以先判斷Key是否存在,然後再新增:
{
$a.Add("Julia","Logisitcs")
}
如果要移除某個Key對應的元素,那麼可以呼叫.Remove(Key)函式即可。
如果要訪問某個Key對應的值,有兩種方法:
$a.Devin
需要注意的是,直接對雜湊表進行Sort-Object是沒有效的,我們必須先呼叫GetEnumerator方法,把雜湊錶轉換後在執行Sort。