有没有办法启动与非管理员PowerShell控制台连接到同一控制台的PowerShell Admin SubShell?然后当完成类型"退出"并返回"非管理员"电源外壳。我需要一些类似于" su" linux命令。
目前,我这样做的方式会弹出一个新窗口,一段时间后就会烦恼,例如:
PS> start-process -Verb RunAs Powershell
更新
我几乎可以按照以下方式工作:
PS> start-process -nnw -wait powershell
这可以在同一控制台中打开子shell。除非我添加" -Verb RunAs"将其转换为Admin shell。它失败了。
PS C:\Users\john> start-process -nnw -wait -Verb RunAs powershell
Start-Process : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:1
+ start-process -nnw -wait -Verb RunAs powershell
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.StartProcessCommand
UPDATE2:
我从微软网页上发现了" -Verb RunAs"是不可能与-nnw一起使用..我的感觉是可以使用-Credential标志来指定管理员帐户。但是,由于我只是使用家用电脑,我不认为我有一台。提升到" RunAs"暗示您可以登录的用户帐户?我的感觉是,我需要创建一个管理员帐户来执行此操作,以便我可以获得如下凭据:
PS> Set-Alias -name su -value start-process -nnw -wait -Credential(Get-Credential -User Admin)powershell
PS>苏
????
Update2:
尝试使用.NET Api,如下所示。它可以启动子shell,但仍然没有授予子shell的管理员权限:
function su {
$s = [System.Diagnostics.ProcessStartInfo] @{}
$s.FileName = "powershell"
$s.Verb = "runas"
$s.UseShellExecute = $false
$c = [System.Diagnostics.Process] @{}
$c.StartInfo = $s
$c.Start() | out-null
$c.WaitForExit()
}
function isadmin {
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
UPDATE3:
我的结论是,对于Diagnotics.Process," Verb"参数要求UseShellExecute = $ true。因为Verb是一个提供给Windows Shell Launcher的Action。当UseShellExecute = $ false时,直接调用Execuatable,绕过Windows Shell Launcher及其动词操作。
答案 0 :(得分:1)
我认为能够做到这一点的唯一方法是编写一个C#程序,它加载PS引擎的两个独立实例,让第二个实例在不同的System.Security.Principal
下执行:(< / p>
答案 1 :(得分:0)
-RunAs与用户帐户无关,它只是用于启动具有提升权限的会话。如果允许您的用户帐户执行此操作,系统可能会提示您批准此操作。如果没有,您将被要求提供凭证。如果您刚刚使用安装操作系统时创建的帐户,则您将拥有管理员权限(考虑您安装的所有时间并显示用户访问控制对话框 - 这是请求提升权限)。
不幸的是,你不能得到“&#39; su&#39;您希望在Windows中按行为设计的行为。配置参数的方式(以便不允许您在会话中升级权限)是一种有意的安全功能。