Windows PowerShell 係處理物件。Windows PowerShell 允許您建立基本上屬於具名物件的變數,以保存輸出供稍後使用。若您曾在其他殼層中使用過變數,務請記得 Windows PowerShell 變數是物件而非文字。
變數一律指定成以 $ 字元開頭,且名稱中可包含任何英數字元或底線。
建立變數
輸入有效的變數名稱即可建立變數:
PS> $loc PS>
此命令不會傳回任何結果,因為 $loc 並未包含值。您可透過單一步驟同時建立變數並指定其值。如果變數不存在,Windows PowerShell 才會建立該變數;否則便會將指定的值指定給現有的變數。若要將您的目前位置儲存至 $loc 變數,請輸入:
$loc = Get-Location
輸入此命令後不會顯示任何輸出,因為輸出已傳送到 $loc。Windows PowerShell 會顯示輸出其實是因未被導向的資料始終傳送到螢幕上所致。輸入 $loc 將顯示您的目前位置:
PS> $loc Path ---- C:\temp
您可以使用 Get-Member 顯示變數的內容相關資訊。將 $loc 傳送給 Get-Member 便可看到此變數是 PathInfo 物件,就跟 Get-Location 的輸出一樣:
PS> $loc | Get-Member -MemberType Property TypeName: System.Management.Automation.PathInfo Name MemberType Definition ---- ---------- ---------- Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property System.String Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {... ProviderPath Property System.String ProviderPath {get;}
操控變數
Windows PowerShell 提供了幾個用於操控變數的命令。如需查閱完整的易讀格式列表,請輸入:
Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap
除了您在目前的 Windows PowerShell 工作階段中建立的變數之外,還有一些系統定義的變數。您可以使用 Remove-Variable Cmdlet 移除所有不是由 Windows PowerShell 控制的變數。輸入下列命令將移除所有的變數:
Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
這會產生如下的確認提示。
Confirm Are you sure you want to perform this action? Performing operation "Remove Variable" on Target "Name: Error". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):A
若您接著執行 Get-Variable Cmdlet,就會看到只剩下 Windows PowerShell 變數。由於還有一個變數代表 Windows PowerShell 磁碟機,輸入下列命令亦可顯示所有的 Windows PowerShell 變數:
Get-ChildItem variable:
使用 Cmd.exe 變數
Windows PowerShell 雖然不是 Cmd.exe,卻執行於 Windows 命令殼層環境,並可使用 Windows 中任何環境所提供的變數。這些變數是透過名稱為 env: 的磁碟機所公開。輸入下列命令即可檢視這些變數:
Get-ChildItem env:
儘管標準變數 Cmdlet 並非設計用於存取 env: 變數,您仍可指定 env: 字首以取用這些變數。例如,若要查看作業系統根目錄,您可在 Windows PowerShell 中使用命令殼層變數 %SystemRoot% 變數,如下所示:
PS> $env:SystemRoot C:\WINDOWS
您也可以在 Windows PowerShell 中建立和修改環境變數。從 Windows PowerShell 存取的環境變數必須遵守 Windows 環境變數通則。