2016-08-31 2 views
0

Dies ist das erste, was ich je mit PowerShell gemacht habe. Der Kern des Skripts besteht darin, einige grundlegende Einstellungen für die Installation meines Firmen-Webservers vorzunehmen. Grundsätzlich sollte esPowershell Probleme mit App-Pool-Neustart Zeitplan

  1. Nehmen Sie eine Liste von Namen
  2. Sie einen Benutzer mit diesem Namen
  3. configure Benutzer machen einen Ordner mit diesem Namen
  4. einen Anwendungspool machen mit diesem Namen
  5. Set Anwendungspool Eigenschaften
  6. Satz Ordner-Berechtigungen für eine Gruppe

T Der Code ist unten.

Import-Module WebAdministration 
#$apps = @('H','N1','N2') 
foreach ($app in $apps){ 


    ## I need to check for if a user exists first 
    NET USER $app "password" /ADD 
    NET LOCALGROUP "iis_iusrs" $app /ADD 
    WMIC USERACCOUNT WHERE "Name=$app" SET PaswordExpires=False 


    #See if the application's folder exists 
    if (!(Test-Path("C:\inetpub\wwwroot\"+$app))) 
    { 
     New-Item -ItemType Directory -Force -Path C:\inetpub\wwwroot\$app 
    } 

     ## See if the application Pool exists. If it doesn't then create it 
    if (!(Test-Path("IIS:\AppPools\"+$app))) 
    { 
     $appPool = New-Item ("IIS:\AppPools\"+$app) 
     $appPool.ProcessModel.identityType = 3 
     $appPool.ProcessModel.userName=$app 
     $appPool.ProcessModel.password="password" 
     $appPool.ProcessModel.idleTimeout=[TimeSpan]::FromMinutes(0) 
     $appPool.processModel.loadUserProfile="True" 
     $appPool.recycling.disallowOverlappingRotation = "True" 
     $appPool.recycling.disallowRotationOnConfigChange = "True" 
     $appPool.recycling.periodicRestart.time = [TimeSpan]::FromMinutes(0) 


     $appPool | Set-Item 
     $propPath = "IIS:\AppPools\"+$appPool 
     New-ItemProperty -Path $propPath -Name recycling.periodicRestart.schedule -Value @{value="00:06:00"}    

    } 
} 

$webserver = Hostname 
if(!(Test-Path("C:\"+$webserver))) 
{ 
    $hostserver = Read-Host "What is the host server's name?" 
    New-Item -ItemType Directory -Force -Path C:\$webserver\$hostserver 
} 

if(!(Test-Path('C:\Temp'))) 
{ 
    New-Item -ItemType Directory -Force -Path C:\Temp 
} 

$Acl_inetpub = Get-Acl C:\inetpub 
$Acl_temp = Get-Acl C:\Temp 
$Acl_windows_temp = Get-Acl C:\Windows\Temp 


$Ar_iis = New-Object System.Security.AccessControl.FileSystemAccessRule(".\iis_iusrs","FullControl","ContainerInherit,ObjectInherit","None","Allow") 
$Ar_users = New-Object System.Security.AccessControl.FileSystemAccessRule(".\users","FullControl","ContainerInherit,ObjectInherit","None","Allow") 

$Acl_inetpub.SetAccessRule($Ar_iis) 
$Acl_inetpub.SetAccessRule($Ar_users) 

$Acl_temp.SetAccessRule($Ar_iis) 
$Acl_temp.SetAccessRule($Ar_users) 

$Acl_windows_temp.SetAccessRule($Ar_iis) 
$Acl_windows_temp.SetAccessRule($Ar_users) 

Set-Acl C:\inetpub $Acl_inetpub 
Set-Acl C:\temp $Acl_temp 
Set-Acl C:\Windows\Temp $Acl_windows_temp 

Mein Problem ist derzeit.

$propPath = "IIS:\AppPools\"+$appPool 
    New-ItemProperty -Path $propPath -Name recycling.periodicRestart.schedule -Value @{value="00:06:00"} 

ich einen Pfad Fehler, wenn ich das laufen, aber ich bin nicht sicher, wo der Fehler herkommt. Gibt es auch eine Möglichkeit, dasselbe zu tun, aber nur das Objekt zu verwenden, wie ich es bei den restlichen Einstellungen getan habe? Bisher habe ich noch keinen Weg gefunden, dies zu tun.

+0

Haben Sie versucht, $ propPath zwischen diese beiden Zeilen zu setzen, um zu sehen, welcher Pfad an die Konsole zurückgegeben wird? –

+0

Ja, das führte zu meiner Lösung .... Ich musste es nur ein paar Mal anschauen, um zu sehen, was ausgegeben wurde. –

Antwort

0

So fand ich das letzte Problem dank Randy Schumans Rat. Ich habe nicht darüber nachgedacht, wie ich $ app vs $ appPool benutze. Ich habe gerade das Muster der Verwendung des Objekts $ appPool fortgesetzt, wenn ich ihm den Namen $ appPools geben muss, der nur $ app ist. Als ich wechselte, funktionierte es.