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

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

我需要用户在登录计算机时自动运行powershell脚本,让脚本启动Elevated Powershell Prompt(就像用户可以单击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  } } 

如果您使用此自升式脚本,则可以直接在PS1中运行命令而不会有任何麻烦。

 $WID=[System.Security.Principal.WindowsIdentity]::GetCurrent(); $WIP=new-object System.Security.Principal.WindowsPrincipal($WID); $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator; If ($WIP.IsInRole($adminRole)){ }else { $newProcess = new-object System.Diagnostics.ProcessStartInfo 'PowerShell'; $newProcess.Arguments = $myInvocation.MyCommand.Definition $newProcess.Verb = 'runas' [System.Diagnostics.Process]::Start($newProcess);Write-Host 'Prompting for Elevation' exit } Write-Host 'ElevatedCodeRunsHere'; Write-Host 'Press any key to continue...' $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')