我正在尝试创建一个 PS1 脚本来重新启动计算机中的服务,该计算机中的用户没有管理员权限,因此我尝试以管理员身份执行,现在我首先尝试打开记事本,但是当我执行此脚本时:
# 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: 由于错误,无法执行此命令:目录名称 > 无效。在 C:\Users\IsaacSanzIT\Desktop\Rider\RestartScanner.ps1:13 个字符:7
我已经尝试了 StackOverflow 中其他问题中提到的方法,比如这个使用 Runas 的方法,有人知道如何执行记事本,或者甚至使用管理员帐户重新启动 aa 服务吗?谢谢!
错误消息
The directory name is invalid
意味着目标进程(默认情况下继承调用者的工作(当前)目录)无权访问该目录。Start-Process
这是使用with时的一个常见陷阱,例如以不同用户-Credential
身份启动进程时。[1]-WorkingDirectory
参数指定目标用户被允许访问的工作目录;C:\
通常是一个安全的选择。所以:
[1] 请注意,虽然管理员通常可以访问特定用户可以访问的所有目录,但这仅适用于以管理员用户身份运行的进程已被提升的情况。但是,由于
Start-Process
不允许您同时以另一个用户身份和提升权限启动进程,因此外部Start-Process
调用(使用的调用-Credential
)必须首先创建一个非提升权限的进程,并且只有在第二步中才可以以该用户身份提升权限(嵌套Start-Process -Verb RunAs
调用);有关详细信息,请参阅此答案。