PowerShell中的基礎數據類型


PowerShell是一個面向對象的語言,在申明變量的時候不強制要求申明數據類型,使用$開頭來申明變量即可。

基本數據類型

PowerShell本身是基於.Net開發出來的,所以在.Net中的基本數據類型,在PowerShell中也可以使用,只是在PowerShell中用”[]”來標識具體的數據類型。比如[int],[long],[string],[bool],[double]等。

使用-is來判斷某個變量是否指定的數據類型,和C#中的is關鍵字是一樣的。比如:

$a=10; 
$a  -is [int] 
$a  -is [double]

第二行返回True,第三行返回False。

我們也可以在定義變量時指定數據類型。比如我們要定義decimal類型的10,那么可以寫為:

[decimal] $c=10

$c.GetType() 可以看到我們的類型為Decimal。

數據類型轉換

關於默認數據類型轉換,PowerShell和C#的行為有所不同。PowerShell會根據第一個變量的類型作為目標類型,然后將運算后面的聯系轉換為第一個類型。比如我們申明兩個變量:

$a=10; 
$b= " 10 ";

如果我們使用加法運算:

$a+ $b

該運算會返回20,因為第一個變量是int類型的,所以后面的變量都會轉換為int類型。如果我們調整變量的順序:

$b+ $a

該運算返回的結果為1010,因為第一個變量是string類型。習慣了C#的默認類型轉換,那么我們可以強制進行類型轉換后再進行運算。強制類型轉換的方法也是與C#相同。

比如我們要按int類型來計算,那么我們第二個加法可以改為:

[int] $b+ $a

我們也可以使用-as命令,那么第二個加法改為:

( $b  -as [int])+ $a

List/Array類型

我們平時使用的各種Get-XXX命令,很多都是返回對應類型的Array,比如Get-Process.

如果我們要定義一個集合,那么可以使用”@(對象1,對象2,對象3…)”的格式申明集合。比如我們定義一個字符串集合:

$a=@('a','bb','ccc')

其實不使用@和括號也是可以的,只需要用逗號分割各個Item即可。

$a='aaa','bb','c'

如果是申明一個空的集合,就必須寫為:

$a=@()

與C#不同的是,在PowerShell中,往集合中添加元素,可以使用+=符號。

$a=@() 
$a+= " abc " 
$a+= " dddd " 
Write-Host  $a

如果要移除某個元素,那么就不簡單了,需要使用Where查詢(簡寫為?),找出要保留的元素,然后將保留的元素集合再重新賦值會變量。比如對於字符串集合,我們要移除字符c,那么操作如下:

$a=@('aaa','bb','c') 
$a$a | ? { $_  -ne 'c'} 
Write-Host  $a

訪問某個元素使用[idx]即可和C#相同。至於對集合的各種操作,可以參見我上一篇博文

Hashtable/Dictionary類型

哈希表就是一個Key-Value對的集合。哈希表的創建格式如下:

@{Key1=Value1;Key2=Value2;…}

這里Key一般是字符串,但是並不需要用引號引起來(當然,使用了引號更好),Value可以是任意類型。比如我們創建一個員工和部門的Hashtable,命令如下:

$a=@{Devin= " IT ";Edward= " Finance ";Jeneen= " Sale "}

使用keys屬性可以獲得哈希表的Key列表,使用values屬性可以獲得Value列表。

如果要往哈希表中添加元素,可以使用.Add(Key,Value)方法。比如添加一個員工:

$a.Add( " Julia ", " Logisitcs ")

這里需要注意的是Key必須要帶引號。而且哈希表的Key是不允許重復的,如果已經存在相同的值,添加會報錯。可以先判斷Key是否存在,然后再添加:

if( -not  $a.ContainsKey( " Julia ")) 

$a.Add( " Julia ", " Logisitcs "
}

如果要移除某個Key對應的元素,那么可以調用.Remove(Key)函數即可。

$a.Remove( " Julia ")

如果要訪問某個Key對應的值,有兩種方法:

$a[ " Devin "
$a.Devin

需要注意的是,直接對哈希表進行Sort-Object是沒有效的,我們必須先調用GetEnumerator方法,把哈希表轉換后在執行Sort。

$a.GetEnumerator() | Sort-Object Name


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM