2 votos

Ejecutar Script de PowerShell como Administrador en el Mismo Directorio que el Script Original

Así que al parecer no hay ninguna manera fácil de ejecutar directamente un .ps1 secuencia de comandos como administrador haciendo doble clic en él; puede modificar el registro para que se ejecute, pero, a continuación, con el fin de hacer que se ejecute como administrador, al parecer, usted tiene que decirle que abra una nueva elevación de PowerShell desde dentro de la ejecución ya PowerShell. Por desgracia, como he sido capaz de ver, cada vez que se hace esto, la elevada ventana que se abre en un directorio diferente al guión original! Así, por ejemplo, si tengo la siguiente secuencia de comandos:

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
  .\mylocalscript.ps1
  Write-Host "Just an example!"
}
else
{
  Start-Process -FilePath "powershell" -ArgumentList "-NoExit $('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Path)$('""')" -Verb runAs
}

Se produce un error porque, al ser abierto como administrador, de la escritura local, que una vez fue local en el guión original, que ya no es local, y luego no lo puede encontrar. Esencialmente, necesito una manera de decirle a la nueva elevado ventana de PowerShell que se abre para cambiar automáticamente de nuevo en el directorio de la escritura original.

¿Cuál es la mejor manera de hacer esto?

2voto

PJ Mahoney Puntos 889

Usted puede utilizar set-location con -Path $PSScriptRoot para cambiar al directorio que el script que contiene los comandos residen, y, a continuación, puede ejecutar el resto de su lógica después de que el comando para asegurarse de que se vuelve a establecer la necesaria directorio antes de los comandos a ejecutar.

Set-Location -Path $PSScriptRoot

Más Recursos

  • Set-Location
  • Las Variables Automáticas

    • $PSScriptRoot

      Contiene el directorio desde el cual el módulo de secuencia de comandos se ejecuta. Esta variable permite secuencias de comandos para utilizar la ruta de acceso del módulo para acceder a otros recursos. En PowerShell 3.0+ está disponible en todas partes, no sólo en los módulos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: