2

Я набираю это в PowerShell, работающем от имени администратора, чтобы удалить 3D Builder:

C:\Windows\System32>get-appxpackage *3dbuilder* | remove-appxpackage

Это работает нормально, но как я могу написать строку в пакетном файле, чтобы сделать то же самое?

1 ответ1

0

Причина, по которой это не будет работать, заключается в том, что сценарий PowerShell сильно отличается от командного файла как с точки зрения его содержимого, так и способа, которым окна (по умолчанию) будут его обрабатывать.

Например, если вы сохраните Write-Host $ENV:COMPUTERNAME в файл PowerShell (.ps1) и дважды щелкните по нему, скорее всего, он откроется в Блокноте!

Если вы действительно хотите поместить эту однострочную команду PowerShell в командный файл - вам нужно что-то вроде powershell.exe -command "get-appxpackage *3dbuilder* | remove-appxpackage" сохраненная в вашем командном файле. После этого вы сможете щелкнуть правой кнопкой мыши и "запустить от имени администратора" в командном файле, чтобы получить желаемые эффекты.

В противном случае - если у вас есть сценарий PowerShell .ps1 - вы можете вызвать его из командного файла с помощью PowerShell.exe -File C:\Folder\script.ps1 и запустить его из командной строки администратора.

В качестве альтернативы вам нужно будет открыть PowerShell (или ISE) от имени администратора и выполнить скрипт (& C:\Folder\file.ps1)

Наконец, вы можете использовать -verb RunAs чтобы попытаться принудительно повысить уровень при вызове PowerShell.exe, или вы можете использовать следующий блок скрипта внутри скрипта, чтобы вызвать повышение сеанса (с помощью запроса UAC, если это необходимо):

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

}
###My Script Code Goes Here and will be executed if I am an administrator!

Примечание: вы можете пойти по ужасному пути переконфигурирования окон, чтобы открыть сценарии PowerShell в PowerShell и / или добавить контекстное меню Windows для запуска в powershell от имени администратора - но это, по меньшей мере, грязно и опасно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .