我在使用应用程序池标识自动设置Web应用程序和配置IIS时遇到了很多困难.我在用PowerShell编写的Web应用程序部署脚本中执行此操作.我的要求是我需要使用PowerShell脚本将应用程序池标识用户设置为特定的服务帐户mydomain\svcuser和password.以下是示例代码:
$pool = New-Item "IIS:\AppPools\MyAppPool" -Force
$svcuser = "mydomain\svcuser"
$pool.processModel.userName = $svcuser
$password = "somepassword"
$pool.processModel.password = $password
$pool.processModel.identityType = 3
$pool | Set-Item -ErrorAction Stop
Run Code Online (Sandbox Code Playgroud)
当我运行它时,一切似乎都正常工作 - 没有错误被抛出,应用程序身份用户名出现在IIS中 - 但由于某种原因,密码没有正确设置,如果有的话.由于它是一个密码,我无法验证它是否已设置,但我可以断定,如果它是,它没有设置正确.在我手动进入并在IIS中输入密码之前,它不会对生成的应用程序池用户进行身份验证.因此,应用程序在部署到Web服务器后失败,需要手动干预.
我在这里错过了什么吗?
我们的大多数Web应用程序都包含Deploy.ps1 Powershell脚本.Octopus Deploy使用它在生产部署期间配置应用程序,但我们也使用它来设置开发人员的本地IIS设置.在Windows 7,Windows 8.1和我们所有的Win2012生产服务器上都可以正常工作.
它不适用于Windows 10,这似乎是因为Set-ItemPropertycmdlet无效.没有错误消息或任何东西,它只是没有做任何事情.
IIS站点api.example.com已经存在,我们使用Powershell创建/ myapp应用程序,然后将应用程序的物理路径更改为D:\ Projects\Demo
PS C:\> IIS:
PS IIS:\> cd Sites\api.example.com
PS IIS:\Sites\api.example.com> New-WebApplication myapp -site api.example.com -PhysicalPath C:\inetpub\wwwroot
Name Application pool Protocols Physical Path
---- ---------------- --------- -------------
myapp DefaultAppPool http C:\inetpub\wwwroot
PS IIS:\Sites\api.example.com> set-itemproperty myapp -name PhysicalPath -value D:\Projects\Demo
PS IIS:\Sites\api.example.com> get-itemproperty myapp
Name Application pool Protocols Physical Path
---- ---------------- --------- -------------
demo DefaultAppPool http C:\inetpub\wwwroot
^ THIS IS WRONG!
Run Code Online (Sandbox Code Playgroud)
在Windows 7上运行完全相同的命令集,您将获得相同的输出,但在最后一步,PhysicalPath属性已按预期更改:
PS IIS:\Sites\api.example.com> get-itemproperty myapp
Name Application pool …Run Code Online (Sandbox Code Playgroud) 我想使用PowerShell在Windows7 64位上管理我的IIS7.
我尝试安装IIS7 Powershell管理单元 http://www.iis.net/download/PowerShell
我"以管理员身份运行",然后键入下面列出的命令:msiexec/I iis7psprov_x64.msi但我收到此错误消息:"PowerShell管理单元是Windows操作系统的一部分.请通过程序和功能或服务器管理器安装"
我认为加载WebAdministration模块不需要这个特殊功能,但我激活了"程序和功能"中的所有选项
打开或关闭Windows功能| IIS | Web管理工具| IIS管理脚本和工具
我做那些检查:
1.)安装Power-Shell
PS C:\Program Files\IIS> $Host.Version
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
PS C:\Program Files\IIS> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5448
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS C:\Program Files\IIS> get-host
Name : ConsoleHost
Version : 2.0
InstanceId : 445ad8f5-87fc-48f7-b010-f7faf948b86c
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : es-ES
CurrentUICulture : es-ES
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed …Run Code Online (Sandbox Code Playgroud) 我使用PowerShell自动配置IIS中的网站.我有以下代码为我创建一个Web应用程序池
#Creating a new Application Pool
New-WebAppPool "NewAppPool"
Run Code Online (Sandbox Code Playgroud)
但是在创建池之前,我想检查池是否存在.我该怎么做呢?
请注意:我的系统上没有IIS驱动器.因此,如下所示在路径中提到IIS的命令会失败:
$IISPath = "IIS:\AppPools"
cd $IISPath
if (Test-Path ".\NewAppPool") { Write-Host "NewAppPool exists." }
Run Code Online (Sandbox Code Playgroud) 我正在进入一个PowerShell用于编写脚本的项目.构建使用该WebAdministration模块来管理本地IIS实例.当我运行构建脚本时,尝试导入时会引发以下错误WebAdministration.
错误:06/29/2016 17:28:35:在C:\ dev\src \nib-ravendb\build\ConfigureIis.ps1:10 char:1 + Import-Module WebAdministration + ~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ [<< == >>]例外:未加载指定的模块"WebAdministration",因为没有有效的模块文件任何模块目录.错误:1
然而,当我Import-Module WebAdministration在PowerShell命令行运行时,模块被导入,我可以使用它的功能.随后运行构建脚本仍然失败.
我有IIS 7.5和PowerShell 4
有没有人知道为什么这个导入会在脚本中失败而在命令行失败,以及如何修复它?
机器A和机器B处于不同的域中.机器A使用VPN来访问机器B的网络.
我试图模仿用户,以便Microsoft.Web.Adminstration在机器B上的IIS 中使用一些管理功能.
我在这里试过这个解决方案:https://forums.iis.net/t/1162205.aspx?Using+Microsoft+Web+Adistrationistration+on+aremote+machine+not+ in+the+ domain.来自LogonUser的returnValue对我来说是假的.当我开始写这篇文章时,我想可能不同的是,海报正在使用两个不同但受信任的域中的机器,但现在我看到他的一台机器只在一个工作组中.老实说,我不确定那种情况与我的情况相比......它是否应该有效相同.
我还尝试了另一种解决方案,它使用不同的登录类型值(NewCredential而不是Interactive)和不同的登录提供程序(WinNt50而不是Default),因为它声称它解决了我的域名不受信任的问题.
也尝试结合这两种解决方案,但到目前为止没有任何工作.
我开始在asp.net mvc项目中执行此操作,但在第一个解决方案要求我调用时切换到控制台应用程序CoInitializeSecurity,显然,它要求事先没有调用它,我不知道如何防止它一个mvc项目(在控制台应用程序中我只需要禁用Visual Studio托管过程).
我要指出,我可以使用NetworkCredential类与NetworkConnection类(https://gist.github.com/AlanBarber/92db36339a129b94b7dd)连接到目标机器和写入文件.所以我完全知道用户/传递工作,我能够从客户端机器上使用它们进行文件访问.我只是无法弄清楚如何冒充他们.
我不认为我可以立即给予奖励,但如果有人能够提供解决方案,我会尽快添加赏金给你.
我想将我的IIS Bidings归档到csv或txt,我只是在使用该cmdlet玩一下:
Get-ChildItem -path IIS:\Sites
Run Code Online (Sandbox Code Playgroud)
哪个工作完美,也可以使用此命令完成outtiling到.txt:
Get-ChildItem -path IIS:\Sites | out-file "D:\_utils\PowerShell Scripts\IISexport\IISExport.txt"
Run Code Online (Sandbox Code Playgroud)
但是一旦我将它包装到函数中,powershell就会尝试找到物理路径IIS:\ Sites当然不存在.
Get-ChildItem : Cannot find drive. A drive with the name 'IIS' does not exist.
At D:\_utils\PowerShell Scripts\IISReport.ps1:8 char:1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的脚本非常简单:
$today = Get-Date -format M.d.yyyy
function IISexport
{
Get-ChildItem -path IIS:\Sites
}
IISexport | out-file "D:\_utils\PowerShell Scripts\IISexport\IISExport$today.txt"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我想将其归档,因为我希望将它放入一个更大的脚本中,该脚本从xx webservers中删除了我的webbindings.
我认为它与已经在控制台中给出但不在我的脚本中的env变量有关.但我不知道如何管理它们.已经尝试过get-childitem evn:
,这给我带来了很多变数.
我很困惑-Passthru。
据我了解,该-Passthru参数用于将cmdlet的结果传递给管道,即使cmdlet本身不产生任何结果。
我尝试先编写这些代码:(我尝试不使用Restart-WebAppPoolcmdlet 来回收IIS应用程序池)
Stop-WebAppPool -Name Foo
Start-WebAppPool -Name Foo
Run Code Online (Sandbox Code Playgroud)
如我所料,停止IIS ApplicationPool需要花费时间,并且由于PowerShell不等待cmdlet完成其工作,因此将Stop-WebAppPool停止应用程序池并返回。由于应用程序池尚未准备好开始,因此Start-WebAppPool将调用并引发错误。
因此,我将代码更改为以下代码:
Stop-WebAppPool -Name Foo
Start-Sleep -Seconds SomeValueNeedToGetMeasuredAndChanged
Start-WebAppPool -Name Foo
Run Code Online (Sandbox Code Playgroud)
它可以工作,但不太灵活。
然后,我-Passthru将这两个cmdlet 添加到其中,它变为:
Stop-WebAppPool -Name Foo -Passthru
Start-WebAppPool -Name Foo -Passthru
Run Code Online (Sandbox Code Playgroud)
一切正常,没有错误。
就我而言,我认为:
在真正停止/启动应用程序池之前,Stop / Start-WebAppPool cmdlet不会产生任何结果。由于-Passthru需要将某些内容传递到管道,因此PowerShell等待cmdlet产生其结果,在这种情况下,将停止/启动应用程序池以执行下一个。
我在-Passthru或上都找不到任何有用的手册Stop-WebAppPool,因此在这种情况下可以这样做吗?
我使用Microsoft.Web.Administration.dll通过使用以下代码检查我的网站的状态.它适用于IIS,但是当它在IIS Express中使用时,'State'属性会抛出'NotImplementedException'.
ServerManager manager = new ServerManager()
foreach (Site site in manager.Sites){
If (site.State == ObjectState.Started)
{
.....
}
}
Run Code Online (Sandbox Code Playgroud)
有人遇到过这个问题吗?
我在Windows Server 2012 R2上使用PowerShell 4.
调用来自此模块的Cmdlet时,特定模块WebAdministration不会自动加载.我试过的所有其他模块成功自动加载.我可以使用Import-Module手动加载此模块,它的行为符合预期.
PSModulePath =%SystemRoot%\ system32\WindowsPowerShell\v1.0\Modules \ WebAdministration Module Path = C:\ Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration
简单测试输出
PS C:\ Users\Administrator> $ PSModuleAutoLoadingPreference ="All"
PS C:\ Users\Administrator> Get-WebBinding Get-WebBinding:术语"Get-WebBinding"未被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.at line:1 char:1 + Get-WebBinding + ~~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(Get-WebBinding:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
PS C:\ Users\Administrator> Import-Module WebAdministration
PS C:\ Users\Administrator> Get-WebBinding
protocol bindingInformation sslFlags -------- ------------------ -------- http*:8082:0 http*:8081:0
任何关于为什么自动加载不起作用的建议将不胜感激.谢谢!
我需要使用powershell自动配置新的IIS服务器,我需要更改Forms身份验证功能(其overrideMode)的功能委派设置.
我基本上想要改变使用此命令时看到的overrideMode:
Get-WebConfiguration -Filter //system.web/authentication -PSPath 'MACHINE/WEBROOT/APPHOST' | fl *
Run Code Online (Sandbox Code Playgroud)
我可以使用Set-WebConfiguration为其他类型的身份验证方法设置它,例如,对于Windows身份验证,我会这样做:
Set-WebConfiguration -Filter //System.webServer/Security/Authentication/windowsAuthentication -PSPath 'MACHINE/WEBROOT/APPHOST' -Metadata overrideMode -Value Allow
Run Code Online (Sandbox Code Playgroud)
但由于某些原因我不能对//system.web/authentication做同样的事情,我不明白为什么.当我尝试时,我收到此错误:
PS H:\> Set-WebConfiguration -Filter //System.web/Authentication -PSPath 'MACHINE/WEBROOT/APPHOST' -Metadata overrideMode -Value Allow
Set-WebConfiguration : Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config
Line number: 974
Error: This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default
(overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false".
At …Run Code Online (Sandbox Code Playgroud) 创建站点时,我设法使用以下代码行设置路径
New-WebSite -Name "mysite" -port 8084 -PhysicalPath "c:\inetpub\wwwroot" -ApplicationPool "myappPool"
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何更新路径,但通过配置编辑器找不到任何内容。我以为我已经通过以下命令获得了它
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/site[@name='mysite']/virtualDirectoryDefaults" -name "physicalPath" -value "c:\inetpub\wwwroot\mysite"
Run Code Online (Sandbox Code Playgroud)
...但是,我想更新的不是虚拟目录,而是实际站点...
我正在使用PowerShell自动部署网站,最近发现了无法使用PS设置的AppPool设置.或者至少我没有设法找到如何做到这一点.
$appPool = $serverManager.ApplicationPools.Add($sitename)...
Run Code Online (Sandbox Code Playgroud)
我需要将"Private Memory Limit"设置为某个值,但看起来在ApplicationPool或ApplicationPoolRecycling对象中没有这样的属性.
anybode是否知道此问题的解决方法?
powershell ×11
iis ×8
iis-7.5 ×3
c# ×2
asp.net ×1
iis-10 ×1
iis-7 ×1
iis-express ×1
snap-in ×1
windows-10 ×1
windows-7 ×1