【问题标题】:Changing the physical path of an IIS website on a remote machine via Powershell通过 Powershell 在远程机器上更改 IIS 网站的物理路径
【发布时间】:2011-04-25 16:21:44
【问题描述】:

我目前正在开发一个部署脚本,它将获取我的站点,从 svn 导出它,删除其中的所有测试文件等,缩小 javascript/css,将代码复制到远程 Web 服务器,然后切换现有站点到新目录的物理路径。

到目前为止,除了在 IIS 中切换物理目录之外,我一切正常。

$IIsServer = Get-WmiObject Site -Namespace "root/WebAdministration" -ComputerName $serverIP -Credential $credentials -Authentication PacketPrivacy
$site = $IIsServer | Where-Object {$_.Name -eq $siteName}

当我查看我拥有的值时,我找不到物理路径属性。

任何建议将不胜感激。

【问题讨论】:

  • 两台机器都在 Active Directory 中吗?
  • 机器位于 Active Directory 中的不同域中,但如果需要,我们可以更改它,以便我们在 Web 服务器上而不是在本地开发机器上运行脚本。

标签: iis-7 wmi powershell-2.0


【解决方案1】:

这也有效:

PS IIS:\Sites> Set-ItemProperty IIS:\Sites\Staging `
                   -name physicalPath `
                   -value "C:\blah\Web"

(注意在续行时使用反引号)

【讨论】:

  • 请注意,在您 IISRESET 或重新启动 IIS 管理器之前,IIS 管理器可能不会注意到更改。
  • 他需要先拥有Import-Module WebAdministration 才能使用。
  • 我不需要重新启动 IIS 7.5 即可检测到更改。
  • 真的很奇怪....看来PS v2允许PhysicalPath和physicalPath,而PS v4只允许physicalPath作为-name参数。
  • 我可以确认您无需重置 IIS 即可检测到此更改。如果您打开了 IIS 管理器,则需要将其关闭并再次打开以查看更改。就站点而言,运行此命令后会立即更改物理路径
【解决方案2】:

root/WebAdministration WMI 提供程序的问题在于它的功能不是很丰富。

您可以改为使用Microsoft.Web.Administration 托管API。如果在服务器本身上运行,此脚本将起作用。

[Void][Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

$siteName = "Default Web Site"
$serverIP = "your ip address"
$newPath = "your new path"

$serverManager = New-Object Microsoft.Web.Administration.ServerManager
## $serverManager = [Microsoft.Web.Administration.ServerManager]::OpenRemote($serverIP)
$site = $serverManager.Sites | where { $_.Name -eq $siteName }
$rootApp = $site.Applications | where { $_.Path -eq "/" }
$rootVdir = $rootApp.VirtualDirectories | where { $_.Path -eq "/" }
$rootVdir.PhysicalPath = $newPath
$serverManager.CommitChanges()

如果您需要远程执行此操作,您会注意到有一条注释行可能对您有用:

## $serverManager = [Microsoft.Web.Administration.ServerManager]::OpenRemote($serverIP)

不幸的是,MS 没有考虑提供一种提供凭据的方法。这意味着运行脚本的帐户需要在远程服务器上授予的所有正确权限。我现在不能尝试这个,因为我不在 AD 环境附近。

脚本本身将更新站点根物理路径 (/)。

有关 IIS7 配置的更多信息,请参见以下链接:

IIS7 Configuration Reference > system.applicationHost

【讨论】:

  • 谢谢。我对 Powershell 和编写 IIS 脚本还很陌生,几天来我一直在为此苦苦挣扎。
  • 这对我帮助很大,谢谢!但在我的 Microsoft.Web.Administration OpenRemote 版本中是静态的,这导致我 $serverManager = [Microsoft.Web.Administration.ServerManager]::OpenRemote($serverIP)
  • @mikael - 你是绝对正确的,我已经更新了我的答案。谢谢!
  • 如果您安装了 IIS Express,您需要指定要加载的库的版本。 7.0.0.0 用于完整的 IIS,7.9.0.0 用于 IIS Express。 stackoverflow.com/q/25812169/247702
【解决方案3】:

我想在 @Kev 的帖子基础上进行构建。

您可以在本地使用他的方法,但正如他所说,没有真正的方法可以为他已注释掉的远程连接方法提供凭据:

$serverManager = [Microsoft.Web.Administration.ServerManager]::OpenRemote($serverIP)

要使用凭据远程更改物理路径,请使用以下命令:

#configure your remote credentials
$computerName = "remotehostname"
$securePassword = ConvertTo-SecureString "password" -AsPlainText -force
$credential = New-Object System.Management.Automation.PsCredential("username", $securePassword)

#remove –SkipCACheck –SkipCNCheck –SkipRevocationCheck if you don't have any SSL problems when connecting
$options = New-PSSessionOption –SkipCACheck –SkipCNCheck –SkipRevocationCheck
$session = New-PSSession -ComputerName $computerName -Authentication Basic -Credential $credential -UseSSL -SessionOption $options

$block = {
    [Void][Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

    $siteName = "Default Web Site"
    $serverIP = "your ip address"
    $newPath = "your new path"

    $serverManager = New-Object Microsoft.Web.Administration.ServerManager
    $site = $serverManager.Sites | where { $_.Name -eq $siteName }
    $rootApp = $site.Applications | where { $_.Path -eq "/" }
    $rootVdir = $rootApp.VirtualDirectories | where { $_.Path -eq "/" }
    $rootVdir.PhysicalPath = $newPath
    $serverManager.CommitChanges()
}

#run the code in $block on your remote server via the $session var
Invoke-Command -Session $session -ScriptBlock $block

注意:对于远程 PowerShell 脚本,确保 TCP 端口 5985 和 5986 在您的本地网络上打开出站并在您的 远程服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多