【问题标题】:How to set Authentication Methods in IIS programmatically如何以编程方式在 IIS 中设置身份验证方法
【发布时间】:2009-12-07 18:50:38
【问题描述】:

我们正致力于自动部署一些 IIS 应用程序。我在 Windows 批处理文件中使用了 cscript.exe 来创建 Web 应用程序等。然而,目前有一些我需要手动完成的设置自动化。也就是说,如果您查看应用程序的属性,在目录结构 -> 身份验证和访问控制 -> 编辑下,我需要取消选中启用匿名访问并选中集成 Windows 身份验证。

有没有一种简单的方法可以从 Windows 批处理文件中执行此操作?

编辑:我应该澄清这是 IIS 6.0,所以 appcmd 不可用。

【问题讨论】:

  • 您将来可能会考虑使用 Windows PowerShell 执行此类任务。虽然语法很笨拙,但它允许访问 .NET 类等,并且比 vbscript 或批处理文件强大得多。
  • 你在 cscript.exe 运行的脚本中究竟做了什么。您是否在此脚本中创建站点?还是在批处理文件中使用IIsWeb.vbs
  • 我已经用示例 cscript sn-p 更新了我的答案。
  • 我基本上是复制Inetpub/wwwroot下的网站树然后使用:"" cscript.exe %systemroot%\system32\iisweb.vbs /create c:\inetpub\wwwroot "%1" / b %2 "" 其中 %1 和 %2 是应用名称的一些变量。如果我然后进入 IIS 管理器,在网站下,我可以看到网站及其标识符(在默认网站和 Sharepoint 管理员下)

标签: windows iis authentication wsh


【解决方案1】:

希望这会有所帮助:

http://forums.iis.net/t/1159665.aspx

【讨论】:

  • 我想我会问我问 Kev 的同样问题。链接中的此命令按广告宣传:adsutil.vbs set w3svc/1/root/Authflags 4 但是我想在安装新应用程序时运行此命令。当前安装的应用程序的标识符为 208223887,所以我想要: adsutil.vbs set w3svc/208223887/root/Authflags 4 但在安装应用程序之前我不知道该值。有没有办法在安装步骤之后将其作为变量获取,以便我可以在脚本中将其替换为该命令?
【解决方案2】:

不久前我回答了一个非常相似的问题。该示例使用您可以从批处理文件中调用的asdutil.vbs 工具:

Setting NTAuthenticationProviders at an Application level in IIS 6 (Stack Overflow)

更新:

因为你已经有了一个CScript脚本来创建网站,你可以在脚本中设置AuthFlags

'' Some values just as an example
iisNumber = 668
ipAddress = "172.16.3.200"
hostName = "myserver.com"
wwwfolder = "c:\mysites\www"


Dim serverBindings(1)
serverBindings(0) = ipAddress & ":80:www." & hostName
serverBindings(1) = ipAddress & ":80:" & hostName


'' Create server
Set w3svc = GetObject("IIS://localhost/w3svc")
Set newWebServer = w3svc.Create("IIsWebServer", iisNumber)
newWebServer.ServerBindings = serverBindings
newWebServer.ServerComment = "Server is: " & hostName
newWebServer.SetInfo

'' Create /root app
Set rootApp = newWebServer.Create("IIsWebVirtualDir", "ROOT")
rootApp.Path = wwwFolder
rootApp.AccessRead = true
rootApp.AccessScript = true
rootApp.AppCreate(True)
rootApp.AuthFlags = 4 '' <== Set AuthFlags here
rootApp.SetInfo

【讨论】:

  • 非常有用,但有一个问题,正如您所指出的,您提供的脚本适用于默认 Web 应用程序 (1)。从编程的角度来看,我如何知道默认应用程序以外的应用程序的应用程序 ID?我知道它的名字,但 windows 会生成 ID。
【解决方案3】:

Configure Windows Authentication (IIS 7):

appcmd set config /section:windowsAuthentication /enabled:true | false

对于 IIS 6,WMI 可能是替代方案:

【讨论】:

    【解决方案4】:
    Dim sSitePath = "1" 'Set the site ID here
    Set oSite =  GetObject("IIS://localhost/" & sSitePath & "/root")
    
    Select Case oSite.AuthFlags
      Case 1
        Wscript.Echo "Anonymous"
      Case 2
        Wscript.Echo "Basic"
      Case 4
        Wscript.Echo "NTLM"
      Case 6
        Wscript.Echo "MD5"
      Case 64
        Wscript.Echo "Passport"
    End Select
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多