Командлеты не найдены в командной строке, но доступны в ISE

Я пытаюсь создать приложение IIS и пул приложений с помощью PowerShell на виртуальной машине Windows Server 2008 R2. Сценарий powershell выглядит следующим образом:

Param(
    [string] $branchName,
    [string] $sourceFolder
)

if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole] "Administrator"))
{ 
    Write-Warning "You do not have Administrator rights to run this script.     `nPlease re-run this script as an Administrator."
    Exit
}

$appPool = $branchName
$site = "Default Web Site"

#Add APPPool
New-WebAppPool -Name $appPool -Force 

#Create Applications
New-WebApplication -Name $branchName -Site $site -PhysicalPath $sourceFolder -   ApplicationPool $appPool -Force    

Если я запускаю скрипт в PowerShell ISE, он работает нормально, но если я запускаю его из командной строки (или пакетного файла с помощью командной строки), я получаю сообщение об ошибке

Термин New-WebAppPool не распознается как имя командлета... и т. д.

Есть ли способ установить командлеты веб-администрирования в ISE, но не в командной строке?


person Adamon    schedule 18.01.2016    source источник
comment
Пожалуйста, покажите точный код, который вы используете, и точную ошибку, которую выдает этот код. Также покажите вывод $PSVersionTable.   -  person Ansgar Wiechers    schedule 18.01.2016
comment
Вероятно, вам нужно явно импортировать командлет: Import-Module WebAdministration   -  person Martin Brandl    schedule 18.01.2016


Ответы (2)


Предполагая, что вы используете PowerShell v2 (версия по умолчанию, установленная с Server 2008 R2), как и подозревал @jisaak: вам нужно явно импортировать модуль WebAdministration в свой код:

Import-Module WebAdministration

ISE, кажется, делает это автоматически.

Другим вариантом может быть обновите до PowerShell v4, который также автоматически импортирует модули, когда используется один из их экспортированных командлетов.

person Community    schedule 18.01.2016

Для всех, кто интересовался, ответ был до боли прост. Как было предложено, решение заключалось в том, чтобы импортировать модуль, но возникла проблема, заключавшаяся в том, что он был недоступен после закрытия консоли и ее повторного открытия. Чтобы решить эту проблему, мне просто нужно было добавить строку в сам powershell, чтобы он импортировал модуль при каждом выполнении.

Param(

[string] $branchName,   
[string] $sourceFolder)

if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator"))
{ 
Write-Warning "You do not have Administrator rights to run this script.`nPlease re-run this script as an Administrator."
Exit
}

$appPool = $branchName
$site = "Default Web Site"

*Import-Module WebAdministration*

#Add APPPool
New-WebAppPool -Name $appPool -Force 

 #Create Applications
New-WebApplication -Name $branchName -Site $site -PhysicalPath $sourceFolder -   ApplicationPool $appPool -Force    
person Adamon    schedule 18.01.2016