本文目录
背景
我给别人写了一个PowerShell脚本,让他运行时一定要以管理员权限运行,可是说的再清楚,他也有忘得时候。甚至有的朋友刚从XP步入Windows 7 或者 Windows 8的殿堂,对于UAC不是很清楚,更别提以管理员权限运行了。然后出错了,又来问我,他烦我也烦。
我不怪他们,我只恨我自己,我恨我自己左手一只鸡,右手一只鸭,只把“为人民服务”当作口号,挂在嘴皮子上了,从来都没有及群众之所急。我当初如果在我的脚本前面多加几行下面的代码,要节省下多少维稳经费啊。
知识点
- 自动检测当前控制台是否是以管理员权限打开,如果不是,重新打开新的控制台运行当前脚本。
- 将绑定的参数BoundParameters和非绑定的参数$args,发送给新的控制台。
脚本
param( $a, $b ) #region 关键代码:强迫以管理员权限运行 $currentWi = [Security.Principal.WindowsIdentity]::GetCurrent() $currentWp = [Security.Principal.WindowsPrincipal]$currentWi if( -not $currentWp.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { $boundPara = ($MyInvocation.BoundParameters.Keys | foreach{ '-{0} {1}' -f $_ ,$MyInvocation.BoundParameters[$_]} ) -join ' ' $currentFile = (Resolve-Path $MyInvocation.InvocationName).Path $fullPara = $boundPara + ' ' + $args -join ' ' Start-Process "$psHome\powershell.exe" -ArgumentList "$currentFile $fullPara" -verb runas return } #endregion #region 测试脚本片段 "a=$a, b=$b" ($args -join ' ') Write-Host '执行完毕,按任意键退出...' Read-Host #endregion
运行结果
PS> .\test.ps1 -a 8 -b 9 66 77 88 99 a=8, b=9 66 77 88 99 执行完毕,按任意键退出... PS>
本文链接: https://www.pstips.net/force-script-run-as-admin.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
但是没有输入管理员用户密码还是无法执行,有没有办法直接将用户名和密码带入
这段代码太复杂了,我用$MyInvocation.MyCommand.Path优化了一下,只有4行代码即可。不过无法放入到Function中,只能直接在Script下运行。
求分享
有但是如果那样你就得在脚本中硬编码用户名和密码,这不是我期望的。
提示 $MyInvocation.InvocationName 为空值
好用,优秀
感谢大神分享,昨天试了一下,如果脚本路径中有空格,就会失败,也找到问题了,弄了一天也,也没解决出来,国内外站点也查了不少,没搞定,还希望大神指点一二
Start-Process “$psHome\powershell.exe” -ArgumentList “-File ‘$currentFile’ $fullPara” -verb runas
同时,关于脚本内的密码加密,也查了不少资料,由于脚本要下放到用户中执行,脚本中有密码,其中涉及访问共享、导入文件等操作,自己也找了一下相关文章,没理出头绪,同样期待大神指示一下,当时参考的这个文章。