2009-09-02 11 views

Répondre

0

Je ferai l'aveugle supposer que vous parlez de désactiver & sockets TCP/IP qui sont hébergés par IIS. (Non, disons, la recherche de moyens de bloquer/débloquer les choses au niveau du pare-feu, ou tout autre chose.) Dans ce cas, j'arrive d'avoir les scripts nécessaires qui traînent ...

# Get the IIsWebServer and IIsWebServerSetting WMI objects matching a display name, and combine them into one object 
function Get-IIsWeb 
{ 
    param (
     [string] $displayName = "", 
     [string] $computer = "localhost" 
    ) 

    if ($displayName -eq "") 
     { $filter = "" } 
    else 
     { $filter = "ServerComment='$displayName'"}  

    Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebServerSetting" -filter $filter -computer $computer -authentication 6 | % { 
     $temp = $_ 
     Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebServer" -filter "Name='$($_.Name)'" -computer $computer -authentication 6 | 
      add-member -membertype NoteProperty -name Settings -value $temp -passthru 
    } 
} 

# Stop all websites on a given computer that are bound to the specified port, unless they are scoped to a 
# host header or IP address 
function Stop-WebsiteOnPort 
{ 
    [CmdletBinding()]  
    param (
     [Parameter(Mandatory=$true, valuefrompipeline=$true)] 
     [int] $port, 
     [Parameter(Position=0)] 
     [string] $computer = "localhost", 
     [Parameter()] 
     [string] $hostName = $null, 
     [Parameter()] 
     [string] $ip = $null 
    ) 

    begin { $websites = Get-IIsWeb -computer $computer } 

    process 
    { 
     # I don't think you can do this filter in WQL 
     $websites | 
      ? { 
       ($_.settings.serverbindings | ? {$_.port -eq $port -and $_.Hostname -eq $hostName -and $_.IP -eq $ip} | measure).count -gt 0 
      } | 
      % { 
       $_.stop() 
      }    
    } 
} 

L'WMI réelle code pour réactiver un site est à peu près identique au code pour arrêter celui vu ci-dessus. Cependant, vous devrez faire un peu plus de travail: il pourrait y avoir arbitrairement beaucoup de sites configurés pour utiliser un port donné, mais seulement 1 peut fonctionner à la fois. Soit vous aurez besoin d'un paramètre supplémentaire de l'utilisateur, soit d'une heuristique pour choisir le "bon" site.

+0

Je pense que c'est exactement ce dont j'ai besoin! Merci beaucoup. –

+0

Au second regard, je ne pense pas que ce soit ce dont j'ai besoin. Voici ce qui se passe: Nous avons un outil OLAP appelé TM1 qui fonctionne sur un serveur et permet aux utilisateurs de se connecter via un outil client sur le port 12345. Les cubes sur le serveur sont mis à jour quotidiennement, mais sont ralentis par les utilisateurs essayant de se connecter. . Je voudrais les empêcher de se connecter pendant la mise à jour, puis les autoriser une fois la mise à jour terminée. Le service doit être en cours d'exécution pour que la mise à jour puisse avoir lieu. –

+0

Vous devrez soit (a) consulter la documentation TM1 et espérer qu'ils ont un moyen programmatique de basculer la connectivité sans baisser le service (b) bloquer les utilisateurs sur la couche réseau, c'est-à-dire utiliser un pare-feu ou IPSEC ou similaire. –

Questions connexes