BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Iniciar script en modo administrador desde acceso directo

Weikis

Tengo un pequeño script que me gustaría poder iniciar con administrador nada mas darle a un acceso directo.

Ahora mismo tengo que ir a la ruta del script desde el Powershell. Lo que busco es poder desactivar la gráfica de Nvidia de las opciones de alto rendimiento y sin tener que desinstalar controladores ni nada poder ejecutarlo todo en la integrada.

Evidentemente esto se hace para ahorrar energía en batería. Y además para que ningún proceso le de por usar la dedicada.

Y que esta funciona peor que la integrada en batería por ir a frecuencias mínimas

El script en cuestión:

#Permisos lo saque de la red xD
param([switch]$Elevated) 

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'


#script 
function Menu {
        Write-Host "1 Activar GPU NVIDIA"
        Write-Host "2 Desactivar GPU NVIDIA"
    
}
Menu

while(($inp = Read-Host -Prompt "Elige una opcion") -ne "3"){
 
    switch($inp){
            1 {
                Enable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *1650* ).InstanceId -Confirm:$false
            }
            2 {
                Disable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *1650* -Status OK).InstanceId -Confirm:$false
            }

    
            3 {"Salida"; break}
            default {Write-Host -ForegroundColor red -BackgroundColor white "No hay mas opciones";pause}
            
        }
    Clear-Host
    Menu
    } `
Weikis

No hay forma de ejecutar el script. Al ejecutarlo este se cierra. Me da que tendria que desactivar medidas de seguridad que no quiero quitar por motivos mas que evidentes para esta tonteria. Gracias por la ayuda.

No se si lo que e puesto esta mal. No e necesitado modificar los permisos nunca antes en los pequeños codigos que e hecho.

#script
function Menu {
        Write-Host "1 Activar GPU NVIDIA"
        Write-Host "2 Desactivar GPU NVIDIA"
    
}
Menu

while(($inp = Read-Host -Prompt "Elige una opcion") -ne "3"){
 
    switch($inp){
            1 { 
                # Self-elevate the script if required
             if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
             if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
             $CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
             Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
             Exit
             }
            }
                Enable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *1650* ).InstanceId -Confirm:$false
            }
            2 {
                # Self-elevate the script if required
             if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
             if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
             $CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
             Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
             Exit
                Disable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *1650* -Status OK).InstanceId -Confirm:$false
            }

    
            3 {"Salida"; break}
            default {Write-Host -ForegroundColor red -BackgroundColor white "No hay mas opciones";pause}
            
        }
    Clear-Host
    Menu
    }
🗨️ 1
lhacc

Lo que tienes que hacer con el código es pegarlo arriba del todo, incluso antes de mostrar el menú.

Weikis
1

Bueno era. Sigue siendo asi pero desde que windows toco las narices en ello ya coge la grafica que segun windows funcione mejor casi siempre por defecto la dgpu si la hay.

image.webpimage.webp

Es mas facil desactivar la opcion de nvidia para que todos los procesos tiren de la igpu y punto.

El link al que referencias es de hace ya 7 8 años por ese driver de ATI renombrado a Amd Catalyst. la cosa mejoro bastante en algunas cosas con los Crimson y ahora los Adrenalin, pero se quedan un poco cojos en algunos parametros que no te dejan modificar con los nuevos driver y que con los antiguos si permitia.

Weikis
1

No entendi lo de los disparadores pero si se pudiera hacer que ejecutara el comando al estar en bateria y activarla al estar conectado a corriente tambien me valdria. Ni idea de si se puede hacer. Imagino que con algun servicio que checkee a cada rato si esta en carga o esta desconectado.

image.webp

Me autorespondo xD. Encontre una tarea programada con un servicio del lenovo Vantage tambien referenciado a un controlador de energia haceindo algo parecido

image.webp

Conseguido que active la GPU al conectarse a corriente. Ahora queda lo importante que es lo contrario

Weikis
1

Con esto se activa.

image.webpimage.webpimage.webp
🗨️ 1
vukits

¡mola!