2016-12-08 5 views
0

Я пытаюсь использовать PowerShell для установки функции Windows (не спрашивать) как часть проекта. В консоли PowerShell я могу выполнить команду:Ошибка менеджера пакетов Nuget при вызове Get-WindowsOptionalFeature

Get-WindowsOptionalFeature -Online -FeatureName "IIS-WebServerRole" 

и он завершается успешно. Когда я затем попытаться запустить это от PM> строки в Visual Studio 2015 (работают как администратор) тогда дает мне следующую ошибку:

get-windowsoptionalfeature : An attempt was made to load a program with an incorrect format. 

At line:1 char:1 
+ get-windowsoptionalfeature -online -featurename "IIS-WebServerRole" 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Get-WindowsOptionalFeature], COMException 
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.GetWindowsOptionalFeatureCommand 

Вот мой текущий $ PSVersionTable от wihtin диспетчера пакетов.

Name       Value 
----       ----- 
PSVersion      5.1.14393.206 
PSEdition      Desktop 
PSCompatibleVersions   {1.0, 2.0, 3.0, 4.0...} 
BuildVersion     10.0.14393.206 
CLRVersion      4.0.30319.42000 
WSManStackVersion    3.0 
PSRemotingProtocolVersion  2.3 
SerializationVersion   1.1.0.1 

Я могу успешно запустить Get-Help Get-windowsoptionalfeature и он покажет синтаксис для команды. Я побежал команду в попытке поймать блока, чтобы получить исключение, вот что он вернулся:

System.Runtime.InteropServices.COMException (0x8007000B): An attempt was made to load a program with an incorrect format. 

    at System.Management.Automation.MshCommandRuntime.ThrowTerminatingError(ErrorRecord errorRecord) 

Что, если что-нибудь, я могу сделать, чтобы исправить не в состоянии использовать Get-WindowsOptionalFeature из пакета Консоль менеджера?

ответ

1

Итак, вот это вещь .. Консоль управления пакетами, в основном, работает как 32 бит процесса и появляется ваша ОС будет 64. Аналогичная ошибка here

Попробуйте выполнить команду из 32 бит, который, вероятно, находится под %windir%\System32\WindowsPowerShell\v1.0), вы получите ту же ошибку, что и в визуальной студии. Как сказал пользователь @Wendy, менеджер пакетов намерен работать с вашими пакетами nuget, а не как исполнителем powershell. Мне любопытно, почему вы хотели бы это сделать.

Если выполнение команд Powershell от визуальной студии ваша потребность, вы можете добавить Powershell скрипт для вашего решения и выполнить некоторые дополнительные шаги, как упоминалось here или просто ссылаться на него как процесс, как упоминалось here В другой стороны, Если вы хотите сделать это как часть пакета nuget, попробуйте написать свою скриптовую логику в своем сценарии установки, как указано here

+0

Я действительно упаковываю сценарий PowerShell в пакете Nuget, как описано в вашей второй ссылке, а затем устанавливаю пакет, который запускает скрипт, а затем прерывается из-за ошибок, перечисленных выше. Я загляну на другую ссылку и посмотрю, к чему это приведет. –

+1

Закончилось с помощью чего-то, что я нашел здесь: http://www.madwithpowershell.com/2015/06/64-bit-vs-32-bit-powershell.html и вызова 64-разрядной командной строки из каталога «sysnative» в скрипте. Спасибо, что указали мне в сторону проблемы с 64-м и 32-мя битками! –

-1

Согласно ввести для Package Manager Console: https://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference%20(v1.3), Пакет Консоль управления позволяет запускать сценарии PowerShell из в Visual Studio и является хоста для PowerShell основанного на NuGet команды.

Консоль диспетчера пакетов просто предоставляет справочную документацию и описания для команды PowerShell, поэтому вы не можете запустить команду PowerShell в консоли диспетчера пакетов.

+0

Я думаю, что это старая ссылка https://docs.nuget.org/ndocs/tools/powershell-reference «Консоль диспетчера пакетов предоставляет интерфейс PowerShell в Visual Studio для взаимодействия с NuGet». –

+0

В соответствии с определением Консоль диспетчера пакетов: https://docs.nuget.org/ndocs/tools/package-manager-console «Консоль диспетчера пакетов в Visual Studio позволяет использовать команды NuGet PowerShell для поиска, установки, удаления , и обновить пакеты NuGet ». Консоль диспетчера пакетов поддерживает только команды NuGet PowerShell, а не полные сценарии PowerShell в официальной документации NuGet. –