提升Powershell脚本

11 permissions powershell scripting

是否可以提升powershell脚本的权限,以便没有管理员权限的用户可以运行脚本?我们的网络管理员正在尝试找到更多时间有效的方法来完成某些任务,现在他们必须使用远程桌面...使用PS脚本自动化它们会有所帮助,但用户没有管理员权限.

Jay*_*kul 8

任务更像是setuid而不是sudo ...幸运的是,setuid 可能的:你可以简单地创建一个计划任务(没有设置计划),并将其设置为提升运行.然后,授予用户执行该任务的权限.我之前在博客文章中概述了该过程以及PowerShell脚本,以帮助创建运行它们的任务和快捷方式.

问题(正如JaredPar建议的那样)是您必须确保您计划运行的应用程序升级或"以管理员身份"受到保护,如果您要运行脚本,则尤其如此.确保没有人,但管理员可以编辑或替换该脚本,或者您正在向王国赠送众所周知的密钥.

  • 死链接。Internet Archive *激活!* https://web.archive.org/web/20110821152558/http://huddledmasses.org/vista-setuid-how-to-elevate-without-prompting/ (2认同)

And*_*der 6

如果您使用的是V2,则可以使用PowerShell团队博客以下内容

Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "Get-Process"'
Run Code Online (Sandbox Code Playgroud)

这将以管理员身份运行"Get-Process".

如果你没有V2,你可以创建一个StartInfo对象并将Verb设置为Runas.

function Start-Proc  {   
     param ([string]$exe = $(Throw "An executable must be specified"),[string]$arguments)       

     # Build Startinfo and set options according to parameters  
     $startinfo = new-object System.Diagnostics.ProcessStartInfo   
     $startinfo.FileName = $exe  
     $startinfo.Arguments = $arguments  
     $startinfo.verb = "RunAs"  
     $process = [System.Diagnostics.Process]::Start($startinfo)  

}
Run Code Online (Sandbox Code Playgroud)

有一篇博文,讲述了使用System.Diagnostics.ProcessStartInfo对象的更多信息.