gpt4 book ai didi

PowerShell - 以管理员身份运行时恢复脚本位置的目录

转载 作者:行者123 更新时间:2023-12-03 01:28:59 26 4
gpt4 key购买 nike

我的情况:
我必须以管理员身份运行 PowerShell 脚本(因为要访问特权文件夹),并且我的脚本还引用与脚本位于同一目录中的文件。我需要使用相对文件路径,但由于 PowerShell 将目录切换到 C:\WINDOWS\system32 而我不能当以管理员身份运行时。

In PowerShell, is there a way to restore the directory to the current directory that the script is located?



我的脚本: (将以管理员身份运行)
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 版本,但使用 Split-Path 如果您由于某种原因仍然有运行 PowerShell 2 的节点,则获取脚本目录很有用。

如果你想在你的脚本执行完毕后回到上一个目录(可能是一个很好的举动)你也可以使用 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将从堆栈中删除当前目录并将您返回到以前的位置。它的工作原理很像数组上的推送和弹出操作。

通过为相对路径添加前缀

您还可以在脚本中使用 $PSScriptRoot 作为相对路径的前缀或 ( Split-Path -Parent $MyInvocation.MyCommand.Definition )如上一节所示。如果我们将前缀附加到 file1.txt 的其他相对路径:
$filepath1 = "${PSScriptRoot}\file1.txt"

现在你有了一个到 file1.txt 的绝对路径。 .请注意,此技术适用于到 $PSScriptRoot 的任何相对路径。 ,它不必与您的 ps1 位于同一文件夹中脚本。

关于PowerShell - 以管理员身份运行时恢复脚本位置的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59991172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com