【问题标题】:How do I change the physical path of web site in IIS7 with APPCMD?如何使用 APPCMD 更改 IIS7 中网站的物理路径?
【发布时间】:2010-12-09 19:27:59
【问题描述】:

我需要通过命令行通过 appcmd.exe 工具更改网站的物理路径,但我无法弄清楚语法。有人可以帮忙吗?

【问题讨论】:

    标签: iis-7 appcmd


    【解决方案1】:

    你应该这样做:

    C:\Windows\System32\inetsrv>appcmd set vdir "MySite/" -physicalPath:"C:\inetpub\temp"

    注意:“MySite/”是您的虚拟目录的名称,因此如果您的虚拟目录位于默认网站下,您可能需要设置“默认网站/MySite/”


    至于弄清楚如何执行其他 appcmd 命令,只需键入:appcmd set vdir /?

    您将获得有关如何设置虚拟目录的所有信息。

    更具体地说,如果您想知道可以为特定虚拟目录类型更改哪些设置:appcmd set vdir "MySite/" /?

    这些示例仅适用于虚拟目录,它们适用于其他 appcmd 命令

    希望对你有帮助

    【讨论】:

    • 这没有回答问题。如前所述,我需要更改网站的物理路径,而不是虚拟目录。另外,问题是我无法弄清楚语法。我知道 /?。输出的帮助没有清楚地描述语法的外观。
    • @Frank Edwards - 1. 我假设你没有测试我的答案 2. 在 IIS 7.0 中,每个 site 必须有一个应用程序,每个应用程序必须有一个 虚拟目录。您站点的根虚拟目录指向站点的物理路径。为了更好地理解站点/应用程序/虚拟目录的概念,我建议阅读这篇文章:learn.iis.net/page.aspx/150/… 特别是标题为 IIS 7.0 配置的部分: 部分
    • 如果您使用 appcmd add site /Name:test 创建站点,您以后将无法添加 phyiscalPath,您必须使用(至少)appcmd add site /Name:test / 创建站点physicalPath:"C:\inetpub\wwwroot\mysite" 这导致 SITE 对象 "test" 添加了 APP 对象 "test/" 添加了 VDIR 对象 "test/" 添加了它然后允许您在以后更改 vdir phyisicalPath跨度>
    • 是的,嗯,作为James notes,@PaulGo 只要我从管理员提升的命令提示符运行,这个答案就完全符合您的要求。绿色支票进来了!
    • @ruffin 这个问题是很久以前发布的(11 年了!),我不知道我在问什么或为什么,所以我决定只绿色检查这个答案,因为它似乎是为人们创造最大价值的产品...
    【解决方案2】:

    以下内容适用于 IIS 7.5。它改变了网站的物理路径:

    appcmd set site /site.name:"website name" /application[path='/'].virtualDirectory[path='/'].physicalPath:"C:\new\path"
    

    键入以下内容以获取您可以设置的属性的完整列表:

    appcmd set site /site.name:"website name" /?
    

    Reference

    【讨论】:

      【解决方案3】:

      上面的答案是正确的。这是设置默认网站和其他几个虚拟目录的样子。我们希望默认网站位于 D: 上,并为应用程序提供一个特殊的唯一路径名,但其中两个虚拟目录又回到 C: 上,并有自己的路径:

      C:\windows\system32\inetsrv\appcmd.exe set vdir "Default Web Site/" -physicalPath:"D:\MyUniquePath"
      C:\windows\system32\inetsrv\appcmd.exe set vdir "Default Web Site/OtherWebSite" -physicalPath:"C:\OtherWeb\ApplicationServer\web"
      C:\windows\system32\inetsrv\appcmd.exe set vdir "Default Web Site/ExtraPlugins" -physicalPath:"C:\OtherWeb\ApplicationServer\plugins"
      

      语法很简单,但确定 appcmd 为虚拟目录使用的确切字符串可能很棘手。

      【讨论】:

        【解决方案4】:

        如果您尝试更改 Web 应用程序的物理路径,下面是一个示例,将在网站“默认网站”下创建的 Web 应用程序“Spockadoodle”更改为具有物理路径“C:_junk ”。

        appcmd set app /app.name:"Default Web Site/spockadoodle"  -[path='/'].physicalPath:c:\_junk
        

        我通过运行命令解决了这个问题:

        appcmd set app /app.name:"Default Web Site/spockadoodle"  /?
        

        在我观察到的输出中

        ERROR (message:-path
        -applicationPool
        -enabledProtocols
        ...
        -[path='string'].physicalPath
        

        在此之前,在命令的输出中

        appcmd set apps /?
        

        提到的输出:

        示例:appcmd set app "Default Web Site/" /enabledProtocols:http

        Sets the "enabledProtocols" property of the application "Default Web
        Site/".
        

        因此,从引用如何设置“enabledProtocols”的示例中,我替换了 [path='string'].physicalPath 的示例

        要知道属性表达式的值 [path='string'] 我在命令的输出中观察到

        appcmd list app "Default Web Site/spockadoodle" /config
        

        输出显示 Web App Spockadoodle 具有路径属性值“/”:

        应用>

        另外,我发现使用网站http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe 上示例中的 /app.name 标识符

        【讨论】:

        • 一些解释很有帮助。谢谢。
        【解决方案5】:

        按站点和应用名称获取虚拟目录列表,以帮助确保您尝试设置正确的内容。

        C:\Windows\System32\inetsrv\appcmd.exe list apps /config /xml
        

        可选地管道 |more 和/或 mode con cols=160 这个正则表达式取出了我想要的部分

        var q= from siteApp in config.XPathSelectElements("appcmd/APP")
                let appName=siteApp.Attribute(XNamespace.None+"APP.NAME").Value
                    from app in siteApp.XPathSelectElements("application")
                let appPath=app.Attribute(XNamespace.None+"path").Value
                let pool=app.Attribute(XNamespace.None+"applicationPool").Value
                let vd=app.XPathSelectElements("virtualDirectory[@path]")
                let virtuals=vd.Select (v => new{VirDir=v.Attribute(XNamespace.None+"path").Value,PhysicalPath=v.Attribute(XNamespace.None+"physicalPath").Value})
                let xvirtuals=virtuals.Select (v => new{ VirDir=v.VirDir,
                    PhysicalPath=v.PhysicalPath,
                    EnvRoot=v.PhysicalPath.ToString().StartsWith("%")})
                select new{AppName=appName,AppPath=appPath, Pool=pool,Virtuals=xvirtuals};
        

        那么对于一个特定的网站,它就变成了 appcmd.exe set vdir "DefaultWebSite/jms" -physicalPath:"c:\inetpub\wwwroot\mytargetPath"

        这里是变量替换:

        appcmd.exe set vdir " + appName + virt.VirDir + " -physicalPath:" + targetPath+"

        并查看该站点的配置设置:

            C:\Windows\System32\inetsrv\appcmd.exe list apps /config /xml /path:/jms
        

        另一个需要注意的用法:

            C:\Windows\System32\inetsrv\appcmd.exe list apps /metadata /config:* /xml
        

        【讨论】:

          最近更新 更多