La raison pour laquelle cela ne fonctionnera pas est qu'un script PowerShell est très différent d'un fichier batch à la fois en termes de contenu ET de la manière dont Windows (par défaut) le gérera.
Par exemple - si vous enregistrez Write-Host $ENV:COMPUTERNAME
dans un fichier PowerShell (.ps1) et que vous double-cliquez dessus - il s'ouvrira très probablement dans le Bloc-notes!
Si vous souhaitez vraiment avoir cette commande PowerShell en une seule ligne dans un fichier batch - vous voulez quelque chose comme powershell.exe -command "get-appxpackage *3dbuilder* | remove-appxpackage"
enregistré dans votre fichier batch. Vous devriez alors pouvoir cliquer avec le bouton droit et "exécuter en tant qu'administrateur" sur le fichier batch pour obtenir les effets souhaités.
À défaut de cela - si vous avez un script PowerShell .ps1 - vous pouvez l'appeler à partir d'un fichier batch en utilisant PowerShell.exe -File C:\Folder\script.ps1
et l'exécuter à partir d'une ligne de commande administrative.
Alternativement, vous devrez ouvrir PowerShell (ou ISE) en tant qu'administrateur et exécuter le script (& C:\Folder\file.ps1
)
Enfin - vous pouvez utiliser l'interrupteur -verb RunAs
pour essayer de forcer l'élévation si nécessaire lors de l'appel à PowerShell.exe ou vous pouvez utiliser le bloc de script suivant dans votre script pour provoquer une élévation de session (avec une invite UAC si nécessaire):
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
###Mon code de script va ici et sera exécuté si je suis un administrateur!
Note - vous pourriez suivre la voie horrible de reconfigurer Windows pour ouvrir les scripts PowerShell dans PowerShell et/ou ajouter un menu contextuel Windows pour exécuter PowerShell en tant qu'administrateur - mais c'est désordre et dangereux pour le moins.