sunilbains
asked on
Create app pool using Windows Powershell script
I am using power shell script to Create app pool. Its creating app pool with all default settings. is there any way i can give my own settings values for idletimeout, check mark for recycling worker process, memory ..... Iam not able to find corresponding command line values for all default app pool parameters. Can Somebody help here.
$IIsAppPool = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/AppPools")
$Child = $IIsAppPool.psbase.children.Add($AppPoolName,"IIsApplicationPool")
$Child.psbase.CommitChanges()
$child.put("IdleTimeout",30)
$child.put("PeriodicRestartTime",0)
ASKER
Hi,
Thanks for this.
Is there any way we can grant permission to IIS_WPG group / Administrators on wwwroot folder through script?
Thanks for this.
Is there any way we can grant permission to IIS_WPG group / Administrators on wwwroot folder through script?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks Chris
ASKER
Chirs,
Can we add memebrs to the IIS Group through powershell script?
Can we add memebrs to the IIS Group through powershell script?
IIS_WPG? Sure, with a catch...
$Group = [ADSI]"WinNT://$($Env:Comp
$Group.Add("WinNT://$($Env
And the catch, it's minor:
When we get the connection to the group in this manner (WinNT://) it will expect us only to use WinNT paths for the users we add (as in the example above). If you happen to have AD behind all this you might be more familiar with "LDAP://CN=User, ...", it won't like being fed a path like that.
So, if it were a domain user the example would become:
$Group.Add("WinNT://$($Env
Otherwise that's all there is to it.
Chris
ASKER
Sorry to keep asking you..
How do give permission to "Authenticated Users" on wwwroot?
Is it something below?
New-Object System.Security.AccessCont rol.FileSy stemAccess Rule("$($E nv:Compute rName)\Aut henticated Users", `
"FullControl", @("ObjectInherit", "ContainerInherit"), "None", "Allow")
How do give permission to "Authenticated Users" on wwwroot?
Is it something below?
New-Object System.Security.AccessCont
"FullControl", @("ObjectInherit", "ContainerInherit"), "None", "Allow")
No worries.
Almost, Authenticated Users is "NT AUTHORITY" rather than a computer name. It should work if you define the rule as below.
You can get a full list of the rights you can assign if you run:
[Enum]::GetNames([System.S
Just in case you wanted to use more than FullControl :)
Chris
# This is the file system rule we want to create
New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\Authenticated Users", `
"FullControl", @("ObjectInherit", "ContainerInherit"), "None", "Allow")
# Using the rule
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule(`
"NT AUTHORITY\Authenticated Users", "FullControl", `
@("ObjectInherit", "ContainerInherit"), "None", "Allow")
$ACL = Get-ACL "C:\inetpub\wwwroot"
$ACL.AddAccessRule($Rule)
Set-ACL "C:\inetpub\wwwroot" -aclObject $ACL
ASKER
Hi Chris,
Iam getting error while giving IIS_WPG permission on wwwroot.
Creating Virtual Directories and Application Pool
Incomplete string token.
At C:\Vdir\VDir.ps1:196 char:106
+ $IIS_WPG =`New-Object System.Security.AccessCont rol.FileSy stemAccess Rule("$($
Env:ComputerName)\IIS_WPG" , ` <<<< "ReadAndExecute", @("ObjectInherit", "Contai
nerInherit"), "None", "Allow")
Iam getting error while giving IIS_WPG permission on wwwroot.
Creating Virtual Directories and Application Pool
Incomplete string token.
At C:\Vdir\VDir.ps1:196 char:106
+ $IIS_WPG =`New-Object System.Security.AccessCont
Env:ComputerName)\IIS_WPG"
nerInherit"), "None", "Allow")
write-output "Starting Powershell Script"
# this is the script for Creating Virtual Directories and Application Pool
# ****************** List of Variables *********************
#Reading xml file
$xmlfile = $pwd.path + "\VDir.xml "
[xml]$File= get-content $xmlfile
# name of the Application Pool and also client directory
$AppPoolName=$File.Parameters.VDir | %{$_.AppPoolName} # need value "globearc"
$IIS_Root=$File.Parameters.VDir | %{$_.IIS_Root} #need value "c:\Inetpub\wwwroot\"
# where the files are kept for WebApp
#need value c:\newweb
$LocalPathForWebApp=$File.Parameters.VDir | %{$_.LocalPathForWebApp}
$AspNetVersionForWebApp=2
# where the files are kept for WebServices
#need value c:\newweb
$LocalPathForWebServices=$File.Parameters.VDir | %{$_.LocalPathForWebServices}
$AspNetVersionForWebServices=2
# ***** Create Application Pool **************
$IIsAppPool = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/AppPools")
$Child = $IIsAppPool.psbase.children.Add($AppPoolName,"IIsApplicationPool")
$Child.psbase.CommitChanges()
$child.put("PeriodicRestartMemory",1048576)
$child.put("PeriodicRestartTime",1740)
$child.put("CPUResetInterval",30)
$child.put("MaxProcesses",1)
$child.put("IdleTimeout",8640)
$Child.psbase.CommitChanges()
# ***** end **********************************
# the script to create virtual directory under IIS**********************
# create folder 'globearc' for client at c:\Inetpub\wwwroot\
$ClientDir=$IIS_Root+$AppPoolName
New-Item -Path $ClientDir -ItemType Directory -Force
# ***** the following is the list of variables *************************
$ApplicationName=$AppPoolName+"/WebApp"
$LocalPath=$LocalPathForWebApp
$AspNetVersion=$AspNetVersionForWebApp # either 1 0r 2
# ***** end of list ****************************************************
$IIsAdmin = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1/Root")
#Remove the existing WebApp under globearc
foreach($VD in $IIsAdmin.psbase.children)
{
if($VD.psbase.Name -eq $AppPoolName)
{
foreach($VDChild in $VD.psbase.children)
{
if($VDChild.psbase.name -eq "WebApp")
{
write-output "WebApp exists"
$VD.psbase.Invoke("Delete","IIsWebVirtualDir",$VDChild.psbase.name)
$VD.psbase.CommitChanges()
write-output "WebApp deleted"
} }
}
}
$IIsAdmin.psbase.CommitChanges()
$virtualdir = $IIsAdmin.psbase.children.Add($ApplicationName,"IIsWebVirtualDir")
$virtualdir.psbase.CommitChanges()
$virtualdir.put("Path",$LocalPath)
$virtualdir.put("AppFriendlyName",$ApplicationName)
$virtualdir.put("EnableDirBrowsing",$true)
$virtualdir.put("AccessRead",$true)
$virtualdir.put("AccessExecute",$true)
$virtualdir.put("AccessWrite",$false)
$virtualdir.put("AccessScript",$true)
$virtualdir.put("Authanonymous",$false)
$virtualdir.put("AuthBasic",$false)
$virtualdir.put("AuthNTLM",$true)
$virtualdir.put("EnableDefaultDoc",$true)
$virtualdir.put("DefaultDoc","default.htm,default.aspx,default.asp,index.htm")
$virtualdir.put("AspEnableParentPaths",$true)
$virtualdir.put("AppPoolId",$AppPoolName) #To select the application pool from list
$virtualdir.psbase.CommitChanges()
$virtualdir.psbase.Invoke("AppCreate", 1)
if($AspNetVersion -eq 2)
{
#c:\windows\Microsoft.NET\framework\v2.0.50727\aspnet_regiis -s w3svc/1/root/$ApplicationName
& $env:windir\Microsoft.NET\framework\v2.0.50727\aspnet_regiis -s w3svc/1/root/$ApplicationName
}
else
{
#c:\windows\Microsoft.NET\framework\v1.1.4322\aspnet_regiis -s w3svc/1/root/$ApplicationName
& $env:windir\Microsoft.NET\framework\v1.1.4322\aspnet_regiis -s w3svc/1/root/$ApplicationName
}
# second one for webservices
# ***** the following is the list of variables***************************
$ApplicationName=$AppPoolName+"/WebServices"
$LocalPath=$LocalPathForWebServices
$AspNetVersion=$AspNetVersionForWebServices
# ***** end of list *****************************************************
$IIsAdmin = New-Object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1/Root")
#Remove the existing WebService under globearc
foreach($VD in $IIsAdmin.psbase.children)
{
if($VD.psbase.Name -eq $AppPoolName)
{
foreach($VDChild in $VD.psbase.children)
{
if($VDChild.psbase.name -eq "WebServices")
{
write-output "WebServices exists"
$VD.psbase.Invoke("Delete","IIsWebVirtualDir",$VDChild.psbase.name)
$VD.psbase.CommitChanges()
write-output "WebServices deleted"
} }
}
}
$IIsAdmin.psbase.CommitChanges()
$virtualdir = $IIsAdmin.psbase.children.Add($ApplicationName,"IIsWebVirtualDir")
$virtualdir.psbase.CommitChanges()
$virtualdir.put("Path",$LocalPath)
$virtualdir.put("AppFriendlyName",$ApplicationName)
$virtualdir.put("EnableDirBrowsing",$true)
$virtualdir.put("AccessRead",$true)
$virtualdir.put("Authanonymous",$true)
$virtualdir.put("AccessExecute",$true)
$virtualdir.put("AccessWrite",$false)
$virtualdir.put("AccessScript",$true)
$virtualdir.put("AuthNTLM",$true)
$virtualdir.put("EnableDefaultDoc",$true)
$virtualdir.put("DefaultDoc","default.htm,default.aspx,default.asp,index.htm")
$virtualdir.put("AspEnableParentPaths",$true)
$virtualdir.put("AppPoolId",$AppPoolName) #To select the application pool from list
$virtualdir.psbase.CommitChanges()
$virtualdir.psbase.Invoke("AppCreate", 1)
if($AspNetVersion -eq 2)
{
#c:\windows\Microsoft.NET\framework\v2.0.50727\aspnet_regiis -s w3svc/1/root/$ApplicationName
& $env:windir\Microsoft.NET\framework\v2.0.50727\aspnet_regiis -s w3svc/1/root/$ApplicationName
}
else
{
#c:\windows\Microsoft.NET\framework\v1.1.4322\aspnet_regiis -s w3svc/1/root/$ApplicationName
& $env:windir\Microsoft.NET\framework\v1.1.4322\aspnet_regiis -s w3svc/1/root/$ApplicationName
}
$Path = "C:\inetpub\wwwroot"
$IIS_WPG =`New-Object System.Security.AccessControl.FileSystemAccessRule("$($Env:ComputerName)\IIS_WPG", `
"ReadAndExecute", @("ObjectInherit", "ContainerInherit"), "None", "Allow")
$ACL = Get-ACL $Path
$ACL.AddAccessRule($IIS_WPG)
Set-ACL $Path -aclObject $ACL
ASKER
never mind i got it.
ASKER
Hi Chris,
iam getting error for below.
$Group = [ADSI]"WinNT://$($Env:gpri 14d12121)/ IIS_WPG"
$Group.Add("WinNT://$($Env :abcd)/sys ibdpribuil duserd")
Exception retrieving member "Add": "Unknown error (0x80005000)"
At C:\Vdir\VDir.ps1:214 char:11
+ $Group.Add( <<<< "WinNT://$($Env:csfb)/sysi bdpribuild userd")
iam getting error for below.
$Group = [ADSI]"WinNT://$($Env:gpri
$Group.Add("WinNT://$($Env
Exception retrieving member "Add": "Unknown error (0x80005000)"
At C:\Vdir\VDir.ps1:214 char:11
+ $Group.Add( <<<< "WinNT://$($Env:csfb)/sysi
We use $Env to get the Environmental Variables on the machine. In the case of the examples above we get %ComputerName% and %UserDomain% which means we don't have to hard-code values unless we want to.
If you want to pop in the domain, or computer, name to make it static it would be:
$Group = [ADSI]"WinNT://gpri14d1212
And so on.
Chris
ASKER
Thanks Chris. I have one more question for you.
Powershell script only.
I have one file from where iam reading version number: which is starting with 1.0.0.0
I need to increment this number by one . For example 1.0.0.1 , 1.0.0.1,.. like this . Iam able to do this till 1.0.0.10 But After that its behaving differently.
Iam attaching here my code. After incrementing iam putting again in the file with latest version.
But after 10 its not working.
Also i need to increment last digit every day and 3 digit evry month , 2nd digit every quarter, 1st digit every year.
Is there any easy way ?
Powershell script only.
I have one file from where iam reading version number: which is starting with 1.0.0.0
I need to increment this number by one . For example 1.0.0.1 , 1.0.0.1,.. like this . Iam able to do this till 1.0.0.10 But After that its behaving differently.
Iam attaching here my code. After incrementing iam putting again in the file with latest version.
But after 10 its not working.
Also i need to increment last digit every day and 3 digit evry month , 2nd digit every quarter, 1st digit every year.
Is there any easy way ?
function replaceVersions([string]$assemblyFile)
{
# Get the whole line where AssemblyFileInfo exists
#$version=(select-string -pattern AssemblyFileVersion $assemblyFile);
$version= get-content $assemblyFile | ?{$_ -match "AssemblyFileVersion"};
Write-output $version
$beginIndex=($version.IndexOf("(") + 1);
write-output $beginIndex
$version = $version.SubString($beginIndex, ($version.IndexOf()) - $beginIndex));
write-output "Current version is $version"
$currentversion=$version;
$minorVersionStartIndex = $version.LastIndexOf(.);
write-output $minorversionstartIndex
$majorVersion = $version.SubString(1, ($minorVersionStartIndex+1));
write-output "Major version is: $majorversion"
$fixversion=$version.SubString(1, ($minorVersionStartIndex));
$minorVersion = $version.SubString(($minorVersionStartIndex + 1), ($version.length - $minorVersionStartIndex -2));
write-output "fix version is: $fixversion"
write-output "Minor version is $minorversion"
$minorVersionInt = [Int32]$minorVersion;
$minorVersionInt++;
write-output "minor version int is $minorVersionInt"
$minorVersion =$minorVersionInt;
$finalversion=$fixVersion + $minorVersion;
write-output "new version is $finalversion"
$tempFile = $fileToFix + .temp;
get-content $fileToFix | set-content $tempFile;
$VersionOutputFile="Version.txt"
write-output $finalversion |set-content $VersionOutputFile
# Set target file to writable
(Get-ChildItem $fileToFix).set_IsReadOnly( 0 );
get-content $tempFile | % { $_.Replace($majorversion, $finalversion) } | set-content $fileToFix;
}
$assemblyInfo = G:\BetaengineBuild\BetaEngine\Trunk\source\Client\BE.Client\Properties\AssemblyInfo.cs;
$fileToFix=G:\BetaengineBuild\BetaEngine\Trunk\source\Client\BE.Client\Properties\AssemblyInfo.cs;
replaceVersions $assemblyInfo;
I can't help but wonder if it would be better to drop all but the major version and serialise a date instead (given the increment requirements you have). Otherwise I see problems trying to increment unless you set a base value up and compare with that before thinking about incrementing values.
Then you just have to choose what to do with the year. Either immediately increment it to match the current year (so 2009), or hard-code a starting point. The code below just preserves the major version at the moment.
For today that should give a version of 1.1.3.12 (1 major, 1st quarter, 3rd month, 12th day).
Any thoughts?
Chris
# Get current version (normally read with Get-Content)
$VersionText = "[assembly: AssemblyFileVersion(`"1.0.0.0`")]"
# Perform a Regular Expression search to return the quoted value from the string
# Void the boolean return
[Void]($VersionText -Match "`".*`"")
# Matches is a reserved variable, contains matches from a Regular Expression. Drop off quotes
# using Replace (also regular expression, but nothing to it here)
$CurrentVersion = $Matches[0] -Replace "`""
# Rewrite the version based on the current date.
$NewVersion = "$($CurrentVersion.SubString(0, $CurrentVersion.IndexOf('.')))." + `
"$([Math]::Ceiling(([DateTime]::Now).Month / 3)).$(([DateTime]::Now).Month)." + `
"$(([DateTime]::Now).Day)"
Write-Host "Current Version: $CurrentVersion"
Write-Host "New version: $NewVersion"
ASKER
Thaks Chris. One poitn here.
Last part of version.. I need to increment everytime i run . I mean suppose i run 10 times a day. I should i ncrement 1.1.3.12 to 1.1.3.22.
is it possibel?
Last part of version.. I need to increment everytime i run . I mean suppose i run 10 times a day. I should i ncrement 1.1.3.12 to 1.1.3.22.
is it possibel?
Sure, like this?
Chris
$VersionText = "[assembly: AssemblyFileVersion(`"1.0.0.0`")]"
[Void]($VersionText -Match "`".*`"")
$CurrentVersion = $Matches[0] -Replace "`""
$MinorVersion = $CurrentVersion.Split(".")
$MinorVersion = [Int]$MinorVersion[$MinorVersion.Count - 1]
$NewVersion = "$($CurrentVersion.SubString(0, $CurrentVersion.IndexOf('.')))." + `
"$([Math]::Ceiling(([DateTime]::Now).Month / 3)).$(([DateTime]::Now).Month)." + `
"$MinorVersion"
Write-Host "Current Version: $CurrentVersion"
Write-Host "New version: $NewVersion"
ASKER
Perhaps we need to increment minor version. ??
$VersionText = "[assembly: AssemblyFileVersion(`"1.0. 0.0`")]"
[Void]($VersionText -Match "`".*`"")
$CurrentVersion = $Matches[0] -Replace "`""
$MinorVersion = $CurrentVersion.Split(".")
$MinorVersion = [Int]$MinorVersion[$MinorV ersion.Cou nt - 1]
$MinorVersion=$MinorVersio n +1
$NewVersion = "$($CurrentVersion.SubStri ng(0, $CurrentVersion.IndexOf('. ')))." + `
"$([Math]::Ceiling(([DateT ime]::Now) .Month / 3)).$(([DateTime]::Now).Mo nth)." + `
"$MinorVersion"
Write-Host "Current Version: $CurrentVersion"
Write-Host "New version: $NewVersion"
Open in New Window
$VersionText = "[assembly: AssemblyFileVersion(`"1.0.
[Void]($VersionText -Match "`".*`"")
$CurrentVersion = $Matches[0] -Replace "`""
$MinorVersion = $CurrentVersion.Split(".")
$MinorVersion = [Int]$MinorVersion[$MinorV
$MinorVersion=$MinorVersio
$NewVersion = "$($CurrentVersion.SubStri
"$([Math]::Ceiling(([DateT
"$MinorVersion"
Write-Host "Current Version: $CurrentVersion"
Write-Host "New version: $NewVersion"
Open in New Window
Sorry, I totally forgot to actually increment the number! Just needs a + 1 adding as below.
Chris
$VersionText = "[assembly: AssemblyFileVersion(`"1.0.0.0`")]"
[Void]($VersionText -Match "`".*`"")
$CurrentVersion = $Matches[0] -Replace "`""
$MinorVersion = $CurrentVersion.Split(".")
$MinorVersion = [Int]$MinorVersion[$MinorVersion.Count - 1] + 1
$NewVersion = "$($CurrentVersion.SubString(0, $CurrentVersion.IndexOf('.')))." + `
"$([Math]::Ceiling(([DateTime]::Now).Month / 3)).$(([DateTime]::Now).Month)." + `
"$MinorVersion"
Write-Host "Current Version: $CurrentVersion"
Write-Host "New version: $NewVersion"
lol yes, quite :) Sorry about that, got a bit distracted :)
Chris
ASKER
Hi chris,
sorry to bother y ou ,
Iam trying to give administrator ful control on one directory . But iam getting below error.
PS C:\Vdir> .\Permission.ps1
Set-Acl : Attempted to perform an unauthorized operation.
At C:\Vdir\Permission.ps1:5 char:8
+ Set-ACL <<<< "D:\inetpub\wwwroot\GlobeA rc2" -aclObject $ACL
sorry to bother y ou ,
Iam trying to give administrator ful control on one directory . But iam getting below error.
PS C:\Vdir> .\Permission.ps1
Set-Acl : Attempted to perform an unauthorized operation.
At C:\Vdir\Permission.ps1:5 char:8
+ Set-ACL <<<< "D:\inetpub\wwwroot\GlobeA
$Rule =`New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators", "FullControl",@("ObjectInherit", "ContainerInherit"), "None", "Allow")`
$ACL = Get-ACL "D:\inetpub\wwwroot\GlobeArc2"
$ACL.AddAccessRule($Rule)
Set-ACL "D:\inetpub\wwwroot\GlobeArc2" -aclObject $ACL
Is it Windows 2003?
I guess you do have the rights to make the change? And does the code work through the regular shell rather than as a script?
Nothing wrong with your code in general, it executes perfectly here.
Chris
ASKER
Hi Chris,
I hope yo must be doing good.
Can you let me know how to change the settings of App pool to user different account rather then local account using PS script.
Sunil
I hope yo must be doing good.
Can you let me know how to change the settings of App pool to user different account rather then local account using PS script.
Sunil
Should just be something like this...
Chris
$AppPoolName = "New"
$AppPool = [ADSI]"IIS://localhost/W3SVC/AppPools/$AppPoolName"
$AppPool.Put("AppPoolIdentityType", 3)
$AppPool.Put("WAMUserName", "SomeUser")
$AppPool.Put("WAMUserPass", "SomePassword")
$AppPool.SetInfo()
ASKER
Thanks Chris
When iam tryin to pass parameter, its giving error saying
PS C:\Vdir> .\IdentityPool.ps1 -apppool PricingServer -userid csfb\sysibdpribuil
duserd -password inma85te
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3 1 char:13
+ $AppPool.Put( <<<< "AppPoolIdentityType", 3)
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3 2 char:13
+ $AppPool.Put( <<<< "WAMUserName", $userid)
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3 3 char:13
+ $AppPool.Put( <<<< "WAMUserPass", $password)
Method invocation failed because [System.String] doesn't contain a method named
'SetInfo'.
At C:\Vdir\IdentityPool.ps1:3 4 char:17
+ $AppPool.SetInfo( <<<< )
Below is the script.
param (
[switch]$help,
[string]$apppool = {},
[string]$userid = {},
[string]$password = {}
)
if ( $help ) {
"Usage: Admin.ps1 -apppool <string> -userid <userid> -password <string>"
exit 0
}
if ( $apppool.Length -eq 0 ) {
"Please enter apppool name."
exit 1
}
if ( $userid.Length -eq 0 ) {
"Please enter user."
exit 1
}
if ( $password.Length -eq 0 ) {
"Please enter password."
exit 1
}
$AppPoolName = $apppool
$AppPool = [ADSI]"IIS://localhost/W3S VC/AppPool s/$AppPool Name"
$AppPool.Put("AppPoolIdent ityType", 3)
$AppPool.Put("WAMUserName" , $userid)
$AppPool.Put("WAMUserPass" , $password)
$AppPool.SetInfo()
When iam tryin to pass parameter, its giving error saying
PS C:\Vdir> .\IdentityPool.ps1 -apppool PricingServer -userid csfb\sysibdpribuil
duserd -password inma85te
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3
+ $AppPool.Put( <<<< "AppPoolIdentityType", 3)
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3
+ $AppPool.Put( <<<< "WAMUserName", $userid)
Method invocation failed because [System.String] doesn't contain a method named
'Put'.
At C:\Vdir\IdentityPool.ps1:3
+ $AppPool.Put( <<<< "WAMUserPass", $password)
Method invocation failed because [System.String] doesn't contain a method named
'SetInfo'.
At C:\Vdir\IdentityPool.ps1:3
+ $AppPool.SetInfo( <<<< )
Below is the script.
param (
[switch]$help,
[string]$apppool = {},
[string]$userid = {},
[string]$password = {}
)
if ( $help ) {
"Usage: Admin.ps1 -apppool <string> -userid <userid> -password <string>"
exit 0
}
if ( $apppool.Length -eq 0 ) {
"Please enter apppool name."
exit 1
}
if ( $userid.Length -eq 0 ) {
"Please enter user."
exit 1
}
if ( $password.Length -eq 0 ) {
"Please enter password."
exit 1
}
$AppPoolName = $apppool
$AppPool = [ADSI]"IIS://localhost/W3S
$AppPool.Put("AppPoolIdent
$AppPool.Put("WAMUserName"
$AppPool.Put("WAMUserPass"
$AppPool.SetInfo()
You're passing AppPool as a string here:
[string]$apppool = {},
If you want to pass the name, make that:
[string]$apppoolname = {},
Because of that it thinks AppPool is a string rather than a DirectoryEntry.
Chris
ASKER
But iam assigning that value in the script
$AppPoolName = $apppool
PS C:\Vdir> .\IdentityPool.ps1 -Apppool ssss -userid xxx -password aaa
$AppPoolName = $apppool
$AppPoolName = $apppool
PS C:\Vdir> .\IdentityPool.ps1 -Apppool ssss -userid xxx -password aaa
$AppPoolName = $apppool
It just needs to use a separate variable name, its having problems reusing the parameter value (because it's hard-set as a String type).
Modified below, should work like this.
Chris
param (
[switch]$help,
[string]$apppool = {},
[string]$userid = {},
[string]$password = {}
)
if ( $help ) {
"Usage: Admin.ps1 -apppool <string> -userid <userid> -password <string>"
exit 0
}
if ( $apppool.Length -eq 0 ) {
"Please enter apppool name."
exit 1
}
if ( $userid.Length -eq 0 ) {
"Please enter user."
exit 1
}
if ( $password.Length -eq 0 ) {
"Please enter password."
exit 1
}
$IISAppPool = [ADSI]"IIS://localhost/W3SVC/AppPools/$AppPool"
$IISAppPool.Put("AppPoolIdentityType", 3)
$IISAppPool.Put("WAMUserName", $userid)
$IISAppPool.Put("WAMUserPass", $password)
$IISAppPool.SetInfo()
ASKER
Hi Chris,
Thanks for your help.
I need one more help.
Do you have any idea about changing windows service logon account using windows powershell script. right now we are using local account to run windows services.
Thanks
Thanks for your help.
I need one more help.
Do you have any idea about changing windows service logon account using windows powershell script. right now we are using local account to run windows services.
Thanks
ASKER
Hi Chris,
Any help?
Any help?
Sorry, forgot to pop a note up.
It should work with....
(Get-WMIObject Win32_Service -Filter "Name='TheServiceName'").C
$Null, $Username, $Password, $Null, $Null, $Null)
The Change Method has rather a lot of parameters, all those $Null entries just leave the value at the current. We just change StartName and StartPassword.
You should get an object back, hopefully the Return Value will be 0, indicating success.
Chris
ASKER
Thanks Chris. I got Below message.
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 1
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ReturnValue : 0
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 1
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ReturnValue : 0
Good, that indicates success :)
If you don't want the response you can assign it to a variable or void the entire thing... one of:
$Return = (Get-WMIObject Win32_Service -Filter "Name='TheServiceName'").C
$Null, $Null, $Null, $Null, $Null, $Null, $Username, $Password, $Null, $Null, $Null)
If ($Return.ReturnValue -eq 0) {
Write-Host "Success"
} else {
Write-Host "Failure: $($Return.ReturnValue)"
}
Or voiding it:
[Void](Get-WMIObject Win32_Service -Filter "Name='TheServiceName'").C
$Null, $Null, $Null, $Null, $Null, $Null, $Username, $Password, $Null, $Null, $Null)
Which just drops any kind of return value.
Chris
ASKER
Hi Chris,
Thanks. I was able to update the service logon account , but some how password is not updated. I had to set it up manually for Windows service Logon.
Any reason why?
Thanks. I was able to update the service logon account , but some how password is not updated. I had to set it up manually for Windows service Logon.
Any reason why?
param (
[switch]$help,
[string]$username = {},
[string]$password = {},
[string]$servicename = {}
)
if ( $help ) {
"Usage: Admin.ps1 -username <string> -password <string> -servicename <string>"
exit 0
}
if ( $username.Length -eq 0 ) {
"Please enter username with domain."
exit 1
}
if ( $Password.Length -eq 0 ) {
"Please enter Password."
exit 1
}
if ( $servicename.Length -eq 0 ) {
"Please enter service name."
exit 1
}
(Get-WMIObject Win32_Service -Filter "Name='$servicename'").Change($Null, $Null, $Null, $Null, $Null, `
$Null, $Username, $Password, $Null, $Null, $Null)
ASKER
Can we just start services from script itself? so that we can know if it updated password as welll?
Hey,
Sure, you'll find there's a StartService and StopService method for the WMI object:
Chris
$Service = Get-WMIObject Win32_Service -Filter "Name='TheServiceName'"
# Change the username and password
$Return = $Service.Change( `
$Null, $Null, $Null, $Null, $Null, $Null, $Username, $Password, $Null, $Null, $Null)
# Stop the service
$Service.StopService()
# Start the service
$Service.StartService()
ASKER
Chris,
it seems issue with ` in the commmand
PS C:\> .\ChangeWinService.ps1 -help
Missing ')' in method call.
At C:\ChangeWinService.ps1:35 char:27
+ $Return = $Service.Change(` <<<< $Null, $Null, $Null, $Null, $Null, $Null, $U
sername, $Password, $Null, $Null, $Null)
it seems issue with ` in the commmand
PS C:\> .\ChangeWinService.ps1 -help
Missing ')' in method call.
At C:\ChangeWinService.ps1:35
+ $Return = $Service.Change(` <<<< $Null, $Null, $Null, $Null, $Null, $Null, $U
sername, $Password, $Null, $Null, $Null)
param (
[switch]$help,
[string]$username = {},
[string]$password = {},
[string]$servicename = {}
)
if ( $help ) {
"Usage: Admin.ps1 -username <string> -password <string> -servicename <string>"
exit 0
}
if ( $username.Length -eq 0 ) {
"Please enter username with domain."
exit 1
}
if ( $Password.Length -eq 0 ) {
"Please enter Password."
exit 1
}
if ( $servicename.Length -eq 0 ) {
"Please enter service name."
exit 1
}
$Service = Get-WMIObject Win32_Service -Filter "Name='$Servicename'"
$Service.StopService()
$Return = $Service.Change(`$Null, $Null, $Null, $Null, $Null, $Null, $Username, $Password, $Null, $Null, $Null)
If ($Return.ReturnValue -eq 0) {
Write-Host "Success"
} else {
Write-Host "Failure: $($Return.ReturnValue)"
}
$Service.StartService()
#(Get-WMIObject Win32_Service -Filter "Name='$servicename'").Change($Null, $Null, $Null, $Null, $Null, `
$Null, $Username, $Password, $Null, $Null, $Null)
ASKER
Hi Chris,
any update?
any update?
ASKER
Chris,
Can you also help in issues with website remapping?
Idea is to repoint website to use different virtual directory via script.
Can you also help in issues with website remapping?
Idea is to repoint website to use different virtual directory via script.
Your values above are fine, but you do need to run "CommitChanges()" again to actually set them.
As for the rest of the values, they are:
Recycling:
Recycle worker process (number of requests) - PeriodicRestartRequests
Recycle worker process at the following times - PeriodicRestartSchedule (array)
Maximum Virtual Memory (in MB) - PeriodicRestartMemory (** in KB **)
Maximum Used Memory (in MB) - PeriodicRestartPrivateMemo
Performance:
Shutdown process after being idle for (time in minutes) - idleTimeout
Limit the kernel request queue (number of requests) - AppPoolQueueLength
Enable CPU Monitoring (if the following are set):
Maximum CPU Use (percentage) - CPULimit ( * 1000; 100% = 100000)
Refresh CPU Usage Numbers (in minutes) - CPUResetInterval
Action performed when CPU usage exceeds maximum CPU - CPUAction (No Action = 0; Shutdown = 1)
Maximum number of worker processes - MaxProcesses
Health:
Enable Pinging - PingingEnabled (On = 1; Off = 0)
Ping worker process (frequency in seconds) - PingInterval
Enable Rapid-Fail Protection - RapidFailProtection (On = 1; Off = 0)
Failures - RapidFailProtectionMaxCras
Time Period (in minutes) - RapidFailProtectionInterva
Worker process must startup within (time in seconds) - StartupTimeLimit
Worker process must shutdown within (time in seconds) - ShutdownTimeLimit
Identity:
Predefined - AppPoolIdentityType (Local System = 0; Local Server = 1; Network Service = 2)
Configurable - AppPoolIdentityType (3)
Username - WAMUserName
Password - WAMUserPass
HTH
Chris