Powershell issues with app pool restart schedule

时间:2016-08-31 17:24:11

标签: powershell iis

This is the first thing I have ever done with Powershell. The gist of the script is to do some base setup for my companies web server installation. Basically it should

  1. Take a list of names
  2. Make a user with that name
  3. configure user make a folder with that name
  4. make an application pool with that name
  5. set application pool properties
  6. set folder permissions for a group

The code is below.

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

My issue currently is.

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

I get a path error when I run this but I am not sure where the error is coming from. Also, is there a way to do this same thing but just using the object like I did the rest of the settings? So far I have not found a way to do this.

1 个答案:

答案 0 :(得分:0)

所以我发现最后一期是感谢Randy Schuman的建议。我没想过我是如何使用$ app vs $ appPool的。当我需要提供$ appPools名称时,我只是继续使用$ appPool对象的模式,这只是$ app。当我切换它有效。