启动附加到启动它的Same Console的PowerShell Admin SubShell

时间:2017-12-13 16:45:29

标签: powershell admin

有没有办法启动与非管理员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及其动词操作。

2 个答案:

答案 0 :(得分:1)

我认为能够做到这一点的唯一方法是编写一个C#程序,它加载PS引擎的两个独立实例,让第二个实例在不同的System.Security.Principal下执行:(< / p>

答案 1 :(得分:0)

-RunAs与用户帐户无关,它只是用于启动具有提升权限的会话。如果允许您的用户帐户执行此操作,系统可能会提示您批准此操作。如果没有,您将被要求提供凭证。如果您刚刚使用安装操作系统时创建的帐户,则您将拥有管理员权限(考虑您安装的所有时间并显示用户访问控制对话框 - 这是请求提升权限)。

不幸的是,你不能得到“&#39; su&#39;您希望在Windows中按行为设计的行为。配置参数的方式(以便不允许您在会话中升级权限)是一种有意的安全功能。