Vous savez comment si vous êtes l'utilisateur administratif d'un système et vous pouvez simplement cliquer avec le bouton droit sur, un script de commandes et l'exécuter en tant qu'administrateur sans entrer le mot de passe administrateur?
Je me demande comment faire cela avec un script PowerShell. Je ne veux pas avoir à saisir mon mot de passe; Je veux simplement imiter la méthode Exécuter en tant qu'administrateur avec un clic droit .
Tout ce que j'ai lu jusqu'à présent vous oblige à fournir le mot de passe administrateur.
powershell
administrator
chrips
la source
la source
gsudo
. Un sudo open-source gratuit pour Windows qui permet de s'exécuter en tant qu'administrateur à partir de la ligne de commande. Une fenêtre contextuelle UAC apparaît.Réponses:
Si la console actuelle n'est pas élevée et que l'opération que vous essayez de faire nécessite des privilèges élevés, vous pouvez démarrer PowerShell avec l' Run as administratoroption:
la source
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>"
;)Win
+X
Tel que discuté iciVoici un ajout à la suggestion de Shay Levi (ajoutez simplement ces lignes au début d'un script):
Il en résulte que le script actuel est transmis à un nouveau processus PowerShell en mode Administrateur (si l'utilisateur actuel a accès au mode Administrateur et que le script n'est pas lancé en tant qu'administrateur).
la source
if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
if
déclaration et de mettre unthrow
à l'intérieur du bloc d'alors.if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
[Security.Principal.WindowsBuiltInRole]::Administrator)
) devrait être préférée à l'argument chaîne"Administrator"
- J'ai rencontré des environnements renforcés de sécurité avec des rôles intégrés renommésScript PowerShell à élévation automatique
Windows 8.1 / PowerShell 4.0 +
Une ligne :)
la source
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
Benjamin Armstrong a publié un excellent article sur les scripts PowerShell auto-élévateurs . Il y a quelques problèmes mineurs avec son code; une version modifiée basée sur les correctifs suggérés dans le commentaire est ci-dessous.
Fondamentalement, il obtient l'identité associée au processus en cours, vérifie s'il s'agit d'un administrateur et, dans le cas contraire, crée un nouveau processus PowerShell avec des privilèges d'administrateur et met fin à l'ancien processus.
la source
$newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
Vous pouvez créer un fichier de commandes (
*.bat
) qui exécute votre script PowerShell avec des privilèges administratifs lorsque vous double-cliquez dessus. De cette façon, vous n'avez pas besoin de modifier quoi que ce soit dans votre script powershell . Pour ce faire, créez un fichier de commandes avec le même nom et l'emplacement de votre script powershell, puis mettez-y le contenu suivant:C'est tout!
Voici l'explication:
En supposant que votre script PowerShell se trouve dans le chemin
C:\Temp\ScriptTest.ps1
, votre fichier de commandes doit avoir le cheminC:\Temp\ScriptTest.bat
. Lorsque quelqu'un exécute ce fichier de commandes, les étapes suivantes se produisent:Le cmd exécutera la commande
Une nouvelle session Powershell s'ouvrira et la commande suivante sera exécutée:
Une autre nouvelle session PowerShell avec des privilèges administratifs s'ouvrira dans le
system32
dossier et les arguments suivants lui seront transmis:La commande suivante sera exécutée avec des privilèges administratifs:
Une fois que le chemin du script et les arguments de nom sont entre guillemets, ils peuvent contenir des espaces ou des guillemets simples (
'
).Le dossier actuel passera de
system32
àC:\Temp
et le scriptScriptTest.ps1
sera exécuté. Une fois le paramètre-NoExit
passé, la fenêtre ne sera pas fermée, même si votre script powershell lève une exception.la source
sudo
commande et en configurant l'utilisateur que vous utilisez pour le processus automatisé avecNOPASSWD: ALL
dans lesudoers
fichier .Voici un extrait auto-élévateur pour les scripts Powershell qui préserve le répertoire de travail :
La conservation du répertoire de travail est importante pour les scripts qui effectuent des opérations relatives au chemin. Presque toutes les autres réponses ne conservent pas ce chemin, ce qui peut provoquer des erreurs inattendues dans le reste du script.
Si vous préférez ne pas utiliser un script / extrait de code auto-élévateur, et que vous souhaitez plutôt simplement un moyen facile de lancer un script en tant qu'administrateur (par exemple, à partir du menu contextuel de l'Explorateur), consultez mon autre réponse ici: https: // stackoverflow .com / a / 57033941/2441655
la source
En utilisant
#Requires -RunAsAdministrator
n'a pas encore été déclaré. Il ne semble y être que depuis PowerShell 4.0.
http://technet.microsoft.com/en-us/library/hh847765.aspx
Pour moi, cela semble être une bonne façon de procéder, mais je ne suis pas encore sûr de l'expérience sur le terrain. Les runtimes PowerShell 3.0 ignorent probablement cela, ou pire encore, donnent une erreur.
Lorsque le script est exécuté en tant que non-administrateur, l'erreur suivante s'affiche:
la source
Parameter RunAsAdministrator requires an argument
. @akauppi Je ne suis pas convaincu qu'ils pensent toujours.Vous pouvez facilement ajouter des entrées de registre pour obtenir un menu contextuel "Exécuter en tant qu'administrateur" pour les
.ps1
fichiers:(mis à jour vers un script plus simple de @Shay)
Fondamentalement,
HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
définissez la valeur par défaut pour appeler le script à l'aide de Powershell.la source
(default)
partie?"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
Le code affiché par Jonathan et Shay Levy n'a pas fonctionné pour moi.
Veuillez trouver le code de travail ci-dessous:
la source
Vous devez réexécuter le script avec des privilèges administratifs et vérifier si le script a été lancé dans ce mode. Ci-dessous, j'ai écrit un script qui a deux fonctions: DoElevatedOperations et DoStandardOperations . Vous devez placer votre code qui nécessite des droits d'administrateur dans le premier et des opérations standard dans le second. La variable IsRunAsAdmin est utilisée pour identifier le mode administrateur.
Mon code est un extrait simplifié du script Microsoft qui est généré automatiquement lorsque vous créez un package d'application pour les applications du Windows Store.
la source
Ajout de mes 2 cents. Ma version simple basée sur une session Internet qui fonctionne jusqu'à présent sous Windows 7 / Windows 10. Pourquoi la compliquer trop?
ajoutez simplement en haut du script et il fonctionnera en tant qu'administrateur.
la source
if (!(net session 2>&1 | Out-Null)) { ...
@ycomp... } else { echo "your message" }
.cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
, vous pouvez le définir surbypass
Maisbypass
peut être dangereux. Réglez-leAllSigned
Ce comportement est inhérent à conception. Il existe plusieurs couches de sécurité, car Microsoft ne voulait vraiment pas que les fichiers .ps1 soient le dernier virus de messagerie. Certaines personnes trouvent cela contraire à la notion même d'automatisation des tâches, ce qui est juste. Le modèle de sécurité Vista + consiste à "désautomatiser" les choses, permettant ainsi à l'utilisateur de les accepter.
Cependant, je soupçonne que si vous lancez PowerShell lui-même comme élevé, il devrait être capable d'exécuter des fichiers batch sans demander à nouveau le mot de passe jusqu'à ce que vous fermiez PowerShell.
la source
Vous pouvez également forcer l'application à s'ouvrir en tant qu'administrateur, si vous avez un compte administrateur, bien sûr.
Recherchez le fichier, cliquez avec le bouton droit> propriétés> Raccourci> Avancé et cochez Exécuter en tant qu'administrateur
Cliquez ensuite sur OK.
la source
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
est l'endroit où réside le raccourci de PowerShell. Il va aussi toujours à un emplacement différent pour invoquer le «exe» réel (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
).Étant donné que PowerShell est piloté par le profil utilisateur lorsque les autorisations sont concernées; si votre nom d'utilisateur / profil est autorisé à faire quelque chose, alors sous ce profil, dans PowerShell, vous pourrez généralement le faire également. Cela étant dit, il serait logique que vous modifiiez le raccourci situé sous votre profil utilisateur, par exemple
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
,.Cliquez avec le bouton droit et cliquez sur Propriétés. Cliquez sur le bouton "Avancé" sous l'onglet "Raccourci" situé juste en dessous du champ de texte "Commentaires" adjacent à la droite de deux autres boutons, "Ouvrir l'emplacement du fichier" et "Changer d'icône", respectivement.
Cochez la case "Exécuter en tant qu'administrateur". Cliquez sur OK, puis Applyet OK. Une fois de plus, cliquez avec le bouton droit sur l'icône intitulée «Windows PowerShell» située dans
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
et sélectionnez «Épingler au menu Démarrer / barre des tâches».Désormais, chaque fois que vous cliquez sur cette icône, il invoque l' UAC pour l'escalade. Après avoir sélectionné «OUI», vous remarquerez que la console PowerShell est ouverte et elle sera étiquetée «Administrateur» en haut de l'écran.
Pour aller plus loin ... vous pouvez cliquer avec le bouton droit sur le même raccourci d'icône dans votre emplacement de profil de Windows PowerShell et attribuer un raccourci clavier qui fera exactement la même chose que si vous avez cliqué sur l'icône récemment ajoutée. Donc, là où il est dit "touche de raccourci", mettez une combinaison clavier / bouton comme: Ctrl+ Alt+ P P(pour PowerShell) . Cliquez sur Applyet OK.
Maintenant, tout ce que vous avez à faire est d'appuyer sur la combinaison de boutons que vous avez affectée et vous verrez l'UAC être invoqué, et après avoir sélectionné 'OUI', vous verrez une console PowerShell apparaître et "Administrateur" affiché dans la barre de titre.
la source
J'ai trouvé un moyen de le faire ...
Créez un fichier batch pour ouvrir votre script:
Créez ensuite un raccourci, par exemple sur votre bureau (cliquez avec le bouton droit sur Nouveau -> Raccourci ).
Collez-le ensuite dans l'emplacement:
Lors de la première ouverture, vous devrez saisir votre mot de passe une fois. Cela l'enregistrera ensuite dans le gestionnaire d'informations d'identification Windows.
Après cela, vous devriez pouvoir exécuter en tant qu'administrateur sans avoir à entrer un nom d'utilisateur ou un mot de passe administrateur.
la source
Le problème avec les réponses @pgk et @Andrew Odri , c'est quand vous avez des paramètres de script, spécialement quand ils sont obligatoires. Vous pouvez résoudre ce problème en utilisant l'approche suivante:
Voici comment serait le code si le script avait les paramètres obligatoires ComputerName et Port :
la source
Un certain nombre de réponses ici sont proches, mais un peu plus de travail que nécessaire.
Créez un raccourci vers votre script et configurez-le sur "Exécuter en tant qu'administrateur":
Properties...
Target
de<script-path>
àpowershell <script-path>
Run as administrator
la source
Une autre solution plus simple est que vous pouvez également cliquer avec le bouton droit sur "C: \ Windows \ System32 \ cmd.exe" et choisir "Exécuter en tant qu'administrateur", puis vous pouvez exécuter n'importe quelle application en tant qu'administrateur sans fournir de mot de passe.
la source
J'utilise la solution ci-dessous. Il gère stdout / stderr via la fonction de transcription et transmet le code de sortie correctement au processus parent. Vous devez ajuster le chemin de transcription / nom de fichier.
la source
Voici comment exécuter une commande PowerShell élevée et collecter son formulaire de sortie dans un fichier batch Windows dans une seule commande (c'est-à-dire sans écrire un script PowerShell PS1).
Ci-dessus, vous voyez que je lance d'abord un PowerShell avec une invite élevée et que je demande ensuite de lancer un autre PowerShell (sous-shell) pour exécuter la commande.
la source
En plus de la réponse de Shay Levy, suivez la configuration ci-dessous (une seule fois)
PATH
dossiers, par exemple. Dossier Windows \ System32Après la configuration:
powershell Start-Process powershell -Verb runAs <ps1_file>
Vous pouvez maintenant tout exécuter sur une seule ligne de commande. Ce qui précède fonctionne sur Windows 8 Basic 64 bits.
la source
Le moyen le plus fiable que j'ai trouvé est de l'envelopper dans un fichier .bat auto-élévateur:
Le .bat vérifie si vous êtes déjà administrateur et relance le script en tant qu'administrateur si nécessaire. Il empêche également l'ouverture de fenêtres "cmd" superflues avec le 4ème paramètre
ShellExecute()
défini sur0
.la source
EXIT
en aGOTO :EOF
et supprimé le second. De plus, lecd %~dp0
devrait êtrecd /d %~dp0
ET placé la première commande après le@echo off
. De cette façon, vous n'avez pas besoin du chemin absolu.ps1
non plus, placez-le simplement dans le même dossier que le.bat
. Si vous avez besoin de voir le résultat, changez le 4ème paramètre en1
.mshta
commande?cmd
processus d' appel afin de ne pas le "réparer", mais je suis heureux que vous ayez pu le modifier en fonction de vos besoins.cmd
(je ne l'ai pas fait). Mais en ce qui concerne les autres changements, je pense que ce sont des correctifs car ma version fonctionnerait pour nous deux alors que la vôtre ne l'est pas pour moi, c'est-à-dire la mienne plus générale (abordez le scénario des différents lecteurs). Quoi qu'il en soit, une approche très intelligente.Je n'ai jamais vu ma propre façon de le faire auparavant, alors essayez-le. Il est beaucoup plus facile à suivre et a une empreinte beaucoup plus petite:
Très simplement, si la session Powershell en cours a été appelée avec des privilèges d'administrateur, le SID bien connu du groupe administrateur apparaîtra dans les groupes lorsque vous récupérerez l'identité actuelle. Même si le compte est membre de ce groupe, le SID n'apparaîtra que si le processus a été appelé avec des informations d'identification élevées.
Presque toutes ces réponses sont une variation de la méthode extrêmement populaire de Ben Armstrong de Microsoft pour savoir comment l'accomplir tout en ne saisissant pas vraiment ce qu'elle fait réellement et comment émuler la même routine.
la source
Pour ajouter la sortie de la commande à un nom de fichier texte qui inclut la date actuelle, vous pouvez faire quelque chose comme ceci:
la source
Ceci est une clarification ...
Le justificatif d'identité RUNAS / SAVECRED powershell "n'est pas sûr", l'a essayé et il ajoute l'identité d'administrateur et le mot de passe dans le cache des justificatifs d'identité et peut être utilisé ailleurs OOPS !. Si vous avez fait cela, je vous suggère de vérifier et de supprimer l'entrée.
Passez en revue votre programme ou votre code car la politique de Microsoft est que vous ne pouvez pas avoir de code utilisateur et administrateur mélangés dans le même blob de code sans l'UAC (le point d'entrée) pour exécuter le programme en tant qu'administrateur. Ce serait sudo (même chose) sous Linux.
L'UAC a 3 types, dont ne pas voir, une invite ou un point d'entrée généré dans le manifeste du programme. Il n'élève pas le programme, donc s'il n'y a pas d'UAC et qu'il a besoin d'un administrateur, il échouera. L'UAC bien qu'en tant qu'exigence d'administrateur soit bonne, elle empêche l'exécution de code sans authentification et empêche le scénario de codes mixtes de s'exécuter au niveau de l'utilisateur.
la source
Il s'avère que c'était trop facile. Tout ce que vous avez à faire est d'exécuter un cmd en tant qu'administrateur. Tapez ensuite
explorer.exe
et appuyez sur Entrée. Cela ouvre l' Explorateur Windows . Maintenant, faites un clic droit sur votre script PowerShell que vous souhaitez exécuter, choisissez "exécuter avec PowerShell" qui le lancera dans PowerShell en mode administrateur.Il peut vous demander d'activer la stratégie, tapez Y et appuyez sur Entrée. Maintenant, le script s'exécutera dans PowerShell en tant qu'administrateur. Dans le cas où il est tout rouge, cela signifie que votre stratégie n'a pas encore pris effet. Réessayez ensuite et cela devrait fonctionner correctement.
la source