簡體   English   中英

PowerShell - 以管理員身份運行時恢復腳本位置的目錄

[英]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-LocationPop-Location而不是cdSet-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM