我正在从一个提升的PowerShell会话运行以下内容:Start-Process .\file.bat -Verb RunAs -Wait它在打开 bat 文件,但不是以管理员的身份打开的。有没有更好的办法?
Start-Process .\file.bat -Verb RunAs -Wait
fgw7neuy1#
*从提升的进程 * 启动的子进程本身也是提升的。
$LASTEXITCODE
# From an already elevated session, invoking a batch file will run # it elevated too. .\file.bat
-Verb RunAs
Start-Process
cmd.exe
-FilePath cmd.exe
-FilePath .\file.bat
powershell.exe
C:\Windows\System32
-WorkingDirectory
pwsh.exe
换句话说:
你的方法可以简化,但它应该工作。
net session
net session >NUL 2>&1 && echo ELEVATED || echo NON-elevated
Administrator:
Start-Process -Verb RunAs
# Note: The batch file's *full path* must be passed, because # the elevated process' working dir will be C:\Windows\System32 # if the caller is non-elevated. Start-Process -Verb RunAs cmd.exe "/c `"$(Convert-Path .\file.bat)`""
khbbv19g2#
你可以试试这样的方法:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $arguments = "& '" + $myinvocation.mycommand.definition + "'" Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments break } Start-Process .\file.bat -Verb RunAs -Wait
如果脚本在没有管理权限的情况下运行,则将显示提升表单。用户在弹出窗口中单击“是”后,您的文件将以管理员权限重新打开
6kkfgxo03#
好吧,我无法得到任何东西运行时,管理员打开一个新窗口。我没有意识到我可以在同一个PowerShell会话中运行它,所以我把它改为只运行:.\file.bat这就是我想要的
.\file.bat
3条答案
按热度按时间fgw7neuy1#
*从提升的进程 * 启动的子进程本身也是提升的。
$LASTEXITCODE
中:-Verb RunAs
是隐含的,可以省略;* 否 * 无论哪种方式都显示UAC对话框)。Start-Process
-Verb RunAs
方法是 * 需要的**,并且运行批处理文件的提升cmd.exe
进程在 * 新窗口中运行。创建提升的
cmd.exe
进程时*注意 * re * 工作目录(无论是直接使用-FilePath cmd.exe
,还是间接使用,例如-FilePath .\file.bat
)或**powershell.exe
进程(Windows PowerShell)**:C:\Windows\System32
,而不管调用者的工作目录如何,也不管任何-WorkingDirectory
参数如何,该参数被 * 忽略 *。pwsh.exe
,PowerShell (Core) 7+ CLI - do 继承调用者的工作目录。换句话说:
你的方法可以简化,但它应该工作。
net session
只能从 elevated 进程成功调用的事实):Administrator:
开头 * 并不是 * 会话是否提升的可靠指标。Start-Process -Verb RunAs
* 直接调用 * 批处理文件 * 不会 * 导致标题前缀出现,即使结果cmd.exe
进程 * 被 * 提升(使用上面的命令进行验证)。cmd.exe
* 调用 * 时,你才能看到前缀,你可以按照下面的方法来做(但请注意,它没有 * 功能 * 差异):khbbv19g2#
你可以试试这样的方法:
如果脚本在没有管理权限的情况下运行,则将显示提升表单。用户在弹出窗口中单击“是”后,您的文件将以管理员权限重新打开
6kkfgxo03#
好吧,我无法得到任何东西运行时,管理员打开一个新窗口。我没有意识到我可以在同一个PowerShell会话中运行它,所以我把它改为只运行:
.\file.bat
这就是我想要的