我正在尝试检查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;
}
}
答案 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");