[英]PowerShell - Restore directory of script location while being ran as administrator
我的情況:我必須以管理員身份運行 PowerShell 腳本(因為訪問特權文件夾),並且我的腳本還引用與腳本相同目錄中的文件。 我需要使用相對文件路徑,但由於 PowerShell 以管理員身份運行時將目錄切換到C:\\WINDOWS\\system32
,我無法使用。
在PowerShell中,有沒有辦法將目錄恢復到腳本所在的當前目錄?
我的腳本:(將以管理員身份運行)
Copy-Item -Path .\file1.txt -Destination 'C:\Users\privileged_folder'
目錄結構:
MyDir\
file1.txt
myscript.ps1 <- ran as admin
在您的腳本中,您可以將位置設置為腳本文件夾。 在您的腳本中,以下任一技術都將起作用:
# PowerShell 3+
cd $PSScriptRoot
# PowerShell 2
cd ( Split-Path -Parent $MyInvocation.MyCommand.Definition )
更改為$PSScriptRoot
適用於所有當前支持的 PowerShell 版本,但如果您出於某種原因仍有節點運行 PowerShell 2,則使用Split-Path
獲取腳本目錄很有用。
如果你想在你的腳本執行完成后改回上一個目錄(可能是一個很好的舉動),你也可以使用Push-Location
和Pop-Location
而不是cd
或Set-Location
:
# Also aliased to pushd
Push-Location $PSScriptRoot
# My script stuff
# Also aliased to popd
Pop-Location
這兩個 cmdlet 將位置視為堆棧 - Push-Location
更改您的位置並將目錄添加到位置堆棧,而Pop-Location
將從堆棧中刪除當前目錄並將您返回到前一個位置。 它的工作原理很像數組上的 push 和 pop 操作。
您還可以在腳本中使用$PSScriptRoot
或( Split-Path -Parent $MyInvocation.MyCommand.Definition )
作為相對路徑的前綴,如上一節所示。 如果我們將前綴附加到file1.txt
相對路徑:
$filepath1 = "${PSScriptRoot}\file1.txt"
現在您有了file1.txt
的絕對路徑。 請注意,此技術適用於$PSScriptRoot
任何相對路徑,它不必與ps1
腳本位於同一文件夾中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.