كيف يمكنني تغيير عنوان IP لجميع المواقع في IIS6 باستخدام powershell 1.0؟
-
06-07-2019 - |
سؤال
استخدام Powershell 1.0 ضمن Windows Server 2003 مع IIS 6.
لدي حوالي 200 موقع أرغب في تغيير عنوان IP الخاص به (كما هو مدرج في خصائص موقع الويب في علامة التبويب "موقع الويب" في حقل "عنوان IP" بقسم "تعريف موقع الويب".
لقد وجدت هذا الرمز:
$site = [adsi]"IIS://localhost/w3svc/$siteid"
$site.ServerBindings.Insert($site.ServerBindings.Count, ":80:$hostheader")
$site.SetInfo()
كيف يمكنني أن أفعل شيئًا كهذا ولكن:
- قم بالمرور عبر كافة المواقع في IIS
- لا تقم بإدراج قيمة رأس مضيف، ولكن قم بتغيير قيمة موجودة.
المحلول
من المفترض أن يساعد البرنامج النصي PowerShell التالي:
$oldIp = "172.16.3.214"
$newIp = "172.16.3.215"
# Get all objects at IIS://Localhost/W3SVC
$iisObjects = new-object `
System.DirectoryServices.DirectoryEntry("IIS://Localhost/W3SVC")
foreach($site in $iisObjects.psbase.Children)
{
# Is object a website?
if($site.psbase.SchemaClassName -eq "IIsWebServer")
{
$siteID = $site.psbase.Name
# Grab bindings and cast to array
$bindings = [array]$site.psbase.Properties["ServerBindings"].Value
$hasChanged = $false
$c = 0
foreach($binding in $bindings)
{
# Only change if IP address is one we're interested in
if($binding.IndexOf($oldIp) -gt -1)
{
$newBinding = $binding.Replace($oldIp, $newIp)
Write-Output "$siteID: $binding -> $newBinding"
$bindings[$c] = $newBinding
$hasChanged = $true
}
$c++
}
if($hasChanged)
{
# Only update if something changed
$site.psbase.Properties["ServerBindings"].Value = $bindings
# Comment out this line to simulate updates.
$site.psbase.CommitChanges()
Write-Output "Committed change for $siteID"
Write-Output "========================="
}
}
}
لا تنتمي إلى StackOverflow