變數可以臨時儲存資料,因此可以把資料儲存在變數中,以便進一步操作。
#定義變數$a=10$b=4#計算變數$result=$a*$b$msg="儲存文本"#輸出變數$result$msg40儲存文本
powershell 不需要顯示地去聲明,可以自動建立變數,只須記住變數的首碼為$.
建立好了變數後,可以通過變數名輸出變數,也可以把變數名存在字串中。但是有個例外單引號中的字串不會識別和處理變數名。
選擇變數名
在powershell中變數名均是以美元符”$”開始,剩餘字元可以是數字、字母、底線的任一字元,並且powershell變數名大小寫不敏感($a和$A 是同一個變數)。
某些特殊的字元在powershell中有特殊的用途,一般不推薦使用這些字元作為變數名。當然你硬要使用,請把整個變數名尾碼用花括弧括起來。
PS C:\test> ${"I"like $}="mossfly"PS C:\test> ${"I"like $}
mossfly賦值和傳回值
賦值操作符為“=”,幾乎可以把任何資料賦值給一個變數,甚至一條cmdlet命令
,為什麼,因為Powershell支援對象,對象可以包羅永珍。
PS C:\test> $item=Get-ChildItem .PS C:\test> $item Directory: C:\testMode LastWriteTime Length Name---- ------------- ------ ----d---- 2011/11/23 17:25 ABC-a--- 2011/11/24 18:30 67580 a.html-a--- 2011/11/24 20:04 26384 a.txt-a--- 2011/11/24 20:26 12060 alias-a--- 2011/11/24 20:27 12060 alias.ps1-a--- 2011/11/23 17:25 0 b.txt-a--- 2011/11/23 17:25 0 c.txt-a--- 2011/11/23 17:25 0 d.txt-a--- 2011/11/25 11:20 556 employee.xml-a--- 2011/11/24 17:37 7420 name.html-a--- 2011/11/28 15:30 63 ping.bat-a--- 2011/11/24 17:44 735892 Powershell_Cmdlets.html-a--- 2011/11/28 17:03 60 test.ps1-a--- 2011/11/23 17:37 242 test.txt-a--- 2011/11/28 16:42 170 test.vbsPS C:\test> $result=3000*(1/12+0.0075)PS C:\test> $result272.5
給多個變數同時賦值
賦值操作符不僅能給一個變數賦值,還可以同時給多個變數賦相同的值。
PS C:\test> $a=$b=$c=123PS C:\test> $a123PS C:\test> $b123PS C:\test> $c123
交換變數的值
要交換兩個變數的值,傳統的程式語言至少需要三步,並且還需定義一個中間臨時變數。
$Value1 = 10$Value2 = 20$Temp = $Value1$Value1 = $Value2$Value2 = $Temp
在powershell中,交換兩個變數的值,這個功能變得非常簡單。
PS C:\test> $value1=10PS C:\test> $value2=20PS C:\test> $value1,$value2=$value2,$value1PS C:\test> $value120PS C:\test> $value210
查看正在使用的變數
Powershell將變數的相關資訊的記錄存放在名為variable:的驅動中。如果要查看所有定義的變數,可以直接遍曆variable:
PS C:\test> ls variable:Name Value---- -----"I"like $ mossfly$ cls? True^ cls_1 1a 123args {}b 123c 123ConfirmPreference HighConsoleFileNameDebugPreference SilentlyContinue。。。
尋找變數
因為有虛擬驅動variable:的存在,可以象尋找檔案那樣使用萬用字元尋找變數。例如要查詢以value打頭的變數名。
PS C:\test> ls variable:value*Name Value---- -----value1 20value2 10
驗證變數是否存在
驗證一個變數是否存在,仍然可以象驗證檔案系統那樣,使用cmdlet Test-Path。為什嗎?因為變數存在變數磁碟機中。
PS C:\test> Test-Path variable:value1TruePS C:\test> Test-Path variable:value2TruePS C:\test> Test-Path variable:valueUnkonwFalse
刪除變數
因為變數會在powershell退出或關閉時,自動清除。一般沒必要刪除,但是你非得刪除,也可以象刪除檔案那樣刪除它。
PS C:\test> Test-Path variable:value1TruePS C:\test> del variable:value1PS C:\test> Test-Path variable:value1False
使用專用的變數命令
為了管理變數,powershell提供了五個專門管理變數的命令Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable。因為虛擬磁碟機variable:的存在,clear,remove,set打頭的命令可以被代替。但是Get-Variable,New-Variable。卻非常有用new-variable可以在定義變數時,指定變數的一些其它屬性,比如存取權限。同樣Get-Variable也可以擷取這些附加資訊。
變數防寫保護
可以使用New-Variable 的option選項 在建立變數時,給變數加上唯讀屬性,這樣就不能給變數重新賦值了。
PS C:\test> New-Variable num -Value 100 -Force -Option readonlyPS C:\test> $num=101Cannot overwrite variable num because it is read-only or constant.At line:1 char:5+ $num <<<< =101 + CategoryInfo : WriteError: (num:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:numRemove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,ration again specifying the Force option.At line:1 char:4+ del <<<< Variable:num + CategoryInfo : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand
但是可以通過刪除變數,再重新建立變數更新變數內容。
PS C:\test> del Variable:num -ForcePS C:\test> $num=101PS C:\test> $num101
有沒有許可權更高的變數,有,那就是:選項Constant,常量一旦聲明,不可修改
PS C:\test> new-variable num -Value "strong" -Option constantPS C:\test> $num="why? can not delete it."Cannot overwrite variable num because it is read-only or constant.At line:1 char:5+ $num <<<< ="why? can not delete it." + CategoryInfo : WriteError: (num:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:num -ForceRemove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,ration again specifying the Force option.At line:1 char:4+ del <<<< Variable:num -Force + CategoryInfo : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand
變數描述
在New-Variable 可以通過-description 添加變數描述,但是變數描述預設不會顯示,可以通過Format-List 查看。
PS C:\test> new-variable name -Value "me" -Description "This is my name"PS C:\test> ls Variable:name | fl *PSPath : Microsoft.PowerShell.CoreVariable::namePSDrive : VariablePSProvider : Microsoft.PowerShell.CoreVariablePSIsContainer : FalseName : nameDescription : This is my nameValue : meVisibility : PublicModule :ModuleName :Options : NoneAttributes : {}