在命令行中找不到Cmdlet但在ISE

时间:2016-01-18 09:05:04

标签: powershell batch-file iis powershell-ise cmdlets

我正在尝试在Windows Server 2008 R2 VM上使用PowerShell创建IIS应用程序和应用程序池。 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不被识别为cmdlet的名称......等。

是否可以通过ISE而不是命令行安装Web管理cmdlet?

2 个答案:

答案 0 :(得分:3)

假设您使用的是PowerShell v2(与Server 2008 R2一起安装的默认版本),则怀疑@jisaak:您需要在代码中明确导入模块WebAdministration

Import-Module WebAdministration

ISE似乎会自动执行此操作。

另一个选项是upgrade to PowerShell v4,它还会在使用其中一个导出的cmdlet时自动导入模块。

答案 1 :(得分: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