¿Prueba los derechos de administrador dentro del script de PowerShell?
sysadmin admin-rights (5)
Aquí está directamente:
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")
¿Cuál es la forma mejor / más fácil de probar los derechos administrativos en un script de PowerShell?
Necesito escribir un script que requiera derechos administrativos y quiero saber la mejor manera de lograrlo.
Echa un vistazo a esta url: http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/11/check-for-admin-credentials-in-a-powershell-script.aspx
No lo probé pero el resumen parece indicar lo que estás buscando: "Aprende cómo verificar las credenciales administrativas cuando ejecutas un script o comando de Windows PowerShell".
En Powershell 4.0 puede usar los requires en la parte superior de su script:
#Requires -RunAsAdministrator
Salidas:
La secuencia de comandos ''MyScript.ps1'' no se puede ejecutar porque contiene una declaración "#requires" para ejecutarse como Administrador. La sesión actual de Windows PowerShell no se está ejecutando como administrador. Inicie Windows PowerShell con la opción Ejecutar como administrador y luego intente ejecutar la secuencia de comandos nuevamente.
Esta es la pequeña función que tengo en un módulo de seguridad:
function Test-IsAdmin {
try {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity
return $principal.IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator )
} catch {
throw "Failed to determine if the current user has elevated privileges. The error was: ''{0}''." -f $_
}
<#
.SYNOPSIS
Checks if the current Powershell instance is running with elevated privileges or not.
.EXAMPLE
PS C:/> Test-IsAdmin
.OUTPUTS
System.Boolean
True if the current Powershell is elevated, false if not.
#>
}
Para su información, para aquellas personas que tienen las extensiones de la comunidad de PowerShell instaladas:
PS> Test-UserGroupMembership -GroupName Administrators
True
Este cmdlet es un poco más genérico porque puede probar la pertenencia a un grupo en cualquier grupo.