Обновление сопоставления альтернативного доступа SharePoint по умолчанию программно
Я включаю HTTPS на своем сервере IIS, где у меня установлена служба SharePoint Services 3.0, и я хочу программно обновить альтернативные сопоставления доступа по умолчанию для одного веб-приложения и моего экземпляра центра администрирования (оба на одном компьютере). Вот код, который у меня есть (Powershell), он добавляет отображение для HTTPS, но я получаю ошибку при попытке удалить исходный.
Вот мой код:
[void][system.reflection.assembly]::LoadWithPartialName("Microsoft.Sharepoint")
$SPWebServiceCollection = new-object Microsoft.SharePoint.Administration.SPWebServiceCollection ([Microsoft.SharePoint.Administration.SPFarm]::Local)
foreach ($SPWebService in $SPWebServiceCollection) {
foreach ($webApplication in $SPWebService.WebApplications) {
Write-Host ('Updating {0}' -f $webApplication.Name)
foreach ($alternateUrl in $webApplication.AlternateUrls) {
$incomingUrl = [System.URI] $alternateUrl.IncomingUrl
$newURL = 'https://{0}{1}' -f $incomingUrl.Authority, $incomingUrl.PathAndQuery
$newAltURL = New-Object Microsoft.SharePoint.Administration.SPAlternateUrl ($newURL, $alternateUrl.UrlZone)
$webApplication.AlternateUrls.Add($newAltURL)
$webApplication.AlternateUrls.Update($true)
$webApplication.AlternateUrls.Remove($alternateUrl) #Throws Exception
$webApplication.AlternateUrls.Update($true)
}
}
}
Вот ошибка, которую я получаю, когда пытаюсь удалить оригинал:
Исключение, вызывающее "Удалить" с аргументом (ами) "1": "Объект в административной структуре SharePoint, "SPAlternateUrlCollection Name=SharePoint - 1000 Parent=SPFarm Name=SharePoint_Config_8ddd3701-a332-4e79-98e4-fa11c1b6c17c", не может быть удален потому что другие объекты зависят от него. Обновите все эти иждивенцы, чтобы они указывали на нулевые или другие объекты, и повторите эту операцию. Зависимые объекты:
SPWebApplication Name = SharePoint - 1000 Parent = SPWebService
Однако я не уверен, как сделать то, что предлагает исключение.
2 ответа
Оказывается, есть другой метод для выхода из записи по умолчанию, который я пропустил:
$webApplication.AlternateUrls.SetResponseUrl($newAltURL)
[void][system.reflection.assembly]::LoadWithPartialName("Microsoft.Sharepoint")
$SPWebServiceCollection = new-object Microsoft.SharePoint.Administration.SPWebServiceCollection ([Microsoft.SharePoint.Administration.SPFarm]::Local)
foreach ($SPWebService in $SPWebServiceCollection) {
foreach ($webApplication in $SPWebService.WebApplications) {
Write-Host ('Updating {0}' -f $webApplication.Name)
foreach ($alternateUrl in $webApplication.AlternateUrls) {
$incomingUrl = [System.URI] $alternateUrl.IncomingUrl
$newURL = 'https://{0}{1}' -f $incomingUrl.Authority, $incomingUrl.PathAndQuery
$newAltURL = New-Object Microsoft.SharePoint.Administration.SPAlternateUrl ($newURL, $alternateUrl.UrlZone)
$webApplication.AlternateUrls.SetResponseUrl($newAltURL)
$webApplication.AlternateUrls.Update($true)
}
}
}
Ах... похоже, вы пытаетесь удалить URL, который использует веб-служба...