You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无管理员权限用户如何通过PS1脚本以管理员身份启动程序/重启服务?

问题:无管理员权限下以管理员账号执行操作报错

场景与原脚本

尝试创建PowerShell脚本,在当前无管理员权限的用户环境下,以管理员账号启动记事本测试权限,但运行以下脚本时出现错误:

# Define el nombre del servicio, usuario y contraseña
$ServiceName = "ApacheDtdlIdServer"
$AdminUser = "User"
$AdminPassword = "C0ntraseña"
$startWithElevatedRights = "notepad"

# Convierte la contraseña en un SecureString
$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force

# Crea el objeto de credenciales
$credentials = New-Object System.Management.Automation.PSCredential ($AdminUser, $SecurePassword)

$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process ',  $startWithElevatedRights, ' -Wait -verb runas}'

$ps.WaitForExit()

错误信息

Start-Process: This command cannot be executed due to the error: The directory name is invalid.
At C:\Users\IsaacSanzIT\Desktop\Rider\RestartScanner.ps1: 13 Character: 7

解决方案

一、修复启动记事本的脚本

原错误原因是-ArgumentList传递了多个独立字符串,导致PowerShell将命令拆分为无效参数。需将完整命令合并为单个字符串传递:

# 定义管理员账号信息
$AdminUser = "User"
$AdminPassword = "C0ntraseña"
$startWithElevatedRights = "notepad"

# 转换密码为SecureString
$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ($AdminUser, $SecurePassword)

# 构造完整命令字符串,避免参数拆分
$command = "-noprofile -command &{Start-Process '$startWithElevatedRights' -Wait -Verb RunAs}"
$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList $command

$ps.WaitForExit()

二、直接实现重启服务的操作(更高效)

无需绕开启动记事本,可直接以管理员身份执行服务重启命令,推荐两种方式:

方式1:使用sc.exe(兼容性更强)

# 定义服务名和管理员账号信息
$ServiceName = "ApacheDtdlIdServer"
$AdminUser = "User"
$AdminPassword = "C0ntraseña"

# 转换密码为SecureString
$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ($AdminUser, $SecurePassword)

# 执行服务停止+启动命令
$command = "-noprofile -command &{sc.exe stop '$ServiceName'; sc.exe start '$ServiceName'}"
$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList $command

$ps.WaitForExit()

方式2:使用PowerShell原生Restart-Service

# 定义服务名和管理员账号信息
$ServiceName = "ApacheDtdlIdServer"
$AdminUser = "User"
$AdminPassword = "C0ntraseña"

# 转换密码为SecureString
$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ($AdminUser, $SecurePassword)

# 直接重启服务
$command = "-noprofile -command &{Restart-Service -Name '$ServiceName' -Force}"
$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList $command

$ps.WaitForExit()

注意事项

  • 确保$AdminUser账号属于本地管理员组,且拥有操作目标服务的权限
  • 明文存储密码存在安全风险,建议改用加密密码文件等安全方式传递凭证
  • 若为域账号,需将$AdminUser格式改为DOMAIN\User

内容的提问来源于stack exchange,提问作者Zenin0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:18:26