(8)Powershell中變量的定義和使用
這一節主要介紹Powershell中變量的定義和使用,以及使用變量時應該注意的事項。
和所有編程語言中的變量一樣,Powershell中的變量也是存於存儲值的內存單元,需要注意的是,Powershell中的變量是以美元符號($)開頭的單字節(一般是英文字符,雖然ISE中支持雙字節的字符,但是像任何編程語言,我們不鼓勵不贊成使用中文等命名的變量)文本字符串表示,如 $a, $b 或者是 $my_str。
在Powershell中有3種不同的變量。
-
用戶自己創建的變量
用戶創建的變量由用戶創建和維護。默認情況下,在 PowerShell 命令行中創建的變量只在當前PowerShell 窗口有效。關閉該窗口后,變量也會自動銷毀(再次打開命令窗口不再存在,不能再引用之前定義的變量)。若要保存變量並使其在窗口關閉並再次打開時仍然有效,需要將其添加到 PowerShell 配置文件中(但並不建議這么做)。如果是在編寫腳本,則可以在腳本中創建具有全局或局部作用域的變量。
-
自動變量
自動變量也稱為內置變量,用於存儲 PowerShell 的一些狀態信息。這些變量由 PowerShell 創建和維護,PowerShell 根據需要更改變量值以保持其准確性。用戶不能更改這些變量的值。例如,$PSHome 變量存儲 PowerShell 安裝目錄的路徑。
-
首選項變量
首選項變量就是Powershell當前命令窗口環境的首選項設置,這些變量由Powershell創建,並以默認值填充,用戶可以更改這些變量的值,如 $MaximumHistoryCount 是歷史記錄的最大條數。
變量的定義和使用
創建(定義)新變量或更改變量的值,請使用以下格式的賦值語句
$<variable> = <value>
例如以下定義了字符串變量 $myStr 並修改了其值。如果要顯示變量的值,直接輸入變量的名稱,包括美元符號$。
PS C:\> $myStr="This variables defined by user" PS C:\> $myStr This variables defined by user PS C:\> $myStr="user has changed the value of this variables" PS C:\> $myStr user has changed the value of this variables
在定義和使用變量時,可以使用單引號和雙引號,但需要注意單引號和雙引號的區別。
PS C:\> $myStr='this is string variables' PS C:\> $youStr='your want to display the $myStr' PS C:\> $youStr your want to display the $myStr
注意上面的變量定義使用的單引號,變量 $youStr 中的變量 $myStr 並沒有替換為其所代表的值,而是直接輸出,意味單引號中的內容會直接輸出,不做變量值的替換。
PS C:\> $myStr="this is string variables" PS C:\> $youStr="your want to display the $myStr" PS C:\> $youStr your want to display the this is string variables
注意上邊的變量的定義使用的雙引號,變量$youStr 中的變量 $myStr 會替換為其所代表的值,意味着雙引號中的變量名在會替換為變量所代表的值。
如果需要在雙引號表示的變量中輸出變量名,即 $youStr="your want to display the $myStr" 你不想讓變量 $youStr 中的 $myStr 發生替換,則需要在變量名之前添加英文符號倒引號"`"進行轉義,在英文輸入狀態下,這個鍵位於"Esc"鍵的下面,注意下面命令的輸出內容。
PS C:\> $myStr="this is string variables" PS C:\> $youStr="your want to display the `$myStr" PS C:\> $youStr your want to display the $myStr
變量的保存
用戶創建的變量只在當前會話中可用,關閉會話(當前命令窗口)變量將丟失。如果需要保存變量,就需要將其保存在配置文件中,配置文件中的變量將在命令窗口打開時自動加載,將會添加所有的會話中。
可以在命令行輸入 $profile 來查看配置文件的路徑。
例如,如果需要修改 $VerbosePreference 變量的值為 "Continue" (默認是"SilentlyContinue"),可以再命令行輸入 $profile 找到配置文件的路徑,通過Notepad等文本編輯器進行修改,或是利用 Add-Content 進行修改。
以下命令將 $VerbosePreference 變量的新值添加到"CurrentUser,AllHosts"配置文件中
add-content -path $profile.CurrentUserAllHosts -value '$VerbosePreference = "Continue"'
包含特殊字符的變量名稱
如果變量中包含特殊字符,可以使用大括號{} 強制Powershell按字面解釋變量名稱,如果要定義或是引用包含特殊字符(如短划線,句點,冒號,圓括號)的變量,這會非常有用。
PS C:\> ${this is string array}="a","b","c" PS C:\> ${this is string array} a b c
以上命令定義了的變量名是 ${this is string array}。
如要引用的變量名稱包含圓括號,用大括號將變量名稱括起來
PS C:\> Get-ChildItem ${env:ProgramFiles(x86)} 目錄: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012-8-7 11:40 Documents and Settings d---- 2016-10-29 21:35 DTLFolder ...
如果要引用變量名稱包含大括號,用大括號將變量名稱括起來,變量內部的大括號之前添加倒引號"`"字符轉義大括號,倒引號是在引文輸入狀態下,鍵盤上"Esc"下面的按鍵,這個類似於上文講到的如果在雙引號中不想對變量名稱替換為值時添加的倒引號。
PS C:\> ${this`{value`}is} = 1 PS C:\> ${this`{value`}is} 1
總結
關於變量,需要注意的是,Powershell中的變量可以使用特殊字符,另外Powershell中的變量可以存儲任何類型的對象,整數,字符串,數組,哈希表,服務,進程,事件日志等,即可以將任何一條命令的執行結果賦值給一個變量。最后,在定義變量時,不能定義與內置變量名稱一樣的變量,因為內置變量是只讀,不允許用戶更改,會在Powershell的內置變量中講到Powershell中都包含哪些內置變量。