使用管理员权限重新启动powershell并继续使用当前脚本

时间:2017-06-21 06:54:14

标签: powershell

我正在尝试检查powershell是否具有管理员权限。这很简单,工作正常但我的问题是PowerShell在打开新实例后不会在脚本的新实例中继续。新实例在System32中运行。

新实例只显示:PS C:\windows\system32>

是否也可以关闭第二个实例启动后运行的第一个实例?

function checkRights {
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
    if(!$princ.IsInRole( `
    [System.Security.Principal.WindowsBuiltInRole]::Administrator))
   {
     $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
     $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
     $installPath = $MyInvocation.MyCommand.Path
     $script = $installPath
     $prm = $script
   foreach($a in $args) {
      $prm += ' ' + $a
   }
      $psi.Arguments = $prm
      $psi.Verb = "runas"
  [System.Diagnostics.Process]::Start($psi) | Out-Null
   return;
  }
}

2 个答案:

答案 0 :(得分:1)

此代码片段在新的PowerShell进程中运行相同的脚本并退出旧的shell.myinvocation(从函数调用时)必须使用脚本作用并添加退出函数调用:-):

     function checkRights() {
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
    if(!$princ.IsInRole( `
    [System.Security.Principal.WindowsBuiltInRole]::Administrator))
   {
     $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
     $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
      $psi.Arguments = '-file ' + $script:MyInvocation.MyCommand.Path
      $psi.Verb = "runas"
  [System.Diagnostics.Process]::Start($psi) | Out-Null
   return $false
  }
  else{
  return $true
  }
}
$rights = checkrights
$rights
if($rights){
"opened in admin rights"
#for pausing
Read-Host

}else
{
"no admin rights ,trying to open in admin rights"
[Environment]::Exit(0)
}

答案 1 :(得分:1)

不太清楚你想要什么,但据我所知(恕我直言):

1)你可以杀死迟早跑的进程

BaseActivity

2)你可以使用param:

  

WorkingDirectory

此参数将在新位置运行PS:

((BaseActivity)getActivity()).yourTextView.setText("HOME");