Buenas,
He progresado, pero poco.
localicé este batch que parece que servía:
REM .bat con permisos de administrador
:-------------------------------------
REM --> Analizando los permisos
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)
REM --> Si hay error es que no hay permisos de administrador.
if '%errorlevel%' NEQ '0' (
echo Solicitando permisos de administrador... Requesting administrative privileges... Anfordern Administratorrechte ...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
REM INCLUYE AQUÍ TU CÓDIGO DEL FICHERO
::/Programa a Ejecutar
netsh interface set interface "WI-FI" enabled
pause
EXIT
Al final, y después de tanto código, creo que lo que hace es lo mismo que un runas /user:administrador. Es decir, para este viaje no hacían falta alforjas.
Eso sí, en un equipo que ya tiene permisos de administrador, no me pide elevación a la hora de ejecutar el script y me activa la WIFI.
En un equipo que no los tiene, me pide usuario y pass. La duda es si me lo pedirá en un equipo que tenga la UAC deshabilitada.
Imagino que la elevación a administrador se realiza aqui:
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
pero no tengo ni idea de para qué crea el script getadmin.vbs y si realmente sirve de algo.
Por otro lado he probado este otro script:
Rem Definiciones
Dim objShell, RegLocate, RegLocate1
Const EWX_LOGOFF = 0
Rem Librerias
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Wscript.Shell")
On Error Resume Next
Rem Cambia el valor del DWORD (Clave del registro)
RegLocate = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{XXXXXXXXXXXXXXXXXXXXXXXX}\RegistrationEnabled"
objShell.RegWrite RegLocate,"0","REG_DWORD"
Rem Advierte del deslogeo
intReturn = objShell.Popup("Se va a cerrar la sesion para guardar los cambios, presione aceptar", _
20, "Auto LogOff", wshYesNoDialog + wshQuestionMark)
If intReturn = wshYes Then
For Each objPC In GetObject("winmgmts:{(shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
objPC.Win32Shutdown LOGOFF + FORCE
Next
ElseIf intReturn = wshNo Then
wscript.Quit
Else
Rem Si no responde se forza el deslogeo
For Each objPC In GetObject("winmgmts:{(shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
objPC.Win32Shutdown LOGOFF + FORCE
Next
End If
WScript.Quit (0) ' Detiene el Script y sale.
Este es peor. También requiere de elevación pero además no debe ser la clave de registro correcta ya que ni reiniciando ni cerrando sesión consigo activar o desactivar la WIFI.
Este segundo script hacía su trabajo perfectamente en un Windows XP. Es decir, no llegaba a pedir en ningún momento credenciales de administrador.
No sé si con esta nueva información me podréis ayudar
Saludos