You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sitegen.ps1 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. $basedir = "C:\inetpub\"
  2. $baseweb = "IIS:\Sites\"
  3. $basepool = "IIS:\AppPools\"
  4. $sqlinstance = "."
  5. $Shares=[WMICLASS]”WIN32_Share”
  6. Import-Module WebAdministration
  7. [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
  8. $sqlserver = New-Object Microsoft.SqlServer.Management.Smo.Server($sqlinstance)
  9. Add-Type -Path (Join-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path) -ChildPath 'CubicOrange.Windows.Forms.ActiveDirectory.dll')
  10. $DialogPicker = New-Object CubicOrange.Windows.Forms.ActiveDirectory.DirectoryObjectPickerDialog
  11. $DialogPicker.DefaultLocations = [CubicOrange.Windows.Forms.ActiveDirectory.Locations]::JoinedDomain
  12. $DialogPicker.AllowedObjectTypes = [CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Groups,[CubicOrange.Windows.Forms.ActiveDirectory.ObjectTypes]::Users
  13. $DialogPicker.MultiSelect = $true
  14. $frontwebconfig = '<?xml version="1.0" encoding="UTF-8"?>
  15. <configuration>
  16. <system.webServer>
  17. <rewrite>
  18. <rules>
  19. <rule name="api">
  20. <match url="^api(/(.*))?$" />
  21. <action type="Rewrite" url="http://%%API_HOST%%/{R:1}" />
  22. </rule>
  23. </rules>
  24. </rewrite>
  25. </system.webServer>
  26. </configuration>'
  27. function sitegen($name)
  28. {
  29. $sitedir = "$basedir$name"
  30. $siteweb = "$baseweb$name"
  31. $sitepool = "$basepool$name"
  32. if (siteexists($name))
  33. {
  34. return $false
  35. }
  36. # Create app pool
  37. New-Item $sitepool | out-null
  38. # Create website
  39. New-Item $siteweb -bindings @{protocol="http";bindingInformation=":80:$name"} -physicalPath $sitedir | out-null
  40. Set-ItemProperty $siteweb -name applicationPool -value $name | out-null
  41. # Create directory
  42. New-Item $sitedir -type directory | out-null
  43. # Create share
  44. $Shares.Create($sitedir, $name, 0) | out-null
  45. return $true
  46. }
  47. function siteexists($name)
  48. {
  49. $sitedir = "$basedir$name"
  50. $siteweb = "$baseweb$name"
  51. $sitepool = "$basepool$name"
  52. return (Test-path($sitedir)) -or (Test-path($sitedir)) -or (Test-path($sitepool))
  53. }
  54. function siterm($name)
  55. {
  56. $sitedir = "$basedir$name"
  57. $siteweb = "$baseweb$name"
  58. $sitepool = "$basepool$name"
  59. # Remove directory
  60. if (Test-Path $sitedir)
  61. {
  62. Remove-Item $sitedir -Recurse | out-null
  63. }
  64. # Remove website
  65. if (Test-Path $siteweb)
  66. {
  67. Remove-Item $siteweb -Recurse | out-null
  68. }
  69. # Remove app pool
  70. if (Test-Path $sitepool)
  71. {
  72. Remove-Item $sitepool -Recurse | out-null
  73. }
  74. # Remove share
  75. $share = Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='$name'"
  76. if ($share)
  77. {
  78. $share.delete() | out-null
  79. }
  80. }
  81. function dbgen($name)
  82. {
  83. if (dbexists($name))
  84. {
  85. return $false
  86. }
  87. $db = New-Object Microsoft.SqlServer.Management.Smo.Database($sqlserver, $name)
  88. $db.Create() | out-null
  89. return $true
  90. }
  91. function dbexists($name)
  92. {
  93. $db = $sqlserver.Databases[$name]
  94. if ($db)
  95. {
  96. return $true
  97. }
  98. else
  99. {
  100. return $false
  101. }
  102. }
  103. function dbrm($name)
  104. {
  105. if (dbexists($name))
  106. {
  107. $sqlserver.KillDatabase($name) | out-null
  108. }
  109. }
  110. function apigen($name)
  111. {
  112. return (sitegen("api.$name")) -and (dbgen($name))
  113. }
  114. function apiexists($name)
  115. {
  116. return (siteexists("api.$name")) -or (dbexists($name))
  117. }
  118. function apirm($name)
  119. {
  120. siterm("api.$name")
  121. dbrm($name)
  122. }
  123. function frontgen($name)
  124. {
  125. if (-not (sitegen($name)))
  126. {
  127. return $false
  128. }
  129. $webconfig = $frontwebconfig -replace "%%API_HOST%%", "api.$name"
  130. $webconfig | Set-Content "$basedir$name\web.config"
  131. return $true
  132. }
  133. function frontexists($name)
  134. {
  135. return (siteexists($name))
  136. }
  137. function frontrm($name)
  138. {
  139. siterm($name)
  140. }
  141. function appgen($name)
  142. {
  143. return (frontgen($name)) -and (apigen($name))
  144. }
  145. function appexists($name)
  146. {
  147. return (frontexists($name)) -or (apiexists($name))
  148. }
  149. function apprm($name)
  150. {
  151. frontrm($name)
  152. apirm($name)
  153. }
  154. function getusers()
  155. {
  156. $DialogPicker.ShowDialog()
  157. return $DialogPicker.SelectedObjects
  158. }