Después de mucho batallar ya hallamos la contestación de este inconveniente que agunos usuarios de nuestra web tienen. Si deseas aportar algún dato puedes aportar tu conocimiento.
Solución:
Si está utilizando Chocolatey (un administrador de paquetes), puede instalar un paquete llamado sudo
.
Entonces puedes usar sudo como Linux
si estas corriendo desde PowerShell yaluego usa Start-Process -Verb RunAs
como sigue:
Start-Process -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location `"$PWD`"; .install.ps1"
Nota:
- El script se ejecuta invariablemente en un nueva ventana.
- Dado que el directorio de trabajo de la nueva ventana es invariablemente
$env:windirSystem32
aSet-Location
llamada que cambia al directorio de trabajo de la persona que llama ($PWD
) se antepone.- Tenga en cuenta que en PowerShell (Core) 7+ (
pwsh.exe
) esto ya no es necesario, porque la ubicación actual de la persona que llama se hereda.
- Tenga en cuenta que en PowerShell (Core) 7+ (
- ejecutando
Set-Location
requiere el uso de-Command
en lugar de-File
.- En el lado positivo, esto evita la necesidad de
-nologo
. - Una advertencia general es que
-Command
puede cambiar la forma en que se interpretan los argumentos pasados a su secuencia de comandos (no hay ninguno en su caso), porque se interpretan de la misma manera que si pasara los argumentos desde PowerShell, mientras que-File
los trata como literales.
- En el lado positivo, esto evita la necesidad de
Si estás llamando desde fuera de PowerShelltípicamente de cmd.exe
/ un archivo por lotesnecesitas envolver lo anterior en un llamada exterior a powershell.exe
lo que complica las cosas en términos de citas, desafortunadamente:
powershell.exe -command "Start-Process -Verb RunAs powershell.exe -Args '-executionpolicy bypass -command', "Set-Location `"$PWD`"; .install.ps1""
Interactivamentepor supuesto que puede:
-
Haga clic con el botón derecho en el acceso directo de PowerShell (en la barra de tareas, en el menú Inicio o en el escritorio), seleccione
Run as Administrator
para abrir una ventana de PowerShell que se ejecuta con privilegios de administrador y ejecutar.install.ps1
desde allí. -
Como alternativa, desde una ventana de PowerShell existente, puede abrir una ventana de ejecución como administrador con
Start-Process -Verb RunAs powershell.exe
como en la respuesta de AdminOfThings.
Si tiene una política corporativa que bloquea la ejecución de scripts, entonces sí. ByPass no cambia el estado de su perfil (contexto de usuario). Ese no es el diseño (caso de uso) para ninguno de esos conmutadores con respecto a las políticas de ejecución.
No hay una comparación directa de sudo en Windows, esto no tiene nada que ver con PowerShell. O eres administrador en una sesión/aplicación o no lo eres. Si está instalando software, eso significa que debe ser administrador. Si está realizando cambios globales en todo el sistema, eso significa que debe ser administrador.
Hay gente que se ha esforzado por implementar secuencias de comandos, funciones de contenedor o módulos para imitar sudo…
Módulo de la galería de MS PowerShell. Sudo 0.9.3 Use una funcionalidad similar a sudo en PowerShell
Desde GitHub Sudo para PowerShell
Sudo para la instalación de PowerShell Desde PowerShell, cree un perfil de $ si no tiene uno:
if (!(test-path $profile)) new-item -path $profile -itemtype file -force
Abra el perfil en el bloc de notas:
notepad.exe $profile
Agregue la siguiente línea y guarde el archivo:
. /path/to/sudo.ps1
sudo estará disponible en todas las nuevas ventanas de PowerShell
sudo application [arguments ...]
… pero eso no cambia lo que espera Windows cuando se trata de límites de seguridad.
¡Vea también este Sudo de preguntas y respuestas! equivalente en PowerShell
$^ es una variable que se expande al último comando de Powershell ejecutado. Puede ejecutar un comando como otro usuario usando runas, por lo que funciona lo siguiente:
runas /user:domainadministrator $^
Para acortarlo un poco, puedes hacer algo de magia con los alias. Eche un vistazo a este artículo de Technet para obtener más información.
EDITAR: una advertencia: $ ^ solo ejecuta el primer comando en una tubería o línea de comando múltiple. Si necesita rehacer un comando completo que está salpicado de barras verticales o punto y coma, use Invoke-History en su lugar (que por defecto es el último comando completo en su totalidad).
Puntuaciones y comentarios
Puedes asistir nuestra ocupación exponiendo un comentario o dejando una puntuación te damos las gracias.