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。