2016-01-18 4 views
2

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

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 работает нормально, но если я запускаю его из командной строки (или пакетного файла с помощью командной строки), я получаю ошибку

термин Нью-WebAppPool не распознается как имя командлета ... и т.д.

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

+0

Пожалуйста, укажите точный код, который вы используете, и точную ошибку, которую производит код. Также покажите вывод '$ PSVersionTable'. –

+2

Возможно, вам нужно импортировать командлет явным: 'Импорт-модуль WebAdministration' –

ответ

3

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

Import-Module WebAdministration 

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

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

1

Для всех, кого это интересует, ответ был мучительно простым. Как было предложено, решение заключалось в том, чтобы импортировать модуль, но возникла проблема в том, что он не был доступен после закрытия консоли и повторного открытия. Чтобы решить эту проблему, мне просто пришлось добавить строку в 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  
Смежные вопросы