獲取 PowerShell 指令碼的當前位置
-
使用
Split-Path
Cmdlet 獲取 PowerShell 指令碼的當前位置 -
使用
$PSScriptRoot
變數獲取 PowerShell 指令碼的當前位置 - 獲取 Windows PowerShell 中的工作目錄以獲取 PowerShell 指令碼的當前位置
每當我們需要引用一個公共模組或指令碼時,我們都希望使用相對於當前指令碼檔案的路徑。這樣,指令碼總是可以在庫中找到其他指令碼。
在本文中,我們將討論獲取正在執行的 PowerShell 指令碼的當前位置的不同方法。
使用 Split-Path
Cmdlet 獲取 PowerShell 指令碼的當前位置
在 PowerShell 3 之前,沒有更好的方法可以使用 Split-Path
cmdlet 查詢 MyInvocation.MyCommand.Definition
屬性。
Split-Path -Parent $($global:MyInvocation.MyCommand.Definition)
Split-Path
cmdlet 與 -Parent
引數一起使用以返回正在執行的指令碼的當前目錄。
值得注意的是,只有在儲存的 PowerShell (.ps1
) 檔案中包含上述語法時,這才有效。在命令列中執行上述語法將返回一個 Null
異常。
還值得注意的是,在 PowerShell 的整合指令碼環境 (ISE) 中將上述語法作為選擇執行(作為選擇執行或按 F8)將觸發 ParameterArgumentValidationErrorNullNotAllowed
或 Null 異常。
解決此問題的簡單方法是呼叫 $psISE
變數並獲取 CurrentFile.FullPath
屬性,然後你可以從那裡獲取指令碼的當前位置。請記住,在 PowerShell ISE 中進行測試時最好使用此語法。
Split-Path $psISE.CurrentFile.FullPath
使用 $PSScriptRoot
變數獲取 PowerShell 指令碼的當前位置
如果你執行的是 PowerShell 版本 3 或更高版本,則引入了一個自動變數來儲存當前檔案或模組的目錄。
$PSScriptRoot
變數返回執行指令碼的目錄值。
$PSScriptRoot
獲取 Windows PowerShell 中的工作目錄以獲取 PowerShell 指令碼的當前位置
既然我們已經討論瞭如何獲取指令碼的當前位置,那麼學習獲取指令碼的當前工作目錄並沒有什麼壞處。
在 Windows PowerShell v2 中,$ExecutionContext
變數包含 EngineIntrinsics
屬性。你可以使用此變數和屬性來查詢可用於 cmdlet 的執行物件,包括正在執行的 Windows PowerShell 指令碼的當前工作目錄。
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
但是,如果你執行的是最新版本的 Windows PowerShell,則引入了一個單獨的 cmdlet 以方便操作。我們可以使用 Get-Location
cmdlet 並呼叫 Path
屬性來獲取指令碼的當前工作目錄。
(Get-Location).Path
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn