c# – 如何启动新的PowerShell实例并在其中运行命令?

这就是我想要完成的事情:我需要用户在登录计算机时自动运行powershell脚本,让脚本启动Elevated Powershell提示符(就像用户可以以管理员身份单击Run Powershell一样),然后让它在新的中运行一些命令Powershell对象,然...

这就是我想要完成的事情:

我需要用户在登录计算机时自动运行powershell脚本,让脚本启动Elevated Powershell提示符(就像用户可以以管理员身份单击Run Powershell一样),然后让它在新的中运行一些命令Powershell对象,然后关闭新的Powershell对象.

此函数当前将在Elevated模式下创建并运行新的Powershell对象.

function Set-Elevation
{
   # Create a new process object that starts PowerShell
   $newProcess = New-Object System.Diagnostics.ProcessStartInfo "powershell";
   # Indicate that the process should be elevated
   $newProcess.Verb = "runas";
   # Start the new process
   [System.Diagnostics.Process]::Start($newProcess) | Out-Null
}

但是,如何让它在那里运行新命令?之后如何关闭物体?

任何关于语法的提示都将不胜感激.

解决方法:

您可以使用内置的Start-Process命令:

function IsAdministrator
{
    $Identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $Principal = New-Object System.Security.Principal.WindowsPrincipal($Identity)
    $Principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
}

function IsUacEnabled
{
    (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System).EnableLua -ne 0
}

#
# Main script
#
if (!(IsAdministrator))
{
    if (IsUacEnabled)
    {
        [string[]]$argList = @('-NoProfile', '-NoExit', '-File', $MyInvocation.MyCommand.Path)
        $argList += $MyInvocation.BoundParameters.GetEnumerator() | Foreach {"-$($_.Key)", "$($_.Value)"}
        $argList += $MyInvocation.UnboundArguments
        Start-Process PowerShell.exe -Verb Runas -WorkingDirectory $pwd -ArgumentList $argList 
        return
    }
    else
    {
        # Log an error, do nothing or Start-Process -Credentials <admin_creds>
    }
}

本文标题为:c# – 如何启动新的PowerShell实例并在其中运行命令?

基础教程推荐