我正在尝试在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?
答案 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