GetShitSorted.ps1 149 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764
  1. # NetScaler Configuration Extractor
  2. # Note: This script works on Windows 10, but the regex match group commands fail on Windows 7
  3. param (
  4. # Full path to source config file saved from NetScaler (System > Diagnostics > Running Configuration)
  5. # If set to "", then the script will prompt for the file.
  6. [string]$configFile = "",
  7. #$configFile = "$env:userprofile\Downloads\nsrunning.conf"
  8. # Name of vServer - or VIP - case insensitive
  9. # Partial match supported - if more than one match, the script will prompt for a selection. Set it to "" to list all vServers.
  10. # If vserver name is exact match for one vserver, that vserver will be used, even if it's a substring match for another vserver
  11. [string]$vserver = "",
  12. # Optional filename to save output - file will be overwritten
  13. # If you intend to batch import to NetScaler, then no spaces or capital letters in the file name.
  14. # If set to "screen", then output will go to screen.
  15. # If set to "", then the script will prompt for a file. Clicking cancel will output to the screen.
  16. #[string]$outputFile = "",
  17. #[string]$outputFile = "screen",
  18. [string]$outputFile = "$env:userprofile\Downloads\nsconfig.conf",
  19. #[string]$outputFile = "$env:HOME/Downloads/nsconfig.conf",
  20. # Optional text editor to open saved output file - text editor should handle UNIX line endings (e.g. Wordpad or Notepad++)
  21. [string]$textEditor = "notepad++.exe",
  22. # Optional get CSW vserver Binds for selected LB and/or VPN virtual server
  23. [switch]$cswBind,
  24. # Max # of nFactor Next Factors to extract
  25. [int]$nFactorNestingLevel = 5
  26. )
  27. # Change Log
  28. # ----------
  29. # 2024 Sep 25 - added "add monitor" instead of "add lb monitor"
  30. # 2023 June 30 - added port numbers to VIP list; bug fixes
  31. # 2022 Sep 20 - added bot management
  32. # 2022 July 10 - added support for * in object names (e.g., *.corp.com)
  33. # 2021 Nov 4 - performance improvements
  34. # 2021 Oct 15 - output SAML SSO Actions; performance improvements
  35. # 2021 Jun 1 - added search "policy expressions" for other appexpert objects
  36. # 2021 May 27 - added messageactions to output
  37. # 2021 Apr 30 - fixed named expressions
  38. # 2021 Apr 30 - added: get variables from expressions; get variable assignments from responders
  39. # 2021 Apr 27 - fixed sorting of Backup vServers
  40. # 2021 Apr 20 - added DISABLED state to VIP selection screen
  41. # 2021 Feb 5 - fixed TACACS policies and Local Authentication Policies, including global
  42. # 2020 Dec 7 - added Captcha action and NoAuth action
  43. # 2020 Dec 7 - added parameter to set nFactor nesting level
  44. # 2020 Dec 7 - sorted authentication policylabels so NextFactors are created first
  45. # 2019 Jun 3 - added RNAT; added OTP Push Service; added partitions; added Azure Keys
  46. # 2019 Apr 22 - added vServer VIP extraction from other commands (e.g. LDAP Action)
  47. # 2019 Apr 15 - fixed server enumeration
  48. # 2019 Apr 7 - reordered Policy Expression output
  49. # 2019 Apr 1 - new "Sys" option to extract System Settings
  50. # 2019 Mar 6 - fixed Visualizer substring match, and added emailAction
  51. # 2018 Dec 27 - fix aaa tm trafficpolicy/action aaa kcdAccount output (BKF)
  52. # 2018 Dec 2 - added nFactor Visualizer for AAA vServers
  53. # 2018 Nov 19 - MacOS: added List Dialog to select vServers. fix: dialogfocus (BKF)
  54. # 2018 Nov 17 - changed vServer selection to Out-GridView (GUI)
  55. # 2018 Nov 16 - support for MacOS popups for nsconf and saveas. Switch for sort to Sort-object to support MacOs & Powershell core 6
  56. # 2018 Nov 5 - check text editor existince (h/t Bjørn-Kåre Flister)
  57. # 2018 Nov 5 - switch to extract CS vServer for selected LB/VPN/AAA vServer (h/t Bjørn-Kåre Flister)
  58. # 2018 Sep 19 - fixed SAML Policy and SAML Action
  59. # 2018 Sep 11 - parameterized the script, fixed specified vServer
  60. # 2018 July 22 - added ICA Parameters to VPN Global Settings
  61. # 2018 July 18 - added preauthentication policy, added AlwaysOn profile
  62. # 2018 July 12 - added two levels of nFactor NextFactor extraction
  63. # 2018 July 8 - added DNS configuration to every extraction
  64. # 2018 July 7 - added GSLB Sites and rpcNodes
  65. # 2018 July 4 - extract local LB VIPs from Session Action URLs (e.g. StoreFront URL to local LB VIP)
  66. # 2018 July 3 - extract DNS vServers from "set vpn parameter" and Session Actions
  67. # 2018 July 3 - added "*" to select all vServers
  68. # 2018 July 3 - updated for 12.1 (SSL Log Profile, IP Set, Analytics Profile)
  69. # 2018 Jan 23 - skip gobal cache settings if cache feature is not enabled
  70. # 2018 Jan 4 - Sirius' Mark Scott added code to browse to open and save files. Added kcdaccounts to extraction.
  71. # Start of script code
  72. cls
  73. # Function to prompt the user for a NetScaler config file.
  74. # The NetScaler config file can be found in the System > Diagnostics > Running Configuration location in the GUI
  75. Function Get-InputFile($initialDirectory)
  76. {
  77. if ($IsMacOS){
  78. $filename = (('tell application "SystemUIServer"'+"`n"+'activate'+"`n"+'set fileName to POSIX path of (choose file with prompt "NetScaler documentation file")'+"`n"+'end tell' | osascript -s s) -split '"')[1]
  79. if ([String]::IsNullOrEmpty($filename)){break}else{$filename}
  80. }else{
  81. [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
  82. $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
  83. $OpenFileDialog.Title = "Open NetScaler Config"
  84. $OpenFileDialog.initialDirectory = $initialDirectory
  85. $OpenFileDialog.filter = "NetScaler Config (*.conf)| *.conf|All files (*.*)|*.*"
  86. $OpenFileDialog.ShowDialog() | Out-Null
  87. $OpenFileDialog.filename
  88. }
  89. }
  90. # Function to prompt the user to save the output file
  91. Function Get-OutputFile($initialDirectory)
  92. {
  93. if ($IsMacOS){
  94. $DefaultName = 'default name "nsconfig.conf"'
  95. if ($initialDirectory){
  96. $DefaultLocation = 'default location "'+$initialDirectory+'"'
  97. }
  98. $filename = (('tell application "SystemUIServer"'+"`n"+'activate'+"`n"+'set theName to POSIX path of (choose file name '+$($DefaultName)+' '+$($DefaultLocation)+' with prompt "Save NetScaler documentation file as")'+"`n"+'end tell' | osascript -s s) -split '"')[1]
  99. $filename
  100. }else{
  101. [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
  102. $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
  103. $SaveFileDialog.Title = "Save Extracted Config"
  104. $SaveFileDialog.initialDirectory = $initialDirectory
  105. $SaveFileDialog.filter = "NetScaler Config File (*.conf)| *.conf|All files (*.*)|*.*"
  106. $SaveFileDialog.ShowDialog() | Out-Null
  107. $SaveFileDialog.filename
  108. }
  109. }
  110. # Run the Get-InputFile function to ask the user for the NetScaler config file
  111. if (!$configFile) {
  112. $configFile = Get-InputFile $inputfile
  113. }
  114. if (!$configFile) { exit }
  115. "Loading config file $configFile ...`n"
  116. $config = ""
  117. $config = Get-Content $configFile -ErrorAction Stop
  118. function printProgress ($origObjects, $NSObjectType) {
  119. # Check if anything was added and display
  120. $newObjects = @()
  121. if (-not $origObjects) {
  122. $newObjects = $nsObjects.$NSObjectType
  123. } else {
  124. $newObjects = (Compare-Object $origObjects $nsObjects.$NSObjectType).InputObject
  125. }
  126. if ($newObjects)
  127. {
  128. foreach ($newObject in $newObjects) {
  129. write-host (("Found {0,-25} " -f $NSObjectType) + $newObject)
  130. }
  131. }
  132. return $newObjects
  133. }
  134. # returns a regex clause with multiple objects or'd to speed up regex matching
  135. function getMatchExpression ($Objects) {
  136. # returns a regex clause with multiple objects or'd to speed up regex matching
  137. $matchExpression = "("
  138. foreach ($uniqueObject in $Objects) {
  139. $uniqueObjectDots = $uniqueObject -replace "\.", "\."
  140. $uniqueObjectDots = $uniqueObjectDots -replace "\*", "\*"
  141. $matchExpression += $uniqueObjectDots + "|"
  142. }
  143. $matchExpression = $matchExpression.Substring(0,$matchExpression.length - 1) + ")"
  144. return $matchExpression
  145. }
  146. # searches matches for other objects (e.g., pattern set)
  147. # then adds all matches to the main matches hash table
  148. function addNSObject ($NSObjectType, $NSObjectName) {
  149. if (!$NSObjectName) { return }
  150. # write-host $NSObjectType $NSObjectName #Debug
  151. if (!$nsObjects.$NSObjectType) { $nsObjects.$NSObjectType = @()}
  152. $origObjects = $nsObjects.$NSObjectType
  153. $nsObjects.$NSObjectType += $NSObjectName
  154. $nsObjects.$NSObjectType = @($nsObjects.$NSObjectType | Select-Object -Unique)
  155. $newObjects = printProgress $origObjects $NSObjectType
  156. if (!$newObjects) {return}
  157. # Get Filtered Config for the object being added to check for policy sub-objects
  158. # Don't match "-" to prevent "add serviceGroup -netProfile"
  159. # Ensure there's whitespace before match to prevent substring matches (e.g. server matching MyServer)
  160. $filteredConfig = ""
  161. $matchExpression = getMatchExpression $newObjects
  162. $filteredConfig = $config -match "[^-\S]" + $NSObjectType + " " + $matchExpression + "[^\S]"
  163. if (!$filteredConfig) {$filteredConfig = $uniqueObject}
  164. # Look in expressions for other objects
  165. if ($filteredConfig -match '["|(]' ) {
  166. # Look for Pattern Sets
  167. $foundObjects = getNSObjects $filteredConfig "policy patset"
  168. if ($foundObjects) {
  169. $origObjects = $nsObjects."policy patset"
  170. $nsObjects."policy patset" += $foundObjects
  171. $nsObjects."policy patset" = @($nsObjects."policy patset" | Select-Object -Unique)
  172. $newObjects = printProgress $origObjects "policy patset"
  173. }
  174. # Look for Data Sets
  175. $foundObjects = getNSObjects $filteredConfig "policy dataset"
  176. if ($foundObjects) {
  177. $nsObjects."policy dataset" += $foundObjects
  178. $nsObjects."policy dataset" = @($nsObjects."policy dataset" | Select-Object -Unique)
  179. }
  180. # Look for String Maps
  181. $foundObjects = getNSObjects $filteredConfig "policy stringmap"
  182. if ($foundObjects) {
  183. $nsObjects."policy stringmap" += $foundObjects
  184. $nsObjects."policy stringmap" = @($nsObjects."policy stringmap" | Select-Object -Unique)
  185. }
  186. # Look for URL Sets
  187. $foundObjects = getNSObjects $filteredConfig "policy urlset"
  188. if ($foundObjects) {
  189. $nsObjects."policy urlset" += $foundObjects
  190. $nsObjects."policy urlset" = @($nsObjects."policy urlset" | Select-Object -Unique)
  191. }
  192. # Look for Expressions
  193. $foundObjects = getNSObjects $filteredConfig "policy expression"
  194. if ($foundObjects) {
  195. addNsObject "policy expression" $foundObjects
  196. #$nsObjects."policy expression" += $foundObjects
  197. #$nsObjects."policy expression" = @($nsObjects."policy expression" | Select-Object -Unique)
  198. }
  199. # Look for Variables
  200. $foundObjects = getNSObjects $filteredConfig "ns variable"
  201. if ($foundObjects) {
  202. $nsObjects."ns variable" += $foundObjects
  203. $nsObjects."ns variable" = @($nsObjects."ns variable" | Select-Object -Unique)
  204. }
  205. # Look for Policy Maps
  206. $foundObjects = getNSObjects $filteredConfig "policy map"
  207. if ($foundObjects) {
  208. $nsObjects."policy map" += $foundObjects
  209. $nsObjects."policy map" = @($nsObjects."policy map" | Select-Object -Unique)
  210. }
  211. # Look for Limit Identifiers
  212. $foundObjects = getNSObjects $filteredConfig "ns limitIdentifier"
  213. if ($foundObjects) {
  214. $nsObjects."ns limitIdentifier" += $foundObjects
  215. $nsObjects."ns limitIdentifier" = @($nsObjects."ns limitIdentifier" | Select-Object -Unique)
  216. }
  217. # Look for Stream Identifiers
  218. $foundObjects = getNSObjects $filteredConfig "stream identifier"
  219. if ($foundObjects) {
  220. $nsObjects."stream identifier" += $foundObjects
  221. $nsObjects."stream identifier" = @($nsObjects."stream identifier" | Select-Object -Unique)
  222. }
  223. # Look for Policy Extensions
  224. $foundObjects = getNSObjects $filteredConfig "ns extension"
  225. if ($foundObjects) {
  226. $origObjects = $nsObjects."ns extension"
  227. $nsObjects."ns extension" += $foundObjects
  228. $nsObjects."ns extension" = @($nsObjects."ns extension" | Select-Object -Unique)
  229. printProgress $origObjects "ns extension"
  230. }
  231. # Look for Callouts
  232. if ($filteredConfig -match "CALLOUT") {
  233. if (!$nsObjects."policy httpCallout") { $nsObjects."policy httpCallout" = @()}
  234. $nsObjects."policy httpCallout" += getNSObjects $filteredConfig "policy httpCallout"
  235. $nsObjects."policy httpCallout" = @($nsObjects."policy httpCallout" | Select-Object -Unique)
  236. }
  237. # Look for DNS Records
  238. $foundObjects = getNSObjects $filteredConfig "dns addRec"
  239. if ($foundObjects)
  240. {
  241. $nsObjects."dns addRec" += $foundObjects
  242. $nsObjects."dns addRec" = @($nsObjects."dns addRec" | Select-Object -Unique)
  243. }
  244. $foundObjects = getNSObjects $filteredConfig "dns nsRec"
  245. if ($foundObjects)
  246. {
  247. $nsObjects."dns nsRec" += $foundObjects
  248. $nsObjects."dns nsRec" = @($nsObjects."dns nsRec" | Select-Object -Unique)
  249. }
  250. # Look for vServer VIPs
  251. if ($filteredConfig -match "\d+\.\d+\.\d+\.\d+" -and $NSObjectType -notmatch " vserver") {
  252. $objectsToAdd = getNSObjects $filteredConfig "lb vserver"
  253. if ($objectsToAdd) {
  254. if (!$nsObjects."lb vserver") { $nsObjects."lb vserver" = @()}
  255. $nsObjects."lb vserver" += getNSObjects $filteredConfig "lb vserver"
  256. $nsObjects."lb vserver" = @($nsObjects."lb vserver" | Select-Object -Unique)
  257. GetLBvServerBindings $objectsToAdd
  258. }
  259. $objectsToAdd = getNSObjects $filteredConfig "cs vserver"
  260. if ($objectsToAdd) {
  261. if (!$nsObjects."cs vserver") { $nsObjects."cs vserver" = @()}
  262. $nsObjects."cs vserver" += getNSObjects $filteredConfig "cs vserver"
  263. $nsObjects."cs vserver" = @($nsObjects."cs vserver" | Select-Object -Unique)
  264. }
  265. $objectsToAdd = getNSObjects $filteredConfig "vpn vserver"
  266. if ($objectsToAdd) {
  267. if (!$nsObjects."vpn vserver") { $nsObjects."vpn vserver" = @()}
  268. $nsObjects."vpn vserver" += getNSObjects $filteredConfig "vpn vserver"
  269. $nsObjects."vpn vserver" = @($nsObjects."vpn vserver" | Select-Object -Unique)
  270. }
  271. }
  272. }
  273. }
  274. # Search for objects of type bound to selected vservers
  275. function getNSObjects ($matchConfig, $NSObjectType, $paramName, $position) {
  276. if ($paramName -and !($matchConfig -match $paramName)) {
  277. return
  278. }
  279. # Read all objects of type from from full config
  280. # Cache objects to speed up multiple iterations of this function
  281. if ($nsObjectsCache.$NSObjectType) {
  282. $objectsAll = $nsObjectsCache.$NSObjectType
  283. } else {
  284. $objectsAll = $config | select-string -Pattern ('^(add|set|bind) ' + $NSObjectType + ' (".*?"|[^-"]\S+)($| )') | ForEach-Object {$_.Matches.Groups[2].value}
  285. $objectsAll = $objectsAll | Where-Object { $nsObjects.$NSObjectType -notcontains $_ }
  286. $objectsAll = $objectsAll | sort-object -Unique
  287. $nsObjectsCache.$NSObjectType = $objectsAll
  288. }
  289. if ($objectsAll.length -eq 0) {return}
  290. # if looking for matching vServers, also match on VIPs
  291. if ($NSObjectType -match " vserver") {
  292. $VIPsAll = $config | select-string -Pattern ('^add ' + $NSObjectType + ' (".*?"|[^-"]\S+) \S+ (\d+\.\d+\.\d+\.\d+) (\d+)') | ForEach-Object {
  293. @{
  294. VIP = $_.Matches.Groups[2].value
  295. Name = $_.Matches.Groups[1].value
  296. Port = $_.Matches.Groups[3].value
  297. }
  298. }
  299. $VIPsAll = $VIPsAll | Where-Object {$_.VIP -ne "0.0.0.0"}
  300. }
  301. # if ($NSObjectType -match "ssl certKey")
  302. # { write-host $objectCandidate}
  303. # Strip Comments
  304. $matchConfig = $matchConfig | ForEach-Object {$_ -replace '-comment ".*?"' }
  305. # Build Position matching string - match objectCandidate after the # of positions - avoids Action name matching Policy name
  306. if ($position) {
  307. $positionString = ""
  308. 1..($position) | ForEach-Object {
  309. $positionString += '(".*?"|[^"]\S+) '
  310. }
  311. $positionString += ".* "
  312. }
  313. # Match objects to matchConfig
  314. # optional searchHint helps prevent too many matches (e.g. "tcp")
  315. $objectMatches = @()
  316. foreach ($objectCandidate in $objectsAll) {
  317. # For regex, replace dots with escaped dots and escaped *
  318. $objectCandidateDots = $objectCandidate -replace "\.", "\."
  319. $objectCandidateDots = $objectCandidateDots -replace "\*", "\*"
  320. # Trying to avoid substring matches
  321. if ($paramName) {
  322. # Compare candidate to term immediately following parameter name
  323. if (($matchConfig -match ($paramName + " " + $objectCandidateDots + "$" )) -or ($matchConfig -match ($paramName + " " + $objectCandidateDots + " "))) {
  324. $objectMatches += $objectCandidate
  325. }
  326. } elseif ($position) {
  327. # Compare candidate to all terms after the specified position # - avoids action name matching policy name
  328. if (($matchConfig -match ($positionString + $objectCandidateDots + "$")) -or ($matchConfig -match ($positionString + $objectCandidateDots + " "))) {
  329. $objectMatches += $objectCandidate
  330. # if ($objectCandidate -match "storefront") { write-host $objectCandidate;write-host ($matchConfig);read-host}
  331. }
  332. } elseif (($matchConfig -match (" " + $objectCandidateDots + "$")) -or ($matchConfig -match (" " + $objectCandidateDots + " "))) {
  333. # Look for candidate at end of string, or with spaces surrounding it - avoids substring matches
  334. $objectMatches += $objectCandidate
  335. } elseif (($matchConfig -match ('"' + $objectCandidateDots + '\\"')) -or ($matchConfig -match ('\(' + $objectCandidateDots + '\)"'))) {
  336. # Look for AppExpert objects (e.g. policy sets, callouts) in policy expressions that don't have spaces around it
  337. $objectMatches += $objectCandidate
  338. } elseif (($matchConfig -match ('//' + $objectCandidateDots)) -or ($matchConfig -match ($objectCandidateDots + ':'))) {
  339. # Look in URLs for DNS records
  340. $objectMatches += $objectCandidate
  341. } elseif (($matchConfig -match ('\.' + $objectCandidateDots + '(\.|"|\(| )'))) {
  342. # Look in Policy Expressions for Policy Extensions - .extension. or .extension" or .extension( or .extension
  343. $objectMatches += $objectCandidate
  344. } elseif (($NSObjectType -match "variable") -and ($matchConfig -match ('\$' + $objectCandidateDots))) {
  345. # Look for variables
  346. $objectMatches += $objectCandidate
  347. } elseif (($NSObjectType -match "expression") -and (($matchConfig -match ($objectCandidateDots + "\.") -or ($matchConfig -match ($objectCandidateDots + '\"'))))) {
  348. # Look for named expressions that have dot operators after it
  349. $objectMatches += $objectCandidate
  350. }
  351. }
  352. foreach ($VIP in $VIPsAll) {
  353. # For regex, replace dots with escaped dots
  354. $VIPDots = $VIP.VIP -replace "\.", "\."
  355. # Trying to avoid substring matches
  356. if ($paramName) {
  357. # Compare candidate to term immediately following parameter name
  358. if (($matchConfig -match ($paramName + " " + $VIPDots + "$" )) -or ($matchConfig -match ($paramName + " " + $VIPDots + " "))) {
  359. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  360. }
  361. } elseif ($position) {
  362. # Compare candidate to all terms after the specified position # - avoids action name matching policy name
  363. if (($matchConfig -match ($positionString + $VIPDots + "$")) -or ($matchConfig -match ($positionString + $VIPDots + " "))) {
  364. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  365. }
  366. } elseif (($matchConfig -match (" " + $VIPDots + "$")) -or ($matchConfig -match (" " + $VIPDots + " "))) {
  367. # Look for candidate at end of string, or with spaces surrounding it - avoids substring matches
  368. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  369. } elseif (($matchConfig -match ('"' + $VIPDots + '\\"')) -or ($matchConfig -match ('\(' + $VIPDots + '\)"'))) {
  370. # Look for AppExpert objects (e.g. policy sets, callouts) in policy expressions that don't have spaces around it
  371. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  372. } elseif (($matchConfig -match ('//' + $VIPDots)) -or ($matchConfig -match ($VIPDots + ':'))) {
  373. # Look in URLs for DNS records
  374. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  375. } elseif (($matchConfig -match ('\.' + $VIPDots + '(\.|"|\(| )'))) {
  376. # Look in Policy Expressions for Policy Extensions - .extension. or .extension" or .extension( or .extension
  377. if ($matchConfig -match $VIP.Port) { $objectMatches += $VIP.Name }
  378. }
  379. }
  380. return $objectMatches
  381. }
  382. function GetLBvServerBindings ($objectsList) {
  383. $matchExpression = getMatchExpression $objectsList
  384. #foreach ($lbvserver in $objectsList) {
  385. $vserverConfig = $config -match " lb vserver $matchExpression "
  386. addNSObject "service" (getNSObjects $vserverConfig "service")
  387. if ($NSObjects.service) {
  388. $serviceMatchExpression = getMatchExpression $NSObjects.service
  389. #foreach ($service in $NSObjects.service) {
  390. # wrap config matches in spaces to avoid substring matches
  391. $serviceConfig = $config -match " service $serviceMatchExpression "
  392. addNSObject "monitor" (getNSObjects $serviceConfig "lb monitor" "-monitorName")
  393. addNSObject "monitor" (getNSObjects $serviceConfig "monitor" "-monitorName")
  394. addNSObject "server" (getNSObjects $serviceConfig "server")
  395. addNSObject "ssl profile" (getNSObjects $serviceConfig "ssl profile")
  396. addNSObject "netProfile" (getNSObjects $serviceConfig "netProfile" "-netProfile")
  397. addNSObject "ns trafficDomain" (getNSObjects $serviceConfig "ns trafficDomain" "-td")
  398. addNSObject "ns httpProfile" (getNSObjects $serviceConfig "ns httpProfile" "-httpProfileName")
  399. addNSObject "ssl cipher" (getNSObjects $serviceConfig "ssl cipher")
  400. addNSObject "ssl certKey" (getNSObjects $serviceConfig "ssl certKey" "-certkeyName")
  401. addNSObject "ssl certKey" (getNSObjects $serviceConfig "ssl certKey" "-cacert")
  402. #}
  403. }
  404. addNSObject "serviceGroup" (getNSObjects $vserverConfig "serviceGroup")
  405. if ($NSObjects.serviceGroup) {
  406. $serviceGrouMatchExpression = getMatchExpression $NSObjects.serviceGroup
  407. #foreach ($serviceGroup in $NSObjects.serviceGroup) {
  408. $serviceConfig = $config -match " serviceGroup $serviceGrouMatchExpression "
  409. addNSObject "monitor" (getNSObjects $serviceConfig "lb monitor" "-monitorName")
  410. addNSObject "monitor" (getNSObjects $serviceConfig "monitor" "-monitorName")
  411. addNSObject "server" (getNSObjects $serviceConfig "server")
  412. addNSObject "ssl profile" (getNSObjects $serviceConfig "ssl profile")
  413. addNSObject "netProfile" (getNSObjects $serviceConfig "netProfile" "-netProfile")
  414. addNSObject "ns trafficDomain" (getNSObjects $serviceConfig "ns trafficDomain" "-td")
  415. addNSObject "ns httpProfile" (getNSObjects $serviceConfig "ns httpProfile" "-httpProfileName")
  416. addNSObject "ssl cipher" (getNSObjects $serviceConfig "ssl cipher")
  417. addNSObject "ssl certKey" (getNSObjects $serviceConfig "ssl certKey" "-certkeyName")
  418. addNSObject "ssl certKey" (getNSObjects $serviceConfig "ssl certKey" "-cacert")
  419. #}
  420. }
  421. addNSObject "netProfile" (getNSObjects $vserverConfig "netProfile" "-netProfile")
  422. addNSObject "ns trafficDomain" (getNSObjects $vserverConfig "ns trafficDomain" "-td")
  423. addNSObject "authentication vserver" (getNSObjects $vserverConfig "authentication vserver" "-authnVsName")
  424. addNSObject "authentication authnProfile" (getNSObjects $vserverConfig "authentication authnProfile" "-authnProfile")
  425. addNSObject "authorization policylabel" (getNSObjects $vserverConfig "authorization policylabel")
  426. addNSObject "authorization policy" (getNSObjects $vserverConfig "authorization policy" "-policyName")
  427. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policyName")
  428. addNSObject "ssl cipher" (getNSObjects $vserverConfig "ssl cipher" "-cipherName")
  429. addNSObject "ssl profile" (getNSObjects $vserverConfig "ssl profile")
  430. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certkeyName")
  431. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-cacert")
  432. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $matchExpression ") "ssl vserver")
  433. addNSObject "responder policy" (getNSObjects $vserverConfig "responder policy" "-policyName")
  434. addNSObject "responder policylabel" (getNSObjects $vserverConfig "responder policylabel" "policylabel")
  435. addNSObject "rewrite policy" (getNSObjects $vserverConfig "rewrite policy" "-policyName")
  436. addNSObject "rewrite policylabel" (getNSObjects $vserverConfig "rewrite policylabel" "policylabel")
  437. addNSObject "cache policy" (getNSObjects $vserverConfig "cache policy" "-policyName")
  438. addNSObject "cache policylabel" (getNSObjects $vserverConfig "cache policylabel")
  439. addNSObject "cmp policy" (getNSObjects $vserverConfig "cmp policy" "-policyName")
  440. addNSObject "cmp policylabel" (getNSObjects $vserverConfig "cmp policylabel" "policylabel")
  441. addNSObject "appqoe policy" (getNSObjects $vserverConfig "appqoe policy" "-policyName")
  442. addNSObject "appflow policy" (getNSObjects $vserverConfig "appflow policy" "-policyName")
  443. addNSObject "appflow policylabel" (getNSObjects $vserverConfig "appflow policylabel" "policylabel")
  444. addNSObject "appfw policy" (getNSObjects $vserverConfig "appfw policy" "-policyName")
  445. addNSObject "appfw policylabel" (getNSObjects $vserverConfig "appfw policylabel" "policylabel")
  446. addNSObject "filter policy" (getNSObjects $vserverConfig "filter policy" "-policyName")
  447. addNSObject "bot policy" (getNSObjects $vserverConfig "bot policy")
  448. addNSObject "transform policy" (getNSObjects $vserverConfig "transform policy" "-policyName")
  449. addNSObject "transform policylabel" (getNSObjects $vserverConfig "transform policylabel")
  450. addNSObject "tm trafficPolicy" (getNSObjects $vserverConfig "tm trafficPolicy" "-policyName")
  451. addNSObject "feo policy" (getNSObjects $vserverConfig "feo policy" "-policyName")
  452. addNSObject "spillover policy" (getNSObjects $vserverConfig "spillover policy" "-policyName")
  453. addNSObject "audit syslogPolicy" (getNSObjects $vserverConfig "audit syslogPolicy" "-policyName")
  454. addNSObject "audit nslogPolicy" (getNSObjects $vserverConfig "audit nslogPolicy" "-policyName")
  455. addNSObject "bot policy" (getNSObjects $vserverConfig "bot policy")
  456. addNSObject "dns profile" (getNSObjects $vserverConfig "dns profile" "-dnsProfileName" )
  457. addNSObject "ns tcpProfile" (getNSObjects $vserverConfig "ns tcpProfile" "-tcpProfileName")
  458. addNSObject "ns httpProfile" (getNSObjects $vserverConfig "ns httpProfile" "-httpProfileName")
  459. addNSObject "db dbProfile" (getNSObjects $vserverConfig "db dbProfile" "-dbProfileName")
  460. addNSObject "lb profile" (getNSObjects $vserverConfig "lb profile" "-lbprofilename")
  461. addNSObject "ipset" (getNSObjects $vserverConfig "ipset" "-ipset")
  462. addNSObject "authentication adfsProxyProfile" (getNSObjects $vserverConfig "authentication adfsProxyProfile" "-adfsProxyProfile")
  463. #}
  464. }
  465. function getHttpVServer ($matchConfig) {
  466. # Matches local LB/CS vServer VIPs in URLs (e.g. StoreFront URL) - No FQDN support
  467. # Read all LB/CS objects of protocol HTTP/SSL from from full config. Extract Name, IP, and Port
  468. if ($matchConfig -match "http://")
  469. {
  470. $objectsAll = $config | select-string -Pattern '^add (lb|cs) vserver (".*?"|[^-"]\S+) HTTP (\d+\.\d+.\d+\.\d+) (\d+) ' | ForEach-Object { New-Object PSObject -property @{
  471. Name = $_.Matches.Groups[2].value
  472. IP = $_.Matches.Groups[3].value
  473. Port = $_.Matches.Groups[4].value
  474. }
  475. }
  476. }
  477. elseif ($matchConfig -match "https://")
  478. {
  479. $objectsAll = $config | select-string -Pattern '^add (lb|cs) vserver (".*?"|[^-"]\S+) SSL (\d+\.\d+.\d+\.\d+) (\d+)' | ForEach-Object { New-Object PSObject -property @{
  480. Name = $_.Matches.Groups[2].value
  481. IP = $_.Matches.Groups[3].value
  482. Port = $_.Matches.Groups[4].value
  483. }
  484. }
  485. }
  486. # Check URL for matching VIP and/or Port number
  487. $objectMatches = @()
  488. foreach ($objectCandidate in $objectsAll)
  489. {
  490. if ($matchConfig -match $objectCandidate.IP)
  491. {
  492. if ($matchConfig -match ":\d+/")
  493. {
  494. if ($matchConfig -match (":" + $objectCandidate.Port + "/"))
  495. {
  496. $objectMatches += $objectCandidate.Name
  497. }
  498. }
  499. elseif ($objectCandidate.Port -eq "80" -or $objectCandidate.Port -eq "443")
  500. {
  501. $objectMatches += $objectCandidate.Name
  502. }
  503. }
  504. }
  505. return $objectMatches
  506. }
  507. function outputnFactorPolicies ($bindingType, $indent) {
  508. $matchedConfig = @()
  509. $loginSchemaProfile = $config | select-string -Pattern ('^add ' + $bindingType + ' -loginSchema (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  510. if ($loginSchemaProfile) {
  511. $matchedConfig += $linePrefix + ($spacing * ($indent)) + "Login Schema Profile = " + $loginSchemaProfile
  512. $loginSchemaProfile = $config -match '^add authentication loginSchema ' + $loginSchemaProfile + " "
  513. $loginSchemaXML = $loginSchemaProfile | select-string -Pattern ('-authenticationSchema (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  514. if ($loginSchemaXML) {
  515. $matchedConfig += $linePrefix + ($spacing * ($indent)) + "Login Schema XML = " + $loginSchemaXML
  516. }
  517. }
  518. $policies = $config | select-string -Pattern ('^bind ' + $bindingType + ' -(policy|policyName|loginSchema) (".*?"|[^-"]\S+)($| )') | ForEach-Object {$_.Matches.Groups[2].value}
  519. foreach ($policy in $policies) {
  520. $policyBinding = $config -match ('^bind ' + $bindingType + " -(policy|policyName|loginSchema) " + $policy + " ")
  521. $priority = $policyBinding | select-string -Pattern ('-priority (\d+)') | ForEach-Object {$_.Matches.Groups[1].value}
  522. $goto = $policyBinding | select-string -Pattern ('-gotoPriorityExpression (\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  523. $loginSchemaPolicy = $config -match '^add authentication loginSchemaPolicy ' + $policy + " "
  524. if ($loginSchemaPolicy) {
  525. $loginSchemaAction = $loginSchemaPolicy | select-string -Pattern ('-action (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  526. $rule = $loginSchemaPolicy | select-string -Pattern ('-rule (.*?) -action') | ForEach-Object {$_.Matches.Groups[1].value}
  527. $matchedConfig += $linePrefix + ($spacing * $indent) + "Login Schema Policy = " + $policy
  528. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Priority = " + $priority
  529. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Rule = " + $rule
  530. $loginSchemaProfile = $config -match '^add authentication loginSchema ' + $loginSchemaAction + " "
  531. if ($loginSchemaProfile) {
  532. $loginSchemaXML = $loginSchemaProfile | select-string -Pattern ('-authenticationSchema (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  533. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Login Schema XML = " + $loginSchemaXML
  534. }
  535. }
  536. $authPolicy = $config -match '^add authentication Policy ' + $policy + ' '
  537. if ($authPolicy) {
  538. $authAction = $authPolicy | select-string -Pattern ('-action (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  539. $authActionConfig = $config -match '^add authentication \w+?Action ' + $authAction + " "
  540. $AAAGroup = $authActionConfig | select-string -Pattern ('-defaultAuthenticationGroup (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  541. $authType = $authActionConfig | select-string -Pattern ('^add authentication (\w+?Action)') | ForEach-Object {$_.Matches.Groups[1].value}
  542. $rule = $authPolicy | select-string -Pattern ('-rule (.*?) -action') | ForEach-Object {$_.Matches.Groups[1].value}
  543. $nextFactor = $policyBinding | select-string -Pattern ('-nextFactor (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  544. $matchedConfig += $linePrefix + ($spacing * $indent) + "Adv Authn Policy = " + $policy
  545. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Priority = " + $priority
  546. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Rule = " + $rule
  547. if ($authType) {
  548. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Action = " + $authType + " named " + $authAction
  549. } else {
  550. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Action = " + $authAction
  551. }
  552. if ($AAAGroup) {
  553. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "AAA Group = " + $AAAGroup
  554. }
  555. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Goto if failed = " + $goto
  556. if ($nextFactor) {
  557. $matchedConfig += $linePrefix + ($spacing * ($indent + 1)) + "Next Factor if Success = " + $nextFactor
  558. $matchedConfig += outputnFactorPolicies ('authentication policylabel ' + $nextFactor) ($indent + 2)
  559. }
  560. }
  561. }
  562. return $matchedConfig
  563. }
  564. function outputObjectConfig ($header, $NSObjectKey, $NSObjectType, $explainText) {
  565. $uniqueObjects = $NSObjects.$NSObjectKey | Select-Object -Unique
  566. # Build header line
  567. $output = "# " + $header + "`n# "
  568. 1..$header.length | ForEach-Object {$output += "-"}
  569. $output += "`n"
  570. $matchedConfig = @()
  571. if ($NSObjectType -eq "raw") {
  572. # Print actual Object Values. Don't get output from filtered config.
  573. $matchedConfig = $NSObjects.$NSObjectKey + "`n"
  574. } else {
  575. foreach ($uniqueObject in $uniqueObjects) {
  576. # For regex, replace dots with escaped dots and escaped *
  577. $uniqueObject = $uniqueObject -replace "\.", "\."
  578. $uniqueObject = $uniqueObject -replace "\*", "\*"
  579. # Don't match "-" to prevent "add serviceGroup -netProfile"
  580. # Ensure there's whitespace before match to prevent substring matches (e.g. MyServer matching server)
  581. if ($NSObjectType) {
  582. # Optional $NSObjectType overrides $NSObjectKey if they don't match (e.g. CA Cert doesn't match certKey)
  583. $matchedConfig += $config -match "[^-\S]" + $NSObjectType + " " + $uniqueObject + "$"
  584. $matchedConfig += $config -match "[^-\S]" + $NSObjectType + " " + $uniqueObject + "[^\S]"
  585. } else {
  586. $matchedConfig += $config -match "[^-\S]" + $NSObjectKey + " " + $uniqueObject + "$"
  587. $matchedConfig += $config -match "[^-\S]" + $NSObjectKey + " " + $uniqueObject + "[^\S]"
  588. }
  589. # if ($uniqueObject -eq "NO_RW_192\.168\.192\.242") {write-host $uniqueObject $matchedConfig}
  590. $matchedConfig += "`n"
  591. }
  592. }
  593. if ($explainText) {
  594. $explainText = @($explainText -split "`n")
  595. $explainText | ForEach-Object {
  596. $matchedConfig += "# *** " + $_
  597. }
  598. $matchedConfig += "`n"
  599. }
  600. # nFactor Visualizer
  601. if ($NSObjectKey -eq "authentication vserver") {
  602. $linePrefix = "# ** "
  603. $spacing = " "
  604. foreach ($aaavServer in $uniqueObjects) {
  605. $indent = 0
  606. $matchedConfig += $linePrefix + "nFactor Visualizer "
  607. $matchedConfig += $linePrefix + "------------------ "
  608. $matchedConfig += $linePrefix + ($spacing * $indent) + "AAA vserver: " + $aaavServer
  609. $matchedConfig += outputnFactorPolicies ("authentication vserver " + $aaavServer) 1
  610. $matchedConfig += "`n"
  611. }
  612. }
  613. # Add line endings to output
  614. $SSLVServerName = ""
  615. foreach ($line in $matchedConfig) {
  616. # if binding new cipher group, remove old ciphers first
  617. # only add unbind line once per SSL object
  618. $SSLvserverNameMatch = $line | select-string -Pattern ('^bind ssl (vserver|service|serviceGroup|monitor) (.*) -cipherName') | ForEach-Object {$_.Matches.Groups[2].value}
  619. if ($SSLvserverNameMatch -and ($SSLVServerName -ne $SSLvserverNameMatch)) {
  620. $SSLVServerName = $SSLvserverNameMatch
  621. $output += ($line -replace "bind (.*) -cipherName .*", "unbind `$1 -cipherName DEFAULT`n")
  622. }
  623. # handle one blank line between mutliple objects of same type
  624. if ($line -ne "`n") {
  625. $output += $line + "`n"
  626. } else {
  627. $output += "`n"
  628. }
  629. }
  630. # Output to file or screen
  631. if ($outputFile -and ($outputFile -ne "screen")) {
  632. $output | out-file $outputFile -Append
  633. } else {
  634. $output
  635. }
  636. }
  637. ## Start main script
  638. # Clear configuration from last run
  639. $nsObjects = @{}
  640. $nsObjectsCache = @{}
  641. $selectionDone =$false
  642. $firstLoop = $true
  643. do {
  644. # Get matching vServer Names. If more than one, prompt for selection.
  645. # This loop allows users to change the vServer filter text
  646. if ($vserver -match " ") {
  647. $vserver = [char]34 + $vserver + [char]34
  648. }
  649. $vservers = $config -match "$vserver" | select-string -Pattern ('^add \w+ vserver (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  650. if (!$vservers) {
  651. # Try substring matches without quotes
  652. if ($vserver -match " ") { $vserver = $vserver -replace [char]34 }
  653. $vservers = $config -match "$vserver" | select-string -Pattern ('^add \w+ vserver (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  654. }
  655. # Make sure it's an array, even if only one match
  656. $vservers = @($vservers)
  657. # FirstLoop flag enables running script without prompting.
  658. # If second loop, then user must have changed the filter and wants to see results even if only one (or none).
  659. if (($vservers.length -eq 1 -and $firstLoop) -or $vservers -contains $vserver) {
  660. # Get vServer Type
  661. $vserverType = $config -match " $vservers " | select-string -Pattern ('^add (\w+) vserver') | ForEach-Object {$_.Matches.Groups[1].value}
  662. addNSObject ($vserverType + " vserver") $vservers
  663. $selectionDone = $true
  664. } else {
  665. # Prompt for vServer selection
  666. # Prepend System option
  667. $vservers = @("System Settings") + $vservers
  668. # Get vServer Type for each vServer name - later display to user
  669. $vserverTypes = @("") * ($vservers.length)
  670. $vserverTypes[0] = "sys"
  671. if ($vserver) {
  672. $vserverConfig = $config -match "$vserver"
  673. } else {
  674. $vserverConfig = $config -match "add (\w+) vserver"
  675. }
  676. for ($x = 1; $x -lt $vservers.length; $x++) {
  677. $vserverTypes[$x] = $vserverConfig | select-string -Pattern ('^add (\w+) vserver ' + $vservers[$x] + " ") | ForEach-Object {$_.Matches.Groups[1].value}
  678. }
  679. # Change "authentication" to "aaa" so it fits within 4 char column
  680. $vserverTypes = $vserverTypes -replace "authentication", "aaa"
  681. # Get VIPs for each vServer so they can be displayed to the user
  682. $VIPs = @("") * ($vservers.length)
  683. for ($x = 1; $x -lt $vservers.length; $x++) {
  684. $VIPs[$x] = $vserverConfig | select-string -Pattern ('^add \w+ vserver ' + $vservers[$x] + ' \w+ (\d+\.\d+\.\d+\.\d+)') | ForEach-Object {$_.Matches.Groups[1].value}
  685. }
  686. # Get Ports for each vServer so they can be displayed to the user
  687. $Ports = @("") * ($vservers.length)
  688. for ($x = 1; $x -lt $vservers.length; $x++) {
  689. $Ports[$x] = $vserverConfig | select-string -Pattern ('^add \w+ vserver ' + $vservers[$x] + ' \w+ \d+\.\d+\.\d+\.\d+ (\d+)') | ForEach-Object {$_.Matches.Groups[1].value}
  690. }
  691. # Get Enabled/Disabled State for each vServer so they can be displayed to the user
  692. $States = @("") * ($vservers.length)
  693. for ($x = 1; $x -lt $vservers.length; $x++) {
  694. $States[$x] = $vserverConfig | select-string -Pattern ('^add \w+ vserver ' + $vservers[$x] + ' .*? -state (\w+)') | ForEach-Object {$_.Matches.Groups[1].value}
  695. }
  696. $selected = @("") * ($vservers.length)
  697. # Grid View
  698. $vserverObjects = @()
  699. $vserverObjects = for ($x = 0; $x -lt $vservers.length; $x++) {
  700. [PSCustomObject] @{
  701. Type = $vserverTypes[$x]
  702. Name = $vservers[$x]
  703. VIP = $VIPs[$x]
  704. Port = $Ports[$x]
  705. State = $States[$x]
  706. }
  707. }
  708. if ($IsMacOS){
  709. "Use Listbox window to select Virtual Servers`n"
  710. $vserverlist = $vservers | Foreach-object{,($_.trim('"') )}
  711. $vserverlist = (('tell application "SystemUIServer"'+"`n"+'activate'+"`n"+'set vserver to (choose from list {"'+($vserverlist -join '","')+'"} with prompt "Command+Select Multiple Virtual Servers to extract" with multiple selections allowed)'+"`n"+'end tell' | osascript -s s) -replace ', ',',')
  712. $vserverObjects = @()
  713. [regex]::Matches($vserverlist, '(?:([\w\s]+))') | ForEach-Object {
  714. if ($_.value -match ' '){$vservername = '"'+$_.value+'"'}
  715. else {$vservername = $_.value}
  716. $x = $vservers.IndexOf($vservername)
  717. $vserverObjects += [PSCustomObject] @{
  718. Type = $vserverTypes[$x]
  719. Name = $vservers[$x]
  720. }
  721. }
  722. } else {
  723. "Use Grid View window to select Virtual Servers`n"
  724. $vserverObjects = $vserverObjects | Out-GridView -Title "Ctrl+Select Multiple Virtual Servers to extract" -PassThru
  725. }
  726. if (!$vserverObjects) { exit }
  727. $vservers = @()
  728. foreach ($vserverObject in $vserverObjects) {
  729. if ($vserverObject.Type -eq "aaa") {
  730. $vserverObject.Type = "authentication"
  731. }
  732. if ($vserverObject.Type -eq "sys") {
  733. addNSObject ("sys") $vserverObject.Name
  734. $vservers += "System Settings"
  735. } else {
  736. addNSObject ($vserverObject.Type + " vserver") $vserverObject.Name
  737. $vservers += $vserverObject.Name
  738. }
  739. }
  740. $selectionDone = $true
  741. # CLI Menu Selection
  742. <# do {
  743. $count = 1
  744. cls
  745. $promptString = "Select one or more of the following Virtual Servers for configuration extraction:`n`n"
  746. $promptString += "Virtual Server Filter = $vserver`n`n"
  747. $promptString += " Num Type VIP Name`n"
  748. $maxLength = ($vservers | sort-object length -desc | select -first 1).length
  749. $promptString += " ----- ---- " + ("-" * 15) + " " + ("-" * $maxLength) + "`n"
  750. write-host $promptString
  751. foreach ($vserverOption in $vservers) {
  752. $promptString = "{0,1} {1,4}: {2,4} {3,15} $vserverOption" -f $selected[$count-1], $count, $vserverTypes[$count-1], $VIPs[$count-1]
  753. if ($selected[$count-1] -eq "*") {
  754. write-host -foregroundcolor yellow $promptString
  755. } else {
  756. write-host $promptString
  757. }
  758. $count++
  759. }
  760. write-host ""
  761. $entry = read-host "Enter Number to select/deselect, * for all, 0 for new filter string, or <Enter> to begin extraction"
  762. if (!$entry -or $entry -eq "") { $selectionDone = $true; break }
  763. if ($entry -eq "*")
  764. {
  765. for ($x = 0; $x -lt $selected.length; $x++) {
  766. if ($selected[$x] -eq "*") {
  767. $selected[$x] = ""
  768. } else
  769. {
  770. $selected[$x] = "*"
  771. }
  772. }
  773. } else
  774. {
  775. try
  776. {
  777. $entry = [int]$entry
  778. if ($entry -lt 0 -or $entry -gt $count)
  779. {
  780. write-host "`nInvalid entry. Press Enter to try again. ";read-host
  781. $entry = "retry"
  782. } elseif ($entry -ge 1 -and $entry -le $count)
  783. {
  784. # Swap select status
  785. if ($selected[$entry -1] -eq "*")
  786. {
  787. $selected[$entry-1] = ""
  788. } else
  789. {
  790. $selected[$entry-1] = "*"
  791. }
  792. } elseif ($entry -eq 0)
  793. {
  794. $newFilter = read-host "Enter new filter string"
  795. $vserver = $newFilter
  796. $entry = ""
  797. $selected = ""
  798. }
  799. } catch
  800. {
  801. write-host "`nInvalid entry. Press Enter to try again. ";read-host
  802. $entry = "retry"
  803. }
  804. }
  805. } while ($entry -and $entry -ne "")
  806. $vserversSelected = @()
  807. for ($x = 0; $x -lt ($selected.length); $x++) {
  808. $vserverTypes = $vserverTypes -replace "aaa", "authentication"
  809. if ($selected[$x] -eq "*") {
  810. addNSObject ($vserverTypes[$x] + " vserver") $vservers[$x]
  811. $vserversSelected += $vservers[$x]
  812. $selectionDone = $true
  813. }
  814. }
  815. $vservers = $vserversSelected #>
  816. }
  817. $firstLoop = $false
  818. } while (!$selectionDone)
  819. if (!$vservers) { exit }
  820. # Run the Get-Output function to ask the user where to save the NetScaler documentation file
  821. if (!$outputFile) { $outputFile = Get-OutputFile $outputfile }
  822. "`nLooking for objects associated with selected vServers: `n" + ($vservers -join "`n") + "`n"
  823. $Timer = [system.diagnostics.stopwatch]::StartNew()
  824. # Get System Objects
  825. if ($nsObjects."sys") {
  826. addNSObject "ns partition" (getNSObjects ($config -match "add ns partition") "ns partition")
  827. addNSObject "dns nameServer" (getNSObjects ($config -match "add dns nameServer") "dns nameServer")
  828. if ($nsObjects."dns nameServer")
  829. {
  830. foreach ($nameserver in $nsObjects."dns nameServer") {
  831. $nameServerConfig = $config -match "lb vserver $nameserver "
  832. addNSObject "lb vserver" (getNSObjects $nameServerConfig "lb vserver")
  833. }
  834. }
  835. addNSObject "ns feature" ($config -match "ns feature")
  836. addNSObject "ns mode" ($config -match "ns mode")
  837. addNSObject "system parameter" ($config -match "system parameter")
  838. addNSObject "ns encryptionParams" ($config -match "set ns encryptionParams")
  839. addNSObject "ssl cipher" (getNSObjects $config "ssl cipher" "-cipherName")
  840. # Get Networking Settings
  841. addNSObject "ns config" ($config -match "ns config")
  842. addNSObject "ns hostName" ($config -match "ns hostName")
  843. addNSObject "interface" ($config -match " interface ")
  844. addNSObject "channel" ($config -match " channel ")
  845. addNSObject "vlan" (getNSObjects ($config -match " vlan ") "vlan")
  846. addNSObject "vrid" (getNSObjects ($config -match "vrid") "vrid")
  847. addNSObject "ns ip" (getNSObjects ($config -match "ns ip") "ns ip")
  848. addNSObject "route" ($config -match " route ")
  849. addNSObject "ns pbr" ($config -match " ns pbr")
  850. addNSObject "mgmt ssl service" (getNSObjects ($config -match " ssl service ns(krpcs|https|rpcs|rnatsip)-") "ssl service")
  851. # Get SNMP
  852. addNSObject "snmp community" ($config -match " snmp community")
  853. addNSObject "snmp manager" ($config -match " snmp manager")
  854. addNSObject "snmp trap" ($config -match " snmp trap")
  855. addNSObject "snmp alarm" ($config -match " snmp alarm")
  856. # Get HA settings
  857. addNSObject "ha node" ($config -match "HA node")
  858. addNSObject "ha rpcNode" (getNSObjects ($config -match "set ns config") "ns rpcNode")
  859. addNSObject "ha rpcNode" (getNSObjects ($config -match "HA node") "ns rpcNode")
  860. # Get System Global Bindings - authentication, syslog
  861. addNSObject "system global" ($config -match "system global")
  862. addNSObject "authentication Policy" (getNSObjects ($config -match "system global") "authentication Policy")
  863. addNSObject "authentication ldapPolicy" (getNSObjects ($config -match "system global") "authentication ldapPolicy")
  864. addNSObject "authentication radiusPolicy" (getNSObjects ($config -match "system global") "authentication radiusPolicy")
  865. addNSObject "authentication tacacsPolicy" (getNSObjects ($config -match "system global") "authentication tacacsPolicy")
  866. addNSObject "authentication localPolicy" (getNSObjects ($config -match "system global") "authentication localPolicy")
  867. addNSObject "audit syslogPolicy" (getNSObjects ($config -match "bind system global") "audit syslogPolicy")
  868. addNSObject "audit syslogPolicy" (getNSObjects ($config -match "bind audit syslogGlobal") "audit syslogPolicy")
  869. addNSObject "audit nslogPolicy" (getNSObjects ($config -match "bind system global") "audit nslogPolicy")
  870. addNSObject "system user" (getNSObjects ($config -match "system user") "system user")
  871. addNSObject "system group" (getNSObjects ($config -match "system group") "system group")
  872. }
  873. # If $cswBind switch is true, look for CS vServers that the LB, AAA, and/or VPN vServers are bound to.
  874. if ($cswBind){
  875. $cswBindType = @{lb='lbvserver';vpn='vserver';authentication='vserver'}
  876. foreach ($vsrvType in 'lb','vpn','authentication' ) {
  877. if ($nsObjects."$vsrvType vserver") {
  878. foreach ($vsrv in $nsObjects."$vsrvType vserver")
  879. {
  880. # CSW Default virtual server
  881. if ($config -match "bind cs vserver .* -$($cswBindType.$vsrvType) $vsrv"){
  882. addNSObject "cs vserver" ($config -match "bind cs vserver .* -$($cswBindType.$vsrvType) $vsrv" | select-string -Pattern ('^bind cs vserver (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value})
  883. }
  884. # CSW Policy Bind -targetlbserver
  885. if ($config -match "bind cs vserver .* -policyName .* -targetLBVserver $vsrv"){
  886. addNSObject "cs vserver" ($config -match "bind cs vserver .* -policyName .* -targetLBVserver $vsrv" | select-string -Pattern ('^bind cs vserver (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value})
  887. }
  888. # CSW Action -targetlbserver -targetvserver
  889. if ($config -match "add cs action .* -target$($cswBindType.$vsrvType) $vsrv"){
  890. $csaction = ($config -match "add cs action .* -target$($cswBindType.$vsrvType) $vsrv" | select-string -Pattern ('^add cs action (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value})
  891. #CS Policy for CS Action
  892. $cspolicy = ($config -match "add cs policy .* -action $csaction" | select-string -Pattern ('^add cs policy (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value})
  893. #CS vServer for CS Policy
  894. addNSObject "cs vserver" ($config -match "bind cs vserver .* -policyName $cspolicy" | select-string -Pattern ('^bind cs vserver (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value})
  895. }
  896. }
  897. }
  898. }
  899. }
  900. # Look for Backup CSW vServers and Linked LB vServers
  901. if ($nsObjects."cs vserver") {
  902. if ($config -match "enable ns feature.* CS")
  903. {
  904. $NSObjects."cs parameter" = @("enable ns feature CS")
  905. } else {
  906. $NSObjects."cs parameter" = @("# *** CS feature is not enabled")
  907. }
  908. foreach ($csvserver in $nsObjects."cs vserver") {
  909. $currentVServers = $nsObjects."cs vserver"
  910. $nsObjects."cs vserver" = @()
  911. $vserverConfig = $config -match " $csvserver "
  912. # Backup VServers should be created before Active VServers
  913. $backupVServers = getNSObjects ($vserverConfig) "cs vserver" "-backupVServer"
  914. if ($backupVServers) {
  915. addNSObject "cs vserver" ($backupVServers)
  916. foreach ($vserver in $currentvservers) {
  917. if ($backupVServers -notcontains $vserver) {
  918. addNSObject "cs vserver" ($vserver)
  919. }
  920. }
  921. } else {
  922. $nsObjects."cs vserver" = $currentVServers
  923. }
  924. addNSObject "lb vserver" (getNSObjects $vserverconfig "lb vserver" "-targetLBVserver")
  925. }
  926. }
  927. # Enumerate CSW vServer config for additional bound objects
  928. if ($nsObjects."cs vserver") {
  929. foreach ($csvserver in $nsObjects."cs vserver") {
  930. $vserverConfig = $config -match "vserver $csvserver "
  931. addNSObject "cs policy" (getNSObjects $vserverConfig "cs policy" "-policyName")
  932. addNSObject "cs policylabel" (getNSObjects $vserverConfig "cs policylabel" "policylabel")
  933. addNSObject "lb vserver" (getNSObjects $vserverConfig "lb vserver" "-lbvserver")
  934. addNSObject "gslb vserver" (getNSObjects $vserverConfig "gslb vserver" "-vserver")
  935. addNSObject "vpn vserver" (getNSObjects $vserverConfig "vpn vserver" "-vserver")
  936. addNSObject "netProfile" (getNSObjects $vserverConfig "netProfile" "-netProfile")
  937. addNSObject "ns trafficDomain" (getNSObjects $vserverConfig "ns trafficDomain" "-td")
  938. addNSObject "ns tcpProfile" (getNSObjects $vserverConfig "ns tcpProfile" "-tcpProfileName")
  939. addNSObject "ns httpProfile" (getNSObjects $vserverConfig "ns httpProfile" "-httpProfileName")
  940. addNSObject "db dbProfile" (getNSObjects $vserverConfig "db dbProfile" "-dbProfileName")
  941. addNSObject "dns profile" (getNSObjects $vserverConfig "dns profile" "-dnsProfileName")
  942. addNSObject "authentication vserver" (getNSObjects $vserverConfig "authentication vserver" "-authnVsName")
  943. addNSObject "authentication authnProfile" (getNSObjects $vserverConfig "authentication authnProfile" "-authnProfile")
  944. addNSObject "authorization policylabel" (getNSObjects $vserverConfig "authorization policylabel")
  945. addNSObject "authorization policy" (getNSObjects $vserverConfig "authorization policy" "-policyName")
  946. addNSObject "audit syslogPolicy" (getNSObjects $vserverConfig "audit syslogPolicy" "-policyName")
  947. addNSObject "audit nslogPolicy" (getNSObjects $vserverConfig "audit nslogPolicy" "-policyName")
  948. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policyName")
  949. addNSObject "ssl cipher" (getNSObjects $vserverConfig "ssl cipher" "-cipherName")
  950. addNSObject "ssl profile" (getNSObjects $vserverConfig "ssl profile")
  951. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certKeyName")
  952. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $csvserver ") "ssl vserver")
  953. addNSObject "cmp policy" (getNSObjects $vserverConfig "cmp policy" "-policyName")
  954. addNSObject "cmp policylabel" (getNSObjects $vserverConfig "cmp policylabel" "policylabel")
  955. addNSObject "responder policy" (getNSObjects $vserverConfig "responder policy" "-policyName")
  956. addNSObject "responder policylabel" (getNSObjects $vserverConfig "responder policylabel" "policylabel")
  957. addNSObject "rewrite policy" (getNSObjects $vserverConfig "rewrite policy" "-policyName")
  958. addNSObject "rewrite policylabel" (getNSObjects $vserverConfig "rewrite policylabel" "policylabel")
  959. addNSObject "appflow policy" (getNSObjects $vserverConfig "appflow policy" "-policyName")
  960. addNSObject "appflow policylabel" (getNSObjects $vserverConfig "appflow policylabel" "policylabel")
  961. addNSObject "appfw policy" (getNSObjects $vserverConfig "appfw policy" "-policyName")
  962. addNSObject "appfw policylabel" (getNSObjects $vserverConfig "appfw policylabel" "policylabel")
  963. addNSObject "cache policy" (getNSObjects $vserverConfig "cache policy" "-policyName")
  964. addNSObject "cache policylabel" (getNSObjects $vserverConfig "cache policylabel" "policylabel")
  965. addNSObject "transform policy" (getNSObjects $vserverConfig "transform policy" "-policyName")
  966. addNSObject "transform policylabel" (getNSObjects $vserverConfig "transform policylabel")
  967. addNSObject "tm trafficPolicy" (getNSObjects $vserverConfig "tm trafficPolicy" "-policyName")
  968. addNSObject "feo policy" (getNSObjects $vserverConfig "feo policy" "-policyName")
  969. addNSObject "spillover policy" (getNSObjects $vserverConfig "spillover policy" "-policyName")
  970. addNSObject "appqoe policy" (getNSObjects $vserverConfig "appqoe policy" "-policyName")
  971. addNSObject "ipset" (getNSObjects $vserverConfig "ipset" "-ipset")
  972. addNSObject "analytics profile" (getNSObjects $vserverConfig "analytics profile" "-analyticsProfile")
  973. }
  974. }
  975. # write-host ("cs objects: " + $timer.elapsed.TotalSeconds)
  976. # Get CSW Policies from CSW Policy Labels
  977. if ($NSObjects."cs policylabel") {
  978. foreach ($policy in $NSObjects."cs policylabel") {
  979. addNSObject "cs policy" (getNSObjects ($config -match " $policy ") "cs policy")
  980. }
  981. }
  982. # Get CSW Actions from CSW Policies
  983. if ($NSObjects."cs policy") {
  984. $matchExpression = getMatchExpression $NSObjects."cs policy"
  985. addNSObject "cs action" (getNSObjects ($config -match " $matchExpression ") "cs action")
  986. addNSObject "audit messageaction" (getNSObjects ($config -match "cr policy $matchExpression") "audit messageaction" "-logAction")
  987. # Get vServers linked to CSW Actions
  988. if ($NSObjects."cs action") {
  989. $matchExpression = getMatchExpression $NSObjects."cs action"
  990. $filteredConfig = $config -match " $matchExpression "
  991. addNSObject "lb vserver" (getNSObjects ($filteredConfig) "lb vserver" "-targetLBVserver")
  992. addNSObject "vpn vserver" (getNSObjects ($filteredConfig) "vpn vserver" "-targetVserver")
  993. addNSObject "authentication vserver" (getNSObjects ($filteredConfig) "authentication vserver" "-targetVserver")
  994. addNSObject "gslb vserver" (getNSObjects ($filteredConfig) "gslb vserver" "-targetVserver")
  995. }
  996. }
  997. # Look for Backup CR vServers
  998. if ($nsObjects."cr vserver") {
  999. foreach ($crvserver in $nsObjects."cr vserver") {
  1000. $currentVServers = $nsObjects."cr vserver"
  1001. $nsObjects."cr vserver" = @()
  1002. $vserverConfig = $config -match " $crvserver "
  1003. # Backup VServers should be created before Active VServers
  1004. $backupVServers = getNSObjects ($vserverConfig) "cr vserver" "-backupVServer"
  1005. if ($backupVServers) {
  1006. addNSObject "cr vserver" ($backupVServers)
  1007. foreach ($vserver in $currentvservers) {
  1008. if ($backupVServers -notcontains $vserver) {
  1009. addNSObject "cr vserver" ($vserver)
  1010. }
  1011. }
  1012. } else {
  1013. $nsObjects."cr vserver" = $currentVServers
  1014. }
  1015. }
  1016. }
  1017. # Enumerate CR vServer config for additional bound objects
  1018. if ($nsObjects."cr vserver") {
  1019. foreach ($crvserver in $nsObjects."cr vserver") {
  1020. $vserverConfig = $config -match " $crvserver "
  1021. addNSObject "cs policy" (getNSObjects $vserverConfig "cs policy")
  1022. addNSObject "cs policylabel" (getNSObjects $vserverConfig "cs policylabel" "policylabel")
  1023. addNSObject "cr policy" (getNSObjects $vserverConfig "cr policy")
  1024. addNSObject "lb vserver" (getNSObjects $vserverConfig "lb vserver" "-lbvserver")
  1025. addNSObject "lb vserver" (getNSObjects $vserverConfig "lb vserver" "-dnsVserverName")
  1026. addNSObject "netProfile" (getNSObjects $vserverConfig "netProfile" "-netProfile")
  1027. addNSObject "ns trafficDomain" (getNSObjects $vserverConfig "ns trafficDomain" "-td")
  1028. addNSObject "ns tcpProfile" (getNSObjects $vserverConfig "ns tcpProfile" "-tcpProfileName")
  1029. addNSObject "ns httpProfile" (getNSObjects $vserverConfig "ns httpProfile" "-httpProfileName")
  1030. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policyName")
  1031. addNSObject "ssl cipher" (getNSObjects $vserverConfig "ssl cipher")
  1032. addNSObject "ssl profile" (getNSObjects $vserverConfig "ssl profile")
  1033. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certKeyName")
  1034. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $crvserver ") "ssl vserver")
  1035. addNSObject "cmp policy" (getNSObjects $vserverConfig "cmp policy" "-policyName")
  1036. addNSObject "cmp policylabel" (getNSObjects $vserverConfig "cmp policylabel" "policylabel")
  1037. addNSObject "responder policy" (getNSObjects $vserverConfig "responder policy" "-policyName")
  1038. addNSObject "responder policylabel" (getNSObjects $vserverConfig "responder policylabel" "policylabel")
  1039. addNSObject "rewrite policy" (getNSObjects $vserverConfig "rewrite policy" "-policyName")
  1040. addNSObject "rewrite policylabel" (getNSObjects $vserverConfig "rewrite policylabel" "policylabel")
  1041. addNSObject "appflow policy" (getNSObjects $vserverConfig "appflow policy" "-policyName")
  1042. addNSObject "appflow policylabel" (getNSObjects $vserverConfig "appflow policylabel" "policylabel")
  1043. addNSObject "appfw policy" (getNSObjects $vserverConfig "appfw policy" "-policyName")
  1044. addNSObject "appfw policylabel" (getNSObjects $vserverConfig "appfw policylabel" "policylabel")
  1045. addNSObject "cache policy" (getNSObjects $vserverConfig "cache policy" "-policyName")
  1046. addNSObject "cache policylabel" (getNSObjects $vserverConfig "cache policylabel" "policylabel")
  1047. addNSObject "feo policy" (getNSObjects $vserverConfig "feo policy" "-policyName")
  1048. addNSObject "spillover policy" (getNSObjects $vserverConfig "spillover policy" "-policyName")
  1049. addNSObject "appqoe policy" (getNSObjects $vserverConfig "appqoe policy" "-policyName")
  1050. addNSObject "ica policy" (getNSObjects $vserverConfig "ica policy" "-policyName")
  1051. addNSObject "ipset" (getNSObjects $vserverConfig "ipset" "-ipset")
  1052. addNSObject "analytics profile" (getNSObjects $vserverConfig "analytics profile" "-analyticsProfile")
  1053. }
  1054. }
  1055. # Get Message Actions from CR Policies
  1056. if ($NSObjects."cr policy") {
  1057. foreach ($policy in $NSObjects."cr policy") {
  1058. addNSObject "audit messageaction" (getNSObjects ($config -match "cr policy $policy") "audit messageaction" "-logAction")
  1059. }
  1060. }
  1061. # Get CSW Policies from CSW Policy Labels
  1062. if ($NSObjects."cs policylabel") {
  1063. foreach ($policy in $NSObjects."cs policylabel") {
  1064. addNSObject "cs policy" (getNSObjects ($config -match " $policy ") "cs policy")
  1065. }
  1066. }
  1067. # Get CSW Actions from CSW Policies
  1068. if ($NSObjects."cs policy") {
  1069. $matchExpression = getMatchExpression $NSObjects."cs policy"
  1070. addNSObject "cs action" (getNSObjects ($config -match " $matchExpression ") "cs action")
  1071. addNSObject "audit messageaction" (getNSObjects ($config -match "cs policy $matchExpression") "audit messageaction" "-logAction")
  1072. # Get vServers linked to CSW Actions
  1073. if ($NSObjects."cs action") {
  1074. $matchExpression = getMatchExpression $NSObjects."cs action"
  1075. $filteredConfig = $config -match " $matchExpression "
  1076. foreach ($action in $NSObjects."cs action") {
  1077. addNSObject "lb vserver" (getNSObjects ( $filteredConfig) "lb vserver" "-targetLBVserver")
  1078. addNSObject "vpn vserver" (getNSObjects ( $filteredConfig) "vpn vserver" "-targetVserver")
  1079. addNSObject "gslb vserver" (getNSObjects ( $filteredConfig) "gslb vserver" "-targetVserver")
  1080. }
  1081. }
  1082. }
  1083. # Look for Backup GSLB vServers
  1084. if ($nsObjects."gslb vserver") {
  1085. foreach ($gslbvserver in $nsObjects."gslb vserver") {
  1086. # $currentVServers = $nsObjects."gslb vserver"
  1087. # $nsObjects."gslb vserver" = @()
  1088. $vserverConfig = $config -match " $gslbvserver "
  1089. # Backup VServers should be created before Active VServers
  1090. $backupVServers = getNSObjects ($vserverConfig) "gslb vserver" "-backupVServer"
  1091. if ($backupVServers) {
  1092. addNSObject "gslb vserver" ($backupVServers)
  1093. # foreach ($vserver in $currentvservers) {
  1094. # if ($backupVServers -notcontains $vserver) {
  1095. # addNSObject "gslb vserver" ($vserver)
  1096. # }
  1097. # }
  1098. # } else {
  1099. # $nsObjects."gslb vserver" = $currentVServers
  1100. }
  1101. }
  1102. }
  1103. # Enumerate GSLB vServer config for additional bound objects
  1104. if ($nsObjects."gslb vserver") {
  1105. if ($config -match "enable ns feature.* GSLB") {
  1106. $NSObjects."gslb parameter" = @("enable ns feature gslb")
  1107. } else {
  1108. $NSObjects."gslb parameter" = @("# *** GSLB feature is not enabled")
  1109. }
  1110. foreach ($gslbvserver in $nsObjects."gslb vserver") {
  1111. $vserverConfig = $config -match " $gslbvserver "
  1112. addNSObject "gslb service" (getNSObjects $vserverConfig "gslb service" "-serviceName")
  1113. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $gslbvserver ") "ssl vserver")
  1114. addNSObject "dns soaRec" (getNSObjects $vserverConfig "dns soaRec")
  1115. addNSObject "dns nsRec" (getNSObjects $vserverConfig "dns nsRec")
  1116. }
  1117. if ($NSObjects."gslb service")
  1118. {
  1119. foreach ($service in $NSObjects."gslb service")
  1120. {
  1121. # wrap config matches in spaces to avoid substring matches
  1122. $serviceConfig = $config -match " gslb service $service "
  1123. addNSObject "monitor" (getNSObjects $serviceConfig "lb monitor" "-monitorName")
  1124. addNSObject "monitor" (getNSObjects $serviceConfig "monitor" "-monitorName")
  1125. addNSObject "server" (getNSObjects $serviceConfig "server")
  1126. addNSObject "ssl profile" (getNSObjects $serviceConfig "ssl profile")
  1127. addNSObject "netProfile" (getNSObjects $serviceConfig "netProfile" "-netProfile")
  1128. addNSObject "ns trafficDomain" (getNSObjects $serviceConfig "ns trafficDomain" "-td")
  1129. addNSObject "dns view" (getNSObjects $serviceConfig "dns view" "-viewName")
  1130. addNSObject "gslb site" (getNSObjects $serviceConfig "gslb site" "-siteName")
  1131. }
  1132. }
  1133. if ($NSObjects."gslb site")
  1134. {
  1135. foreach ($site in $NSObjects."gslb site")
  1136. {
  1137. $siteConfig = $config -match "add gslb site $site "
  1138. addNSObject "ns rpcNode" (getNSObjects $siteConfig "ns rpcNode")
  1139. }
  1140. }
  1141. addNSObject "dns cnameRec" (getNSObjects ($config -match "^add dns cnameRec ") "dns cnameRec")
  1142. addNSObject "dns addRec" (getNSObjects ($config | select-string -Pattern "^add dns addRec" | select-string -NotMatch -Pattern ".root-servers.net") "dns addRec")
  1143. addNSObject "gslb location" ($config -match "^set locationParameter") "gslb location"
  1144. addNSObject "gslb location" ($config -match " locationFile ") "gslb location"
  1145. addNSObject "gslb location" ($config -match "^add location ") "gslb location"
  1146. addNSObject "gslb parameter" ($config -match "^set gslb parameter ") "gslb parameter"
  1147. addNSObject "gslb parameter" ($config -match "^set dns parameter") "gslb parameter"
  1148. # Get all global DNS Responder policies in case they affect GSLB DNS traffic
  1149. addNSObject "responder policy" (getNSObjects ($config -match "^bind responder global .*? -type DNS_REQ_") "responder policy")
  1150. # Get all global DNS Policy bindings in case they affect ADNS traffic?
  1151. addNSObject "dns policy" (getNSObjects ($config -match "^bind dns global") "dns policy")
  1152. addNSObject "adns service" ($config -match '^add service (".*?"|[^-"]\S+) \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} ADNS') "adns service"
  1153. # Get all DNS LB vServers in case they are used for DNS Queries?
  1154. addNSObject "lb vserver" (getNSObjects ($config -match '^add lb vserver (".*?"|[^-"]\S+) DNS') "lb vserver")
  1155. }
  1156. # Get DNS Actions and DNS Polices from DNS Views
  1157. if ($nsObjects."dns view") {
  1158. foreach ($view in $nsObjects."dns view") {
  1159. addNSObject "dns action" (getNSObjects ($config -match "dns action .*? -viewName $view") "dns action")
  1160. }
  1161. foreach ($action in $nsObjects."dns action") {
  1162. addNSObject "dns policy" (getNSObjects ($config -match "dns policy .*? $action") "dns policy" )
  1163. }
  1164. }
  1165. if ($nsObjects."dns policy") {
  1166. # Get DNS Actions for global DNS policies discovered earlier
  1167. foreach ($policy in $nsObjects."dns policy") {
  1168. addNSObject "dns action" (getNSObjects ($config -match "dns policy $policy") "dns action")
  1169. addNSObject "audit messageaction" (getNSObjects ($config -match "dns policy $policy") "audit messageaction" "-logAction")
  1170. }
  1171. # Get DNS Profiles linked to DNS Actions
  1172. foreach ($action in $nsObjects."dns action") {
  1173. addNSObject "dns profile" (getNSObjects ($config -match "dns action $action") "dns profile" "-dnsProfileName" )
  1174. }
  1175. # Get DNS Views linked to DNS Actions
  1176. foreach ($action in $nsObjects."dns action") {
  1177. addNSObject "dns view" (getNSObjects ($config -match "dns action $action") "dns view" "-viewName" )
  1178. }
  1179. addNSObject "dns global" ($config -match "bind dns global ") "dns global"
  1180. }
  1181. # Enumerate VPN vServer config for additional bound objects
  1182. if ($nsObjects."vpn vserver") {
  1183. if ($config -match "enable ns feature.* SSLVPN") {
  1184. $NSObjects."vpn parameter" = @("enable ns feature SSLVPN")
  1185. } else {
  1186. $NSObjects."vpn parameter" = @("# *** Citrix Gateway feature is not enabled")
  1187. }
  1188. addNSObject "vpn parameter" ($config -match "vpn parameter") "vpn parameter"
  1189. addNSObject "vpn parameter" ($config -match "ica parameter") "vpn parameter"
  1190. addNSObject "vpn parameter" ($config -match "aaa parameter") "vpn parameter"
  1191. addNSObject "vpn parameter" ($config -match "dns suffix") "vpn parameter"
  1192. addNSObject "clientless domains" ($config -match "ns_cvpn_default_inet_domains") "clientless domains"
  1193. foreach ($vpnvserver in $nsObjects."vpn vserver") {
  1194. $vserverConfig = $config -match " $vpnvserver "
  1195. addNSObject "cs policylabel" (getNSObjects $vserverConfig "cs policylabel")
  1196. addNSObject "cs policy" (getNSObjects $vserverConfig "cs policy")
  1197. addNSObject "ns tcpProfile" (getNSObjects $vserverConfig "ns tcpProfile")
  1198. addNSObject "netProfile" (getNSObjects $vserverConfig "netProfile" "-netProfile")
  1199. addNSObject "ns httpProfile" (getNSObjects $vserverConfig "ns httpProfile" "-httpProfileName")
  1200. addNSObject "ns trafficDomain" (getNSObjects $vserverConfig "ns trafficDomain" "-td")
  1201. addNSObject "authentication authnProfile" (getNSObjects $vserverConfig "authentication authnProfile" "-authnProfile")
  1202. addNSObject "vpn pcoipVserverProfile" (getNSObjects $vserverConfig "vpn pcoipVserverProfile" "-pcoipVserverProfileName")
  1203. addNSObject "vpn intranetApplication" (getNSObjects $vserverConfig "vpn intranetApplication" "-intranetApplication")
  1204. addNSObject "vpn portaltheme" (getNSObjects $vserverConfig "vpn portaltheme" "-portaltheme")
  1205. addNSObject "vpn eula" (getNSObjects $vserverConfig "vpn eula" "-eula")
  1206. addNSObject "vpn nextHopServer" (getNSObjects $vserverConfig "vpn nextHopServer" "-nextHopServer")
  1207. addNSObject "authentication ldapPolicy" (getNSObjects $vserverConfig "authentication ldapPolicy" "-policy")
  1208. addNSObject "authentication radiusPolicy" (getNSObjects $vserverConfig "authentication radiusPolicy" "-policy")
  1209. addNSObject "authentication samlIdPPolicy" (getNSObjects $vserverConfig "authentication samlIdPPolicy")
  1210. addNSObject "authentication samlPolicy" (getNSObjects $vserverConfig "authentication samlPolicy")
  1211. addNSObject "authentication certPolicy" (getNSObjects $vserverConfig "authentication certPolicy")
  1212. addNSObject "authentication dfaPolicy" (getNSObjects $vserverConfig "authentication dfaPolicy")
  1213. addNSObject "authentication localPolicy" (getNSObjects $vserverConfig "authentication localPolicy")
  1214. addNSObject "authentication negotiatePolicy" (getNSObjects $vserverConfig "authentication negotiatePolicy")
  1215. addNSObject "authentication tacacsPolicy" (getNSObjects $vserverConfig "authentication tacacsPolicy")
  1216. addNSObject "authentication webAuthPolicy" (getNSObjects $vserverConfig "authentication webAuthPolicy")
  1217. addNSObject "aaa preauthenticationpolicy" (getNSObjects $vserverConfig "aaa preauthenticationpolicy" "-policy")
  1218. addNSObject "vpn sessionPolicy" (getNSObjects $vserverConfig "vpn sessionPolicy" "-policy")
  1219. addNSObject "vpn trafficPolicy" (getNSObjects $vserverConfig "vpn trafficPolicy" "-policy")
  1220. addNSObject "vpn clientlessAccessPolicy" (getNSObjects $vserverConfig "vpn clientlessAccessPolicy" "-policy")
  1221. addNSObject "authorization policylabel" (getNSObjects $vserverConfig "authorization policylabel")
  1222. addNSObject "authorization policy" (getNSObjects $vserverConfig "authorization policy" "-policy")
  1223. addNSObject "responder policy" (getNSObjects $vserverConfig "responder policy" "-policy")
  1224. addNSObject "responder policylabel" (getNSObjects $vserverConfig "responder policylabel" "policylabel")
  1225. addNSObject "rewrite policy" (getNSObjects $vserverConfig "rewrite policy" "-policy")
  1226. addNSObject "rewrite policylabel" (getNSObjects $vserverConfig "rewrite policylabel" "policylabel")
  1227. addNSObject "appflow policy" (getNSObjects $vserverConfig "appflow policy" "-policy")
  1228. addNSObject "appflow policylabel" (getNSObjects $vserverConfig "appflow policylabel" "policylabel")
  1229. addNSObject "cache policy" (getNSObjects $vserverConfig "cache policy" "-policy")
  1230. addNSObject "cache policylabel" (getNSObjects $vserverConfig "cache policylabel" "policylabel")
  1231. addNSObject "audit syslogPolicy" (getNSObjects $vserverConfig "audit syslogPolicy" "-policy")
  1232. addNSObject "audit nslogPolicy" (getNSObjects $vserverConfig "audit nslogPolicy" "-policy")
  1233. addNSObject "ica policy" (getNSObjects $vserverConfig "ica policy" "-policy")
  1234. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policy")
  1235. addNSObject "ssl cipher" (getNSObjects $vserverConfig "ssl cipher")
  1236. addNSObject "ssl profile" (getNSObjects $vserverConfig "ssl profile")
  1237. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certkeyName")
  1238. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $vpnvserver ") "ssl vserver")
  1239. addNSObject "vpn url" (getNSObjects $vserverConfig "vpn url" "-urlName")
  1240. addNSObject "ipset" (getNSObjects $vserverConfig "ipset" "-ipset")
  1241. addNSObject "analytics profile" (getNSObjects $vserverConfig "analytics profile" "-analyticsProfile")
  1242. }
  1243. addNSObject "aaa group" (getNSObjects ($config -match "add aaa group") "aaa group")
  1244. addNSObject "vpn global" ($config -match "bind vpn global ") "vpn global"
  1245. }
  1246. # Get CSW Policies from CSW Policy Labels
  1247. if ($NSObjects."cs policylabel") {
  1248. foreach ($policy in $NSObjects."cs policylabel") {
  1249. addNSObject "cs policy" (getNSObjects ($config -match " $policy ") "cs policy")
  1250. }
  1251. }
  1252. # Get CSW Actions from CSW Policies
  1253. if ($NSObjects."cs policy") {
  1254. $matchExpression = GetMatchExpression $NSObjects."cs policy"
  1255. addNSObject "cs action" (getNSObjects ($config -match " $matchExpression ") "cs action")
  1256. addNSObject "audit messageaction" (getNSObjects ($config -match "cs policy $matchExpression") "audit messageaction" "-logAction")
  1257. # Get vServers linked to CSW Actions
  1258. if ($NSObjects."cs action") {
  1259. $matchExpression = GetMatchExpression $NSObjects."cs action"
  1260. $filteredConfig = $config -match " $matchExpression "
  1261. addNSObject "lb vserver" (getNSObjects ($filteredConfig) "lb vserver" "-targetLBVserver")
  1262. addNSObject "vpn vserver" (getNSObjects ($filteredConfig) "vpn vserver" "-targetVserver")
  1263. addNSObject "gslb vserver" (getNSObjects ($filteredConfig) "gslb vserver" "-targetVserver")
  1264. }
  1265. }
  1266. # Get objects bound to VPN Global
  1267. if ($nsObjects."vpn global") {
  1268. $vserverConfig = $config -match "bind vpn global "
  1269. addNSObject "vpn intranetApplication" (getNSObjects $vserverConfig "vpn intranetApplication" "-intranetApplication")
  1270. addNSObject "vpn portaltheme" (getNSObjects $vserverConfig "vpn portaltheme" "-portaltheme")
  1271. addNSObject "vpn eula" (getNSObjects $vserverConfig "vpn eula" "-eula")
  1272. addNSObject "vpn nextHopServer" (getNSObjects $vserverConfig "vpn nextHopServer" "-nextHopServer")
  1273. addNSObject "authentication ldapPolicy" (getNSObjects $vserverConfig "authentication ldapPolicy" "-policyName")
  1274. addNSObject "authentication radiusPolicy" (getNSObjects $vserverConfig "authentication radiusPolicy" "-policyName")
  1275. addNSObject "authentication samlIdPPolicy" (getNSObjects $vserverConfig "authentication samlIdPPolicy")
  1276. addNSObject "authentication samlPolicy" (getNSObjects $vserverConfig "authentication samlPolicy")
  1277. addNSObject "authentication certPolicy" (getNSObjects $vserverConfig "authentication certPolicy")
  1278. addNSObject "authentication dfaPolicy" (getNSObjects $vserverConfig "authentication dfaPolicy")
  1279. addNSObject "authentication localPolicy" (getNSObjects $vserverConfig "authentication localPolicy")
  1280. addNSObject "authentication negotiatePolicy" (getNSObjects $vserverConfig "authentication negotiatePolicy")
  1281. addNSObject "authentication tacacsPolicy" (getNSObjects $vserverConfig "authentication tacacsPolicy")
  1282. addNSObject "authentication webAuthPolicy" (getNSObjects $vserverConfig "authentication webAuthPolicy")
  1283. addNSObject "vpn sessionPolicy" (getNSObjects $vserverConfig "vpn sessionPolicy" "-policyName")
  1284. addNSObject "vpn trafficPolicy" (getNSObjects $vserverConfig "vpn trafficPolicy" "-policyName")
  1285. addNSObject "vpn clientlessAccessPolicy" (getNSObjects $vserverConfig "vpn clientlessAccessPolicy" "-policyName")
  1286. addNSObject "authorization policylabel" (getNSObjects $vserverConfig "authorization policylabel" "policylabel")
  1287. addNSObject "authorization policy" (getNSObjects $vserverConfig "authorization policy" "-policyName")
  1288. addNSObject "responder policy" (getNSObjects $vserverConfig "responder policy" "-policyName")
  1289. addNSObject "responder policylabel" (getNSObjects $vserverConfig "responder policylabel" "policylabel")
  1290. addNSObject "rewrite policy" (getNSObjects $vserverConfig "rewrite policy" "-policyName")
  1291. addNSObject "rewrite policylabel" (getNSObjects $vserverConfig "rewrite policylabel" "policylabel")
  1292. addNSObject "cache policy" (getNSObjects $vserverConfig "cache policy" "-policyName")
  1293. addNSObject "cache policylabel" (getNSObjects $vserverConfig "cache policylabel" "policylabel")
  1294. addNSObject "audit syslogPolicy" (getNSObjects $vserverConfig "audit syslogPolicy" "-policyName")
  1295. addNSObject "audit nslogPolicy" (getNSObjects $vserverConfig "audit nslogPolicy" "-policyName")
  1296. addNSObject "ica policy" (getNSObjects $vserverConfig "ica policy" "-policyName")
  1297. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policyName")
  1298. addNSObject "vpn url" (getNSObjects $vserverConfig "vpn url" "-urlName")
  1299. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certkeyName")
  1300. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-cacert")
  1301. $vserverConfig = $config -match "set vpn parameter "
  1302. addNSObject "lb vserver" (getNSObjects $vserverConfig "lb vserver" "-dnsVserverName")
  1303. addNSObject "vpn alwaysONProfile" (getNSObjects $vserverConfig "vpn alwaysONProfile" "-alwaysONProfileName")
  1304. addNSObject "aaa kcdAccount" (getNSObjects $vserverConfig "aaa kcdAccount" "-kcdAccount")
  1305. addNSObject "vpn pcoipProfile" (getNSObjects $vserverConfig "vpn pcoipProfile" "-pcoipProfileName")
  1306. addNSObject "rdp clientprofile" (getNSObjects $vserverConfig "rdp clientprofile" "-rdpClientProfileName")
  1307. }
  1308. # Look for LB Persistency Groups
  1309. if ($nsObjects."lb vserver") {
  1310. $matchExpression = getMatchExpression $nsObjects."lb vserver"
  1311. $vserverConfig = $config -match " $matchExpression$"
  1312. addNSObject "lb group" (getNSObjects ($vserverConfig) "lb group")
  1313. if ($nsObjects."lb group") {
  1314. foreach ($lbgroup in $NSObjects."lb group") {
  1315. addNSObject "lb vserver" (getNSObjects ($config -match "lb group " + $lbgroup) "lb vserver")
  1316. }
  1317. }
  1318. }
  1319. # Look for Backup LB vServers
  1320. if ($nsObjects."lb vserver") {
  1321. $matchExpression = getMatchExpression $nsObjects."lb vserver"
  1322. $currentVServers = $nsObjects."lb vserver"
  1323. $nsObjects."lb vserver" = @()
  1324. $vserverConfig = $config -match " $matchExpression "
  1325. # Backup VServers should be created before Active VServers
  1326. $backupVServers = getNSObjects ($vserverConfig) "lb vserver" "-backupVServer"
  1327. if ($backupVServers) {
  1328. addNSObject "lb vserver" ($backupVServers)
  1329. foreach ($vserver in $currentvservers) {
  1330. if ($backupVServers -notcontains $vserver) {
  1331. addNSObject "lb vserver" ($vserver)
  1332. }
  1333. }
  1334. } else {
  1335. $nsObjects."lb vserver" = $currentVServers
  1336. }
  1337. }
  1338. # Get objects linked to AAA Groups
  1339. if ($nsObjects."aaa group") {
  1340. foreach ($group in $nsObjects."aaa group") {
  1341. $groupConfig = $config -match " aaa group $group "
  1342. addNSObject "vpn intranetApplication" (getNSObjects $groupConfig "vpn intranetApplication" "-intranetApplication")
  1343. addNSObject "vpn sessionPolicy" (getNSObjects $groupConfig "vpn sessionPolicy" "-policy")
  1344. addNSObject "vpn trafficPolicy" (getNSObjects $groupConfig "vpn trafficPolicy" "-policy")
  1345. addNSObject "authorization policylabel" (getNSObjects $vserverConfig "authorization policylabel")
  1346. addNSObject "authorization policy" (getNSObjects $groupConfig "authorization policy" "-policy")
  1347. addNSObject "vpn url" (getNSObjects $groupConfig "vpn url" "-urlName")
  1348. }
  1349. }
  1350. # Get Preauthentication Actions from Preauthentication Policies
  1351. if ($NSObjects."aaa preauthenticationpolicy") {
  1352. foreach ($policy in $NSObjects."aaa preauthenticationpolicy") {
  1353. addNSObject "aaa preauthenticationaction" (getNSObjects ($config -match "aaa preauthenticationpolicy $policy ") "aaa preauthenticationaction" -position 4)
  1354. }
  1355. }
  1356. # Get VPN Session Actions from VPN Session Policies
  1357. if ($NSObjects."vpn sessionPolicy") {
  1358. foreach ($policy in $NSObjects."vpn sessionPolicy") {
  1359. addNSObject "vpn sessionAction" (getNSObjects ($config -match "vpn sessionPolicy $policy ") "vpn sessionAction" -position 4)
  1360. }
  1361. }
  1362. # Get KCD Accounts and DNS LB vServers from VPN Session Actions
  1363. if ($NSObjects."vpn sessionAction") {
  1364. foreach ($profile in $NSObjects."vpn sessionAction")
  1365. {
  1366. $profileConfig = $config -match "vpn sessionAction $profile "
  1367. addNSObject "aaa kcdAccount" (getNSObjects $profileConfig "aaa kcdAccount" "-kcdAccount")
  1368. addNSObject "lb vserver" (getNSObjects $profileConfig "lb vserver" "-dnsVserverName")
  1369. if ($profileConfig -match "http://" -or $profileConfig -match "https://")
  1370. {
  1371. addNSObject "lb vserver" (getHttpVServer $profileConfig)
  1372. }
  1373. }
  1374. }
  1375. # Enumerate LB vServer config for additional bound objects
  1376. if ($nsObjects."lb vserver" -or $nsObjects."sys") {
  1377. if ($config -match "enable ns feature.* lb") {
  1378. $NSObjects."lb parameter" = @("enable ns feature lb")
  1379. } else {
  1380. $NSObjects."lb parameter" = @("# *** Load Balancing feature is not enabled")
  1381. }
  1382. addNSObject "lb parameter" ($config -match "ns mode") "lb parameter"
  1383. addNSObject "lb parameter" ($config -match "set lb parameter") "lb parameter"
  1384. addNSObject "lb parameter" ($config -match "set ns param") "lb parameter"
  1385. addNSObject "lb parameter" ($config -match "set dns parameter") "lb parameter"
  1386. addNSObject "lb parameter" ($config -match "set dns profile default-dns-profile") "lb parameter"
  1387. addNSObject "lb parameter" ($config -match "set ns tcpParam") "lb parameter"
  1388. addNSObject "lb parameter" ($config -match "set ns tcpProfile nstcp_default") "lb parameter"
  1389. addNSObject "lb parameter" ($config -match "set ns httpParam") "lb parameter"
  1390. addNSObject "lb parameter" ($config -match "set ns tcpbufParam") "lb parameter"
  1391. addNSObject "lb parameter" ($config -match "set ns timeout") "lb parameter"
  1392. GetLBvServerBindings $NSObjects."lb vserver"
  1393. }
  1394. # Get AAA VServers linked to Authentication Profiles
  1395. if ($NSObjects."authentication authnProfile") {
  1396. foreach ($profile in $NSObjects."authentication authnProfile") {
  1397. addNSObject "authentication vserver" (getNSObjects ($config -match "authentication authnProfile $profile ") "authentication vserver" "-authnVsName")
  1398. }
  1399. }
  1400. # Get Objects linked to Authentication vServers
  1401. if ($NSObjects."authentication vserver") {
  1402. if ($config -match "enable ns feature.* rewrite") {
  1403. $NSObjects."authentication param" = @("enable ns feature AAA")
  1404. } else {
  1405. $NSObjects."authentication param" = @("# *** AAA feature is not enabled")
  1406. }
  1407. $matchExpression = getMatchExpression $NSObjects."authentication vserver"
  1408. $vserverConfig = $config -match " $matchExpression "
  1409. addNSObject "ns trafficDomain" (getNSObjects $vserverConfig "ns trafficDomain" "-td")
  1410. addNSObject "authentication ldapPolicy" (getNSObjects $vserverConfig "authentication ldapPolicy")
  1411. addNSObject "authentication radiusPolicy" (getNSObjects $vserverConfig "authentication radiusPolicy")
  1412. addNSObject "authentication policy" (getNSObjects $vserverConfig "authentication policy")
  1413. addNSObject "authentication samlIdPPolicy" (getNSObjects $vserverConfig "authentication samlIdPPolicy")
  1414. addNSObject "authentication samlPolicy" (getNSObjects $vserverConfig "authentication samlPolicy")
  1415. addNSObject "authentication certPolicy" (getNSObjects $vserverConfig "authentication certPolicy")
  1416. addNSObject "authentication dfaPolicy" (getNSObjects $vserverConfig "authentication dfaPolicy")
  1417. addNSObject "authentication localPolicy" (getNSObjects $vserverConfig "authentication localPolicy")
  1418. addNSObject "authentication negotiatePolicy" (getNSObjects $vserverConfig "authentication negotiatePolicy")
  1419. addNSObject "authentication tacacsPolicy" (getNSObjects $vserverConfig "authentication tacacsPolicy")
  1420. addNSObject "authentication webAuthPolicy" (getNSObjects $vserverConfig "authentication webAuthPolicy")
  1421. addNSObject "tm sessionPolicy" (getNSObjects $vserverConfig "tm sessionPolicy")
  1422. addNSObject "vpn portaltheme" (getNSObjects $vserverConfig "vpn portaltheme" "-portaltheme")
  1423. addNSObject "authentication loginSchemaPolicy" (getNSObjects $vserverConfig "authentication loginSchemaPolicy")
  1424. addNSObject "authentication policylabel" (getNSObjects $vserverConfig "authentication policylabel" "-nextFactor")
  1425. addNSObject "audit syslogPolicy" (getNSObjects $vserverConfig "audit syslogPolicy" "-policy")
  1426. addNSObject "audit nslogPolicy" (getNSObjects $vserverConfig "audit nslogPolicy" "-policy")
  1427. addNSObject "cs policy" (getNSObjects $vserverConfig "cs policy" "-policy")
  1428. addNSObject "ssl policy" (getNSObjects $vserverConfig "ssl policy" "-policy")
  1429. addNSObject "ssl cipher" (getNSObjects $vserverConfig "ssl cipher" "-cipherName")
  1430. addNSObject "ssl profile" (getNSObjects $vserverConfig "ssl profile")
  1431. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-certkeyName")
  1432. addNSObject "ssl certKey" (getNSObjects $vserverConfig "ssl certKey" "-cacert")
  1433. addNSObject "ssl vserver" (getNSObjects ($config -match "ssl vserver $authVServer ") "ssl vserver")
  1434. }
  1435. # Get CSW Actions from CSW Policies
  1436. if ($NSObjects."cs policy") {
  1437. $matchExpression = getMatchExpression $NSObjects."cs policy"
  1438. addNSObject "cs action" (getNSObjects ($config -match " $matchExpression ") "cs action")
  1439. addNSObject "audit messageaction" (getNSObjects ($config -match "cr policy $policy") "audit messageaction" "-logAction")
  1440. # Get vServers linked to CSW Actions
  1441. if ($NSObjects."cs action") {
  1442. $matchExpression = getMatchExpression $NSObjects."cs action"
  1443. $filteredConfig = $config -match " $matchExpression "
  1444. addNSObject "lb vserver" (getNSObjects ($filteredConfig) "lb vserver" "-targetLBVserver")
  1445. addNSObject "vpn vserver" (getNSObjects ($filteredConfig) "vpn vserver" "-targetVserver")
  1446. addNSObject "gslb vserver" (getNSObjects ($filteredConfig) "gslb vserver" "-targetVserver")
  1447. }
  1448. }
  1449. # Get Next Factors, Authentication Policies and Login Schemas from Authentication Policy Labels
  1450. if ($NSObjects."authentication policylabel") {
  1451. # Get Next Factors; repeat multiple times for Next Factor nesting level
  1452. for ($i=0;$i -le $nFactorNestingLevel; $i++) {
  1453. foreach ($policy in $NSObjects."authentication policylabel") {
  1454. addNSObject "authentication policylabel" (getNSObjects ($config -match " $policy ") "authentication policylabel" "-nextFactor")
  1455. }
  1456. }
  1457. foreach ($policy in $NSObjects."authentication policylabel") {
  1458. addNSObject "authentication policy" (getNSObjects ($config -match " $policy ") "authentication policy")
  1459. addNSObject "authentication loginSchema" (getNSObjects ($config -match " $policy ") "authentication loginSchema")
  1460. }
  1461. }
  1462. # Sort the Policy Labels so Next Factors are created prior to policy bindings in earlier factors
  1463. if ($NSObjects."authentication policylabel") {
  1464. $policyLabelsSorted = @()
  1465. foreach ($policyLabel in $NSObjects."authentication policylabel") {
  1466. $policyBindings = $config -match ('^bind authentication policylabel ' + $policyLabel + " -(policy|policyName) ")
  1467. $nextFactors = $policyBindings | select-string -Pattern ('-nextFactor (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  1468. if (-not $nextFactors) {
  1469. $policyLabelsSorted = ,$policyLabel + $policyLabelsSorted
  1470. } else {
  1471. foreach ($nextFactor in $nextFactors) {
  1472. if ($policyLabelsSorted -contains $nextFactor) {
  1473. $policyLabelsSorted = $policyLabelsSorted + ,$policyLabel
  1474. }
  1475. }
  1476. }
  1477. }
  1478. for ($i=0; $i -lt $nFactorNestingLevel; $i++) {
  1479. foreach ($policyLabel in $NSObjects."authentication policylabel") {
  1480. $policyBindings = $config -match ('^bind authentication policylabel ' + $policyLabel + " -(policy|policyName) ")
  1481. $nextFactors = $policyBindings | select-string -Pattern ('-nextFactor (".*?"|[^-"]\S+)') | ForEach-Object {$_.Matches.Groups[1].value}
  1482. foreach ($nextFactor in $nextFactors) {
  1483. if ($policyLabelsSorted -contains $nextFactor) {
  1484. $policyLabelsSorted = $policyLabelsSorted + ,$policyLabel
  1485. }
  1486. }
  1487. }
  1488. }
  1489. $NSObjects."authentication policylabel" = $policyLabelsSorted
  1490. }
  1491. # Get Authentication Actions from Advanced Authentication Policies
  1492. if ($NSObjects."authentication policy") {
  1493. $matchExpression = getMatchExpression $NSObjects."authentication policy"
  1494. $filteredConfig = $config -match "authentication policy $matchExpression "
  1495. addNSObject "authentication ldapAction" (getNSObjects ($filteredConfig) "authentication ldapAction")
  1496. addNSObject "audit messageaction" (getNSObjects ($filteredConfig) "audit messageaction" "-logAction")
  1497. addNSObject "authentication radiusAction" (getNSObjects ($filteredConfig) "authentication radiusAction")
  1498. addNSObject "authentication samlAction" (getNSObjects ($filteredConfig) "authentication samlAction" -position 4)
  1499. addNSObject "authentication certAction" (getNSObjects ($filteredConfig) "authentication certAction")
  1500. addNSObject "authentication dfaAction" (getNSObjects ($filteredConfig) "authentication dfaAction")
  1501. addNSObject "authentication epaAction" (getNSObjects ($filteredConfig) "authentication epaAction")
  1502. addNSObject "authentication negotiateAction" (getNSObjects ($filteredConfig) "authentication negotiateAction")
  1503. addNSObject "authentication OAuthAction" (getNSObjects ($filteredConfig) "authentication OAuthAction")
  1504. addNSObject "authentication storefrontAuthAction" (getNSObjects ($filteredConfig) "authentication storefrontAuthAction")
  1505. addNSObject "authentication tacacsAction" (getNSObjects ($filteredConfig) "authentication tacacsAction")
  1506. addNSObject "authentication webAuthAction" (getNSObjects ($filteredConfig) "authentication webAuthAction")
  1507. addNSObject "authentication emailAction" (getNSObjects ($filteredConfig) "authentication emailAction")
  1508. addNSObject "authentication noAuthAction" (getNSObjects ($filteredConfig) "authentication noAuthAction")
  1509. addNSObject "authentication captchaAction" (getNSObjects ($filteredConfig) "authentication captchaAction")
  1510. }
  1511. # Get LDAP Actions from LDAP Policies
  1512. if ($NSObjects."authentication ldapPolicy") {
  1513. foreach ($policy in $NSObjects."authentication ldapPolicy") {
  1514. addNSObject "authentication ldapAction" (getNSObjects ($config -match "authentication ldapPolicy $policy ") "authentication ldapAction")
  1515. }
  1516. }
  1517. # Get RADIUS Actions from RADIUS Policies
  1518. if ($NSObjects."authentication radiusPolicy") {
  1519. foreach ($policy in $NSObjects."authentication radiusPolicy") {
  1520. addNSObject "authentication radiusAction" (getNSObjects ($config -match "authentication radiusPolicy $policy ") "authentication radiusAction" -position 4)
  1521. }
  1522. }
  1523. # Get Cert Actions from Cert Policies
  1524. if ($NSObjects."authentication certPolicy") {
  1525. foreach ($policy in $NSObjects."authentication certPolicy") {
  1526. addNSObject "authentication certAction" (getNSObjects ($config -match "authentication certPolicy $policy ") "authentication certAction" -position 4)
  1527. }
  1528. }
  1529. # Get DFA Actions from DFA Policies
  1530. if ($NSObjects."authentication dfaPolicy") {
  1531. foreach ($policy in $NSObjects."authentication dfaPolicy") {
  1532. addNSObject "authentication dfaAction" (getNSObjects ($config -match "authentication dfaPolicy $policy ") "authentication dfaAction")
  1533. }
  1534. }
  1535. # Get Negotiate Actions from Negotiate Policies
  1536. if ($NSObjects."authentication negotiatePolicy") {
  1537. foreach ($policy in $NSObjects."authentication negotiatePolicy") {
  1538. addNSObject "authentication negotiateAction" (getNSObjects ($config -match "authentication negotiatePolicy $policy ") "authentication negotiateAction")
  1539. }
  1540. }
  1541. # Get TACACS Actions from TACACS Policies
  1542. if ($NSObjects."authentication tacacsPolicy") {
  1543. foreach ($policy in $NSObjects."authentication tacacsPolicy") {
  1544. addNSObject "authentication tacacsAction" (getNSObjects ($config -match "authentication tacacsPolicy $policy ") "authentication tacacsAction")
  1545. }
  1546. }
  1547. # Get Web Auth Actions from Web Auth Policies
  1548. if ($NSObjects."authentication webAuthPolicy") {
  1549. foreach ($policy in $NSObjects."authentication webAuthPolicy") {
  1550. addNSObject "authentication webAuthAction" (getNSObjects ($config -match "authentication webAuthPolicy $policy ") "authentication webAuthAction")
  1551. }
  1552. }
  1553. # Get SAML iDP Profiles from SAML iDP Policies
  1554. if ($NSObjects."authentication samlIdPPolicy") {
  1555. foreach ($policy in $NSObjects."authentication samlIdPPolicy") {
  1556. addNSObject "authentication samlIdPProfile" (getNSObjects ($config -match "authentication samlIdPPolicy $policy ") "authentication samlIdPProfile" -position 4)
  1557. addNSObject "audit messageaction" (getNSObjects ($config -match "authentication samlIdPPolicy $policy") "audit messageaction" "-logAction")
  1558. }
  1559. }
  1560. # Get SAML Actions from SAML Authentication Policies
  1561. if ($NSObjects."authentication samlPolicy") {
  1562. $matchExpression = GetMatchExpression $NSObjects."authentication samlPolicy"
  1563. addNSObject "authentication samlAction" (getNSObjects ($config -match "authentication samlPolicy $matchExpression ") "authentication samlAction" -position 4)
  1564. }
  1565. # Get SSL Certificates from SAML Actions, SAML Profiles, and ADFS Proxy Profiles
  1566. if ($NSObjects."authentication samlAction") {
  1567. $matchExpression = GetMatchExpression $NSObjects."authentication samlAction"
  1568. $filteredConfig = $config -match "authentication samlAction $matchExpression "
  1569. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-samlIdPCertName")
  1570. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-samlSigningCertName")
  1571. }
  1572. if ($NSObjects."authentication samlIdPProfile") {
  1573. $matchExpression = GetMatchExpression $NSObjects."authentication samlIdPProfile"
  1574. $filteredConfig = $config -match "authentication samlIdPProfile $matchExpression "
  1575. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-samlIdPCertName")
  1576. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-samlSPCertName")
  1577. }
  1578. foreach ($action in $NSObjects."authentication adfsProxyProfile") {
  1579. addNSObject "ssl certKey" (getNSObjects ($config -match "authentication adfsProxyProfile $action ") "ssl certKey" "-certKeyName")
  1580. }
  1581. # Get Push Service from LDAP Actions
  1582. foreach ($action in $NSObjects."authentication ldapAction") {
  1583. addNSObject "authentication pushService" (getNSObjects ($config -match "authentication ldapAction $action ") "authentication pushService" "-pushService")
  1584. }
  1585. # Get Default AAA Groups from Authentication Actions
  1586. foreach ($action in $NSObjects."authentication certAction") {
  1587. addNSObject "aaa group" (getNSObjects ($config -match "authentication certAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1588. }
  1589. foreach ($action in $NSObjects."authentication dfaAction") {
  1590. addNSObject "aaa group" (getNSObjects ($config -match "authentication dfaAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1591. }
  1592. foreach ($action in $NSObjects."authentication epaAction") {
  1593. addNSObject "aaa group" (getNSObjects ($config -match "authentication epaAction $action ") "aaa group" "-defaultEPAGroup")
  1594. addNSObject "aaa group" (getNSObjects ($config -match "authentication epaAction $action ") "aaa group" "-quarantineGroup")
  1595. }
  1596. foreach ($action in $NSObjects."authentication ldapAction") {
  1597. addNSObject "aaa group" (getNSObjects ($config -match "authentication ldapAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1598. }
  1599. foreach ($action in $NSObjects."authentication negotiateAction") {
  1600. addNSObject "aaa group" (getNSObjects ($config -match "authentication negotiateAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1601. }
  1602. foreach ($action in $NSObjects."authentication OAuthAction") {
  1603. addNSObject "aaa group" (getNSObjects ($config -match "authentication OAuthAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1604. }
  1605. foreach ($action in $NSObjects."authentication radiusAction") {
  1606. addNSObject "aaa group" (getNSObjects ($config -match "authentication radiusAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1607. }
  1608. foreach ($action in $NSObjects."authentication samlAction") {
  1609. addNSObject "aaa group" (getNSObjects ($config -match "authentication samlAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1610. }
  1611. foreach ($action in $NSObjects."authentication webAuthAction") {
  1612. addNSObject "aaa group" (getNSObjects ($config -match "authentication webAuthAction $action ") "aaa group" "-defaultAuthenticationGroup")
  1613. }
  1614. # Get SSL Objects from SSL vServers
  1615. if ($NSObjects."ssl vserver") {
  1616. $matchExpression = getMatchExpression $NSObjects."ssl vserver"
  1617. $filteredConfig = $config -match " ssl vserver $matchExpression "
  1618. addNSObject "ssl cipher" (getNSObjects ($filteredConfig) "ssl cipher" "-cipherName")
  1619. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-certkeyName")
  1620. addNSObject "ssl certKey" (getNSObjects ($filteredConfig) "ssl certKey" "-cacert")
  1621. addNSObject "ssl logprofile" (getNSObjects ($filteredConfig) "ssl logprofile" "-ssllogprofile")
  1622. addNSObject "ssl profile" (getNSObjects ($filteredConfig) "ssl profile" "-sslProfile")
  1623. }
  1624. # Get objects linked to certKeys
  1625. if ($NSObjects."ssl certKey") {
  1626. foreach ($certKey in $NSObjects."ssl certKey") {
  1627. $certKey = $certKey -replace "\.", "\."
  1628. $certKey = $certKey -replace "\*", "\*"
  1629. # Get FIPS Keys from SSL Certs
  1630. addNSObject "ssl fipsKey" (getNSObjects ($config -match "add ssl certKey $certKey ") "ssl fipsKey" "-fipsKey")
  1631. # Get HSM Keys from SSL Certs
  1632. addNSObject "ssl hsmKey" (getNSObjects ($config -match "add ssl certKey $certKey ") "ssl hsmKey" "-hsmKey")
  1633. # Put Server Cerficates in different bucket than CA Certificates
  1634. addNSObject "ssl cert" ($config -match "add ssl certKey $certKey") "ssl certKey"
  1635. # CA Certs are seperate section so they can be outputted before server certs
  1636. $CACert = getNSObjects ($config -match "link ssl certKey $certKey ") "ssl certKey"
  1637. foreach ($cert in $CACert) { if ($cert -notmatch $certKey) {$CACert = $cert} }
  1638. if ($CACert) {
  1639. addNSObject "ssl cert" ($config -match "add ssl certKey $CACert") "ssl certKey"
  1640. addNSObject "ssl link" ($config -match "link ssl certKey $certKey") "ssl certKey"
  1641. $certKey = $CACert
  1642. }
  1643. # Intermediate certs are sometimes linked to other intermediates
  1644. $CACert = getNSObjects ($config -match "link ssl certKey $CACert ") "ssl certKey"
  1645. foreach ($cert in $CACert) { if ($cert -notmatch $certKey) {$CACert = $cert} }
  1646. if ($CACert) {
  1647. addNSObject "ssl cert" ($config -match "add ssl certKey $CACert") "ssl certKey"
  1648. addNSObject "ssl link" ($config -match "link ssl certKey $certKey") "ssl certKey"
  1649. $certKey = $CACert
  1650. }
  1651. # Intermedicate certs are sometimes linked to root certs
  1652. $CACert = getNSObjects ($config -match "link ssl certKey $CACert ") "ssl certKey"
  1653. foreach ($cert in $CACert) { if ($cert -notmatch $certKey) {$CACert = $cert} }
  1654. if ($CACert) {
  1655. addNSObject "ssl cert" ($config -match "add ssl certKey $CACert") "ssl certKey"
  1656. addNSObject "ssl link" ($config -match "link ssl certKey $certKey") "ssl certKey"
  1657. }
  1658. }
  1659. }
  1660. # Get Azure Key Vaults from HSM Keys
  1661. if ($NSObjects."ssl hmsKey") {
  1662. foreach ($hmsKey in $NSObjects."ssl hmsKey") {
  1663. addNSObject "azure keyvault" (getNSObjects ($config -match "add ssl hsmKey $hsmKey ") "azure keyvault" "-keystore")
  1664. }
  1665. # Get callout root certificates
  1666. addNSObject "ssl cert" ($config -match "bind ssl cacertGroup ns_callout_certs ") "ssl certKey"
  1667. }
  1668. # Get Azure Applications from Azure Key Vaults
  1669. if ($NSObjects."azure keyvault") {
  1670. foreach ($vault in $NSObjects."azure keyVault") {
  1671. addNSObject "azure application" (getNSObjects ($config -match "add azure keyVault $vault ") "azure application" "-azureApplication")
  1672. }
  1673. }
  1674. # Get Objects linked to Monitors
  1675. if ($NSObjects.monitor) {
  1676. foreach ($monitor in $NSObjects.monitor) {
  1677. $monitorConfig = $config -match " monitor $monitor "
  1678. addNSObject "netProfile" (getNSObjects $monitorConfig "netProfile" "-netProfile")
  1679. addNSObject "ns trafficDomain" (getNSObjects $monitorConfig "ns trafficDomain" "-td")
  1680. addNSObject "aaa kcdAccount" (getNSObjects $monitorConfig "aaa kcdAccount" "-kcdAccount")
  1681. addNSObject "ssl profile" (getNSObjects $monitorConfig "ssl profile" "-sslProfile")
  1682. addNSObject "lb metricTable" (getNSObjects $monitorConfig "lb metricTable" "-metricTable")
  1683. }
  1684. }
  1685. # Get VPN Clientless Profiles from VPN Clientless Policies
  1686. if ($NSObjects."vpn clientlessAccessPolicy") {
  1687. foreach ($policy in $NSObjects."vpn clientlessAccessPolicy") {
  1688. addNSObject "vpn clientlessAccessProfile" (getNSObjects ($config -match " vpn clientlessAccessPolicy $policy ") "vpn clientlessAccessProfile" -position 4)
  1689. }
  1690. }
  1691. # Get Rewrite PolicyLabels from VPN Clientless Profiles
  1692. if ($NSObjects."vpn clientlessAccessProfile") {
  1693. foreach ($Profile in $NSObjects."vpn clientlessAccessProfile") {
  1694. addNSObject "rewrite policylabel" (getNSObjects ($config -match " vpn clientlessAccessProfile $Profile ") "rewrite policylabel" -position 4)
  1695. }
  1696. }
  1697. # Get global filter bindings, filter actions, and forwarding services
  1698. if ($config -match "enable ns feature.* CF") {
  1699. addNSObject "filter policy" (getNSObjects ($config -match "bind filter global ") "filter policy")
  1700. if ($NSObjects."filter policy") {
  1701. # Get Filter Actions from Filter Policies
  1702. foreach ($policy in $NSObjects."filter policy") {
  1703. addNSObject "filter action" (getNSObjects ($config -match "filter policy $policy ") "filter action")
  1704. }
  1705. # Get Forwarding Services from Filter Actions
  1706. foreach ($action in $NSObjects."filter action") {
  1707. addNSObject "service" (getNSObjects ($config -match "filter action $action ") "service" "forward")
  1708. }
  1709. }
  1710. }
  1711. if ($config -match "enable ns feature.* IC") {
  1712. $NSObjects."cache parameter" = @("enable ns feature IC")
  1713. # Get Cache Policies from Global Cache Bindings
  1714. addNSObject "cache policylabel" (getNSObjects ($config -match "bind cache global ") "cache policylabel")
  1715. addNSObject "cache Policy" (getNSObjects ($config -match "bind cache global ") "cache Policy")
  1716. addNSObject "cache parameter" ($config -match "set cache parameter ") "cache parameter"
  1717. addNSObject "cache global" ($config -match "bind cache global ") "cache global"
  1718. } else {
  1719. $NSObjects."cache parameter" = @("# *** Integrated Caching feature is not enabled. Cache Global bindings skipped.")
  1720. }
  1721. # Get Cache Policies from Cache Policy Labels
  1722. if ($NSObjects."cache policylabel") {
  1723. foreach ($policy in $NSObjects."cache policylabel") {
  1724. addNSObject "cache Policy" (getNSObjects ($config -match " $policy ") "cache Policy")
  1725. }
  1726. }
  1727. # Get Cache Content Groups from Cache Policies
  1728. if ($NSObjects."cache policy") {
  1729. foreach ($policy in $NSObjects."cache policy") {
  1730. addNSObject "cache contentGroup" (getNSObjects ($config -match " $policy ") "cache contentGroup")
  1731. }
  1732. }
  1733. # Get Cache Selectors from Cache Content Groups
  1734. if ($NSObjects."cache contentGroup") {
  1735. foreach ($policy in $NSObjects."cache contentGroup") {
  1736. addNSObject "cache selector" (getNSObjects ($config -match " $policy ") "cache selector")
  1737. }
  1738. }
  1739. # Get Global Responder Bindings
  1740. addNSObject "responder policy" (getNSObjects ($config -match "bind responder global ") "responder policy")
  1741. addNSObject "responder policylabel" (getNSObjects ($config -match "bind responder global ") "responder policylabel")
  1742. # Get Responder Policies from Responder Policy Labels
  1743. if ($NSObjects."responder policylabel") {
  1744. foreach ($policy in $NSObjects."responder policylabel") {
  1745. addNSObject "responder Policy" (getNSObjects ($config -match " $policy ") "responder Policy")
  1746. }
  1747. }
  1748. # Get Responder Actions and Responder Global Settings
  1749. if ($NSObjects."responder policy") {
  1750. $matchExpression = getMatchExpression $NSObjects."responder policy"
  1751. $filteredConfig = $config -match " responder policy $matchExpression "
  1752. addNSObject "responder action" (getNSObjects ($filteredConfig) "responder action")
  1753. addNSObject "audit messageaction" (getNSObjects ($filteredConfig) "audit messageaction" "-logAction")
  1754. addNSObject "ns assignment" (getNSObjects ($filteredConfig) "ns assignment")
  1755. if ($config -match "enable ns feature.* RESPONDER") {
  1756. $NSObjects."responder param" = @("enable ns feature RESPONDER")
  1757. } else {
  1758. $NSObjects."responder param" = @("# *** Responder feature is not enabled")
  1759. }
  1760. addNSObject "responder param" ($config -match "set responder param ") "responder param"
  1761. addNSObject "responder global" ($config -match "bind responder global ") "responder global"
  1762. }
  1763. # Get Rewrite Policies from Global Rewrite Bindings
  1764. addNSObject "rewrite policy" (getNSObjects ($config -match "bind rewrite global ") "rewrite policy")
  1765. addNSObject "rewrite policylabel" (getNSObjects ($config -match "bind rewrite global ") "rewrite policylabel")
  1766. # Get Rewrite Policies from Rewrite Policy Labels
  1767. if ($NSObjects."rewrite policylabel") {
  1768. $matchExpression = getMatchExpression $NSObjects."rewrite policylabel"
  1769. addNSObject "rewrite Policy" (getNSObjects ($config -match " $matchExpression ") "rewrite Policy")
  1770. }
  1771. # Get Rewrite Actions and Rewrite Global Settings
  1772. if ($NSObjects."rewrite policy") {
  1773. $matchExpression = getMatchExpression $NSObjects."rewrite policy"
  1774. $filteredConfig = $config -match "rewrite policy $matchExpression "
  1775. addNSObject "rewrite action" (getNSObjects ($filteredConfig) "rewrite action")
  1776. addNSObject "audit messageaction" (getNSObjects ($filteredConfig) "audit messageaction" "-logAction")
  1777. if ($config -match "enable ns feature.* rewrite") {
  1778. $NSObjects."rewrite param" = @("enable ns feature rewrite")
  1779. } else {
  1780. $NSObjects."rewrite param" = @("# *** Rewrite feature is not enabled")
  1781. }
  1782. addNSObject "rewrite param" ($config -match "set rewrite param ") "rewrite param"
  1783. addNSObject "rewrite global" ($config -match "bind rewrite global ") "rewrite global"
  1784. }
  1785. # Get Compression Policies from Global Compression Bindings
  1786. addNSObject "cmp policy" (getNSObjects ($config -match "bind cmp global ") "cmp policy")
  1787. addNSObject "cmp policylabel" (getNSObjects ($config -match "bind cmp global ") "cmp policylabel")
  1788. # Get Compression Policies from Compression Policy Labels
  1789. if ($NSObjects."cmp policylabel") {
  1790. foreach ($policy in $NSObjects."cmp policylabel") {
  1791. addNSObject "cmp policy" (getNSObjects ($config -match "cmp policylabel $policy ") "cmp policy")
  1792. }
  1793. }
  1794. # Get Compression Actions and Compression Global Settings
  1795. if ($NSObjects."cmp policy") {
  1796. foreach ($policy in $NSObjects."cmp policy") {
  1797. addNSObject "cmp action" (getNSObjects ($config -match "cmp policy $Pplicy ") "cmp action")
  1798. addNSObject "audit messageaction" (getNSObjects ($config -match "cmp policy $policy") "audit messageaction" "-logAction")
  1799. }
  1800. if ($config -match "enable ns feature.* cmp") {
  1801. $NSObjects."cmp parameter" = @("enable ns feature cmp")
  1802. } else {
  1803. $NSObjects."cmp parameter" = @("# *** Compression feature is not enabled")
  1804. }
  1805. addNSObject "cmp parameter" ($config -match "set cmp parameter ") "cmp parameter"
  1806. addNSObject "cmp global" ($config -match "bind cmp global ") "cmp global"
  1807. }
  1808. # Get global bound Traffic Management Policies
  1809. $filteredConfig = $config -match "bind tm global"
  1810. addNSObject "tm trafficPolicy" (getNSObjects ($filteredConfig) "tm trafficPolicy")
  1811. addNSObject "tm sessionPolicy" (getNSObjects ($filteredConfig) "tm sessionPolicy")
  1812. addNSObject "audit syslogPolicy" (getNSObjects ($filteredConfig) "audit syslogPolicy")
  1813. addNSObject "audit nslogPolicy" (getNSObjects ($filteredConfig) "audit nslogPolicy")
  1814. addNSObject "tm global" ($filteredConfig) "tm global"
  1815. # Get AAA Traffic Actions from AAA Traffic Policies
  1816. if ($NSObjects."tm trafficPolicy") {
  1817. $matchExpression = getMatchExpression $NSObjects."tm trafficPolicy"
  1818. addNSObject "tm trafficAction" (getNSObjects ($config -match " $matchExpression ") "tm trafficAction" -position 4)
  1819. }
  1820. # Get KCD Accounts and SSO Profiles from AAA Traffic Actions
  1821. if ($NSObjects."tm trafficAction") {
  1822. $matchExpression = getMatchExpression $NSObjects."tm trafficAction"
  1823. $filteredConfig = $config -match "tm trafficAction $matchExpression "
  1824. addNSObject "aaa kcdAccount" (getNSObjects ($filteredConfig) "aaa kcdAccount" "-kcdAccount")
  1825. addNSObject "tm formSSOAction" (getNSObjects ($filteredConfig) "tm formSSOAction" "-formSSOAction")
  1826. addNSObject "tm samlSSOProfile" (getNSObjects ($filteredConfig) "tm samlSSOProfile" "-samlSSOProfile")
  1827. }
  1828. # Get Authorization Policies from Authorization Policy Labels
  1829. if ($NSObjects."authorization policylabel") {
  1830. foreach ($policy in $NSObjects."authorization policylabel") {
  1831. addNSObject "authorization policy" (getNSObjects ($config -match "authorization policy $policy ") "authorization policy")
  1832. addNSObject "audit messageaction" (getNSObjects ($config -match "authorization policy $policy") "audit messageaction" "-logAction")
  1833. }
  1834. }
  1835. # Get SmartControl Actions from SmartControl Policies
  1836. if ($NSObjects."ica policy") {
  1837. foreach ($policy in $NSObjects."ica policy") {
  1838. addNSObject "ica action" (getNSObjects ($config -match "ica policy $policy ") "ica action" -position 4)
  1839. addNSObject "audit messageaction" (getNSObjects ($config -match "ica policy $policy") "audit messageaction" "-logAction")
  1840. }
  1841. # Get SmartControl Access Profiles from SmartControl Actions
  1842. if ($NSObjects."ica action") {
  1843. foreach ($policy in $NSObjects."ica action") {
  1844. addNSObject "ica accessprofile" (getNSObjects ($config -match " $policy ") "ica accessprofile" -position 4)
  1845. }
  1846. }
  1847. }
  1848. # Get VPN Traffic Actions from VPN Traffic Policies
  1849. if ($NSObjects."vpn trafficPolicy") {
  1850. foreach ($policy in $NSObjects."vpn trafficPolicy") {
  1851. addNSObject "vpn trafficAction" (getNSObjects ($config -match " $policy ") "vpn trafficAction" -position 4)
  1852. }
  1853. }
  1854. # Get KCD Accounts and SSO Profiles from VPN Traffic Actions
  1855. if ($NSObjects."vpn trafficAction") {
  1856. foreach ($profile in $NSObjects."vpn trafficAction") {
  1857. addNSObject "aaa kcdAccount" (getNSObjects ($config -match "vpn trafficAction $profile ") "aaa kcdAccount" "-kcdAccount")
  1858. addNSObject "vpn formSSOAction" (getNSObjects ($config -match "vpn trafficAction $profile ") "vpn formSSOAction" "-formSSOAction")
  1859. addNSObject "vpn samlSSOProfile" (getNSObjects ($config -match "vpn trafficAction $profile ") "vpn samlSSOProfile" "-samlSSOProfile")
  1860. }
  1861. }
  1862. # Get PCoIP and RDP Profiles, and AlwaysOn Profiles from VPN Session Actions
  1863. if ($NSObjects."vpn sessionAction") {
  1864. foreach ($policy in $NSObjects."vpn sessionAction") {
  1865. addNSObject "vpn pcoipProfile" (getNSObjects ($config -match " $policy ") "vpn pcoipProfile" -position 4)
  1866. addNSObject "rdp clientprofile" (getNSObjects ($config -match " $policy ") "rdp clientprofile" -position 4)
  1867. addNSObject "vpn alwaysONProfile" (getNSObjects ($config -match " $policy ") "vpn alwaysONProfile" "-alwaysONProfileName")
  1868. }
  1869. }
  1870. # Get AAA Session Actions
  1871. if ($NSObjects."tm sessionPolicy") {
  1872. foreach ($policy in $NSObjects."tm sessionPolicy") {
  1873. addNSObject "tm sessionAction" (getNSObjects ($config -match " $policy ") "tm sessionAction")
  1874. }
  1875. }
  1876. # Get KCD Accounts from AAA Session Actions
  1877. if ($NSObjects."tm sessionAction") {
  1878. foreach ($profile in $NSObjects."tm sessionAction") {
  1879. addNSObject "aaa kcdAccount" (getNSObjects ($config -match "tm sessionAction $profile ") "aaa kcdAccount" "-kcdAccount")
  1880. }
  1881. }
  1882. # Get Appflow Policies from Global Appflow Bindings
  1883. addNSObject "appflow policy" (getNSObjects ($config -match "bind appflow global ") "appflow policy")
  1884. addNSObject "appflow policylabel" (getNSObjects ($config -match "bind appflow global ") "appflow policylabel")
  1885. # Get Appflow Policies from Appflow Policy Labels
  1886. if ($NSObjects."appflow policylabel") {
  1887. foreach ($policy in $NSObjects."appflow policylabel") {
  1888. addNSObject "appflow Policy" (getNSObjects ($config -match " $policy ") "appflow Policy")
  1889. }
  1890. }
  1891. # Get Appflow Actions from AppFlow Policies
  1892. # Get AppFlow Global Settings
  1893. if ($NSObjects."appflow policy") {
  1894. foreach ($policy in $NSObjects."appflow policy") {
  1895. addNSObject "appflow action" (getNSObjects ($config -match " $policy ") "appflow action")
  1896. }
  1897. # Get AppFlow Collector
  1898. if ($NSObjects."appflow action") {
  1899. foreach ($action in $NSObjects."appflow action") {
  1900. addNSObject "appflow collector" (getNSObjects ($config -match " $action ") "appflow collector" "-collectors")
  1901. }
  1902. }
  1903. if ($config -match "enable ns feature.* appflow") {
  1904. $NSObjects."appflow param" = @("enable ns feature appflow")
  1905. } else {
  1906. $NSObjects."appflow param" = @("# *** AppFlow feature is not enabled")
  1907. }
  1908. addNSObject "appflow param" ($config -match "set appflow param ")
  1909. addNSObject "appflow global" ($config -match "bind appflow global ") "appflow global"
  1910. }
  1911. # Get AppQoE Actions from AppQoE Policies
  1912. # Get AppQoE Global Settings
  1913. if ($NSObjects."appqoe policy") {
  1914. foreach ($policy in $NSObjects."appqoe policy") {
  1915. addNSObject "appqoe action" (getNSObjects ($config -match " $policy ") "appqoe action")
  1916. }
  1917. if ($config -match "enable ns feature.* appqoe") {
  1918. $NSObjects."appqoe parameter" = @("enable ns feature appqoe")
  1919. } else {
  1920. $NSObjects."appqoe parameter" = @("# *** AppQoE feature is not enabled")
  1921. }
  1922. addNSObject "appqoe parameter" ($config -match "appqoe parameter") "appqoe parameter"
  1923. addNSObject "appqoe parameter" ($config -match "set qos parameters") "appqoe parameter"
  1924. }
  1925. # Get AppFW Policies from Global AppFW Bindings
  1926. addNSObject "appfw policy" (getNSObjects ($config -match "bind appfw global ") "appfw Policy")
  1927. addNSObject "appfw policylabel" (getNSObjects ($config -match "bind appfw global ") "appfw policylabel")
  1928. # Get AppFW Policies from AppFW Policy Labels
  1929. if ($NSObjects."appfw policylabel") {
  1930. foreach ($policy in $NSObjects."appfw policylabel") {
  1931. addNSObject "appfw policy" (getNSObjects ($config -match " $policy ") "appfw policy")
  1932. }
  1933. }
  1934. # Get AppFW Profiles from AppFW Policies
  1935. if ($NSObjects."appfw policy") {
  1936. foreach ($policy in $NSObjects."appfw policy") {
  1937. addNSObject "appfw profile" (getNSObjects ($config -match "appfw policy $policy ") "appfw profile")
  1938. addNSObject "audit messageaction" (getNSObjects ($config -match "appfw policy $policy") "audit messageaction" "-logAction")
  1939. }
  1940. if ($config -match "enable ns feature.* appfw") {
  1941. $NSObjects."appfw parameter" = @("enable ns feature appfw")
  1942. } else {
  1943. $NSObjects."appfw parameter" = @("# *** AppFW feature is not enabled")
  1944. }
  1945. addNSObject "appfw parameter" ($config -match "set appfw settings") "appfw parameter"
  1946. addNSObject "appfw global" ($config -match "bind appfw global ") "appfw global"
  1947. }
  1948. # Get Bot Policies from Global Bot Bindings
  1949. addNSObject "bot policy" (getNSObjects ($config -match "bind bot global ") "bot Policy")
  1950. addNSObject "bot policylabel" (getNSObjects ($config -match "bind bot global ") "bot policylabel")
  1951. # Get Bot Policies from Bot Policy Labels
  1952. if ($NSObjects."bot policylabel") {
  1953. foreach ($policy in $NSObjects."bot policylabel") {
  1954. addNSObject "bot policy" (getNSObjects ($config -match " $policy ") "bot policy")
  1955. }
  1956. }
  1957. # Get Bot Profiles from Bot Policies
  1958. if ($NSObjects."bot policy") {
  1959. foreach ($policy in $NSObjects."bot policy") {
  1960. addNSObject "bot profile" (getNSObjects ($config -match "bot policy $policy ") "bot profile")
  1961. addNSObject "audit messageaction" (getNSObjects ($config -match "bot policy $policy") "audit messageaction" "-logAction")
  1962. }
  1963. if ($config -match "enable ns feature.* Bot") {
  1964. $NSObjects."bot parameter" = @("enable ns feature Bot")
  1965. } else {
  1966. $NSObjects."bot parameter" = @("# *** Bot Management feature is not enabled")
  1967. }
  1968. addNSObject "bot parameter" ($config -match "set appfw settings") "bot parameter"
  1969. addNSObject "bot global" ($config -match "bind appfw global ") "bot global"
  1970. }
  1971. # Get Login Schemas from Login Schema Policies
  1972. if ($NSObjects."authentication loginSchemaPolicy") {
  1973. foreach ($policy in $NSObjects."authentication loginSchemaPolicy") {
  1974. addNSObject "authentication loginSchema" (getNSObjects ($config -match "authentication loginSchemaPolicy $policy ") "authentication loginSchema")
  1975. addNSObject "audit messageaction" (getNSObjects ($config -match "authentication loginSchemaPolicy $policy") "audit messageaction" "-logAction")
  1976. }
  1977. }
  1978. # Get KCD Accounts from Database Profiles
  1979. if ($NSObjects."db dbProfile") {
  1980. foreach ($profile in $NSObjects."db dbProfile") {
  1981. addNSObject "aaa kcdAccount" (getNSObjects ($config -match " db dbProfile $profile ") "aaa kcdAccount")
  1982. }
  1983. }
  1984. # Get Transform Policies from Global Transform Bindings
  1985. addNSObject "transform policy" (getNSObjects ($config -match "bind transform global ") "transform policy")
  1986. addNSObject "transform policylabel" (getNSObjects ($config -match "bind transform global ") "transform policylabel")
  1987. # Get Transform Policies from Transform Policy Labels
  1988. if ($NSObjects."transform policylabel") {
  1989. foreach ($policy in $NSObjects."transform policylabel") {
  1990. addNSObject "transform policy" (getNSObjects ($config -match " $policy ") "transform policy")
  1991. }
  1992. }
  1993. # Get Transform Actions and Profiles from Transform Policies
  1994. if ($NSObjects."transform policy") {
  1995. foreach ($policy in $NSObjects."transform policy") {
  1996. addNSObject "transform action" (getNSObjects ($config -match " transform policy $policy ") "transform action")
  1997. addNSObject "audit messageaction" (getNSObjects ($config -match "transform policy $policy") "audit messageaction" "-logAction")
  1998. }
  1999. foreach ($action in $NSObjects."transform action") {
  2000. addNSObject "transform profile" (getNSObjects ($config -match " transform action $action ") "transform profile")
  2001. }
  2002. addNSObject "transform global" ($config -match "bind transform global ") "transform global"
  2003. }
  2004. # If FEO feature is enabled, get global FEO settings
  2005. addNSObject "feo policy" (getNSObjects ($config -match "bind feo global ") "feo Policy")
  2006. # Get FEO Actions from FEO Policies
  2007. # Get FEO Global Settings
  2008. if ($NSObjects."feo policy") {
  2009. foreach ($policy in $NSObjects."feo policy") {
  2010. addNSObject "feo action" (getNSObjects ($config -match " feo policy $policy ") "feo action")
  2011. }
  2012. if ($config -match "enable ns feature.* feo") {
  2013. $NSObjects."feo parameter" = @("enable ns feature feo")
  2014. } else {
  2015. $NSObjects."feo parameter" = @("# feo feature is not enabled")
  2016. }
  2017. addNSObject "feo parameter" ($config -match "set feo param ") "feo parameter"
  2018. addNSObject "feo global" ($config -match "bind feo global ") "feo global"
  2019. }
  2020. # Get Spillover Actions from Spillover Policies
  2021. if ($NSObjects."spillover policy") {
  2022. foreach ($policy in $NSObjects."spillover policy") {
  2023. addNSObject "spillover action" (getNSObjects ($config -match " spillover policy $policy ") "spillover action")
  2024. }
  2025. }
  2026. # Get Audit Syslog Actions from Audit Syslog Policies
  2027. if ($NSObjects."audit syslogpolicy") {
  2028. foreach ($policy in $NSObjects."audit syslogpolicy") {
  2029. addNSObject "audit syslogaction" (getNSObjects ($config -match " audit syslogpolicy $policy ") "audit syslogaction")
  2030. }
  2031. addNSObject "audit syslogactionglobal" ($config -match "audit syslogParams ") "audit syslogactionglobal"
  2032. addNSObject "audit syslogactionglobal" ($config -match "bind audit syslogactionglobal ") "audit syslogactionglobal"
  2033. addNSObject "audit syslogactionglobal" ($config -match "bind audit syslogGlobal ") "audit syslogactionglobal"
  2034. }
  2035. # Get Audit Nslog Policies from Global Audit Nslog Bindings
  2036. addNSObject "audit nslogpolicy" (getNSObjects ($config -match "bind audit nslogglobal ") "audit nslogpolicy")
  2037. # Get Audit Nslog Actions from Audit Nslog Policies
  2038. if ($NSObjects."audit nslogpolicy") {
  2039. foreach ($policy in $NSObjects."audit nslogpolicy") {
  2040. addNSObject "audit nslogaction" (getNSObjects ($config -match " audit nslogpolicy $policy ") "audit nslogaction")
  2041. }
  2042. addNSObject "audit nslogactionglobal" ($config -match "bind audit syslogactionglobal ") "audit nslogactionglobal"
  2043. }
  2044. # Get SSL Policies from Global SSL Bindings
  2045. addNSObject "ssl policy" (getNSObjects ($config -match "bind ssl global ") "ssl policy")
  2046. addNSObject "ssl policylabel" (getNSObjects ($config -match "bind ssl global ") "ssl policylabel")
  2047. # Get SSL Policies from SSL Policy Labels
  2048. if ($NSObjects."ssl policylabel") {
  2049. foreach ($policy in $NSObjects."ssl policylabel") {
  2050. addNSObject "ssl policy" (getNSObjects ($config -match " $policy ") "ssl policy")
  2051. }
  2052. }
  2053. # Get SSL Actions from SSL Policies
  2054. if ($NSObjects."ssl policy") {
  2055. foreach ($ssl in $NSObjects."ssl policy") {
  2056. addNSObject "ssl action" (getNSObjects ($config -match " $ssl ") "ssl action")
  2057. }
  2058. addNSObject "ssl global" ($config -match "bind ssl global ") "ssl global"
  2059. }
  2060. # Get SSL Log Profiles from SSL Actions
  2061. if ($NSObjects."ssl action") {
  2062. foreach ($ssl in $NSObjects."ssl action") {
  2063. addNSObject "ssl logprofile" (getNSObjects ($config -match " $ssl ") "ssl logprofile" "-ssllogprofile")
  2064. }
  2065. }
  2066. # Get SSL Global Settings
  2067. if ($config -match "enable ns feature.* ssl") {
  2068. $NSObjects."ssl parameter" = @("enable ns feature ssl")
  2069. } else {
  2070. $NSObjects."ssl parameter" = @("# ssl feature is not enabled")
  2071. }
  2072. addNSObject "ssl parameter" ($config -match "set ssl parameter") "ssl parameter"
  2073. addNSObject "ssl parameter" ($config -match "set ssl fips") "ssl parameter"
  2074. addNSObject "ssl parameter" ($config -match "set ssl profile ns_default_ssl_profile_backend") "ssl parameter"
  2075. # Get Ciphers from SSL profiles
  2076. if ($NSObjects."ssl profile") {
  2077. foreach ($ssl in $NSObjects."ssl profile") {
  2078. addNSObject "ssl cipher" (getNSObjects ($config -match "bind ssl profile $ssl ") "ssl cipher" "-cipherName")
  2079. }
  2080. }
  2081. # Get Global Policy Parameters
  2082. addNSObject "policy param" ($config -match "set policy param") "policy param"
  2083. # Get ACLs and RNAT
  2084. addNSObject "ns acl" ($config -match "ns acl") "ns acl"
  2085. addNSObject "ns acl" ($config -match "ns simpleacl") "ns acl"
  2086. addNSObject "rnat" (getNSObjects ($config -match "rnat ") "rnat")
  2087. # Get Limit Selectors from Limit Identifiers
  2088. if ($NSObjects."ns limitIdentifier") {
  2089. foreach ($identifier in $NSObjects."ns limitIdentifier") {
  2090. addNSObject "ns limitSelector" (getNSObjects ($config -match "ns limitIdentifier $identifier ") "ns limitSelector" "-selectorName")
  2091. addNSObject "stream selector" (getNSObjects ($config -match "ns limitIdentifier $identifier ") "stream selector")
  2092. }
  2093. }
  2094. # Get Stream Selectors from Stream Identifiers
  2095. if ($NSObjects."stream identifier") {
  2096. foreach ($identifier in $NSObjects."ns limitIdentifier") {
  2097. addNSObject "ns limitSelector" (getNSObjects ($config -match "stream identifier $identifier ") "ns limitSelector")
  2098. addNSObject "stream selector" (getNSObjects ($config -match "stream identifier $identifier ") "stream selector")
  2099. }
  2100. }
  2101. # Output Extracted Config
  2102. #cls
  2103. "`nExtracted Objects"
  2104. $NSObjects.GetEnumerator() | sort-object -Property Name
  2105. write-host "`nBuilding Config...`n
  2106. "
  2107. if ($outputFile -and ($outputFile -ne "screen")) {
  2108. "# Extracted Config for: " + ($vservers -join ", ") + "`n`n" | out-file $outputFile
  2109. } else {
  2110. "# Extracted Config for: " + ($vservers -join ", ") + "`n`n"
  2111. }
  2112. # System Settings
  2113. if ($NSObjects."ns config" ) { outputObjectConfig "NSIP" "ns config" "raw"}
  2114. if ($NSObjects."ns hostName" ) { outputObjectConfig "Hostname" "ns hostName" "raw"}
  2115. if ($NSObjects."ha node" ) { outputObjectConfig "High Availability Nodes" "HA node" "raw"}
  2116. if ($NSObjects."ha rpcNode" ) { outputObjectConfig "High Availability RPC Nodes" "ha rpcNode" "ns rpcNode"}
  2117. if ($NSObjects."ns feature" ) { outputObjectConfig "Enabled Features" "ns feature" "raw"}
  2118. if ($NSObjects."ns mode" ) { outputObjectConfig "Enabled Modes" "ns mode" "raw"}
  2119. if ($NSObjects."system parameter" ) { outputObjectConfig "CEIP" "system parameter" "raw"}
  2120. if ($NSObjects."ns encryptionParams" ) { outputObjectConfig "System Encryption Parameters" "ns encryptionParams" "raw"}
  2121. if ($NSObjects."system user" ) { outputObjectConfig "System Users" "system user"}
  2122. if ($NSObjects."system group" ) { outputObjectConfig "System Groups" "system group"}
  2123. if ($NSObjects."interface" ) { outputObjectConfig "Interfaces" "interface" "raw"}
  2124. if ($NSObjects."channel" ) { outputObjectConfig "Channels" "channel" "raw"}
  2125. if ($NSObjects."ns ip" ) { outputObjectConfig "IP Addresses" "ns ip"}
  2126. if ($NSObjects."vlan" ) { outputObjectConfig "VLANs" "vlan"}
  2127. if ($NSObjects."vrid" ) { outputObjectConfig "VMACs" "vrid"}
  2128. if ($NSObjects."ns partition" ) { outputObjectConfig "Partitions" "ns partition" -explainText "Partition configs are in /nsconfig/partitions" }
  2129. if ($NSObjects."ns pbr" ) { outputObjectConfig "Policy Based Routes (PBRs)" "ns pbr" "raw"}
  2130. if ($NSObjects."route" ) { outputObjectConfig "Routes" "route" "raw"}
  2131. if ($NSObjects."mgmt ssl service" ) { outputObjectConfig "Internal Management Services SSL Settings" "mgmt ssl service" "ssl service"}
  2132. if ($NSObjects."snmp trap" ) { outputObjectConfig "SNMP Traps" "snmp trap" "raw"}
  2133. if ($NSObjects."snmp community" ) { outputObjectConfig "SNMP Communities" "snmp community" "raw"}
  2134. if ($NSObjects."snmp manager" ) { outputObjectConfig "SNMP Managers" "snmp manager" "raw"}
  2135. if ($NSObjects."snmp alarm" ) { outputObjectConfig "SNMP Alarms" "snmp alarm" "raw"}
  2136. # Policy Expression Components and Profiles Output
  2137. if ($NSObjects."ns acl" ) { outputObjectConfig "Global ACLs" "ns acl" "raw" }
  2138. if ($NSObjects."rnat" ) { outputObjectConfig "Global RNAT" "rnat" }
  2139. if ($NSObjects."ns variable" ) { outputObjectConfig "Variables" "ns variable" }
  2140. if ($NSObjects."ns assignment" ) { outputObjectConfig "Variable Assignments" "ns assignment" }
  2141. if ($NSObjects."ns limitSelector" ) { outputObjectConfig "Rate Limiting Selectors" "ns limitSelector" }
  2142. if ($NSObjects."ns limitIdentifier" ) { outputObjectConfig "Rate Limiting Identifiers" "ns limitIdentifier" }
  2143. if ($NSObjects."stream selector" ) { outputObjectConfig "Action Analytics Selectors" "stream selector" }
  2144. if ($NSObjects."stream identifier" ) { outputObjectConfig "Action Analytics Identifiers" "stream identifier" }
  2145. if ($NSObjects."policy param" ) { outputObjectConfig "Policy Global Params" "policy param" "raw" }
  2146. if ($NSObjects."policy patset" ) { outputObjectConfig "Policy Pattern Sets" "policy patset" }
  2147. if ($NSObjects."policy dataset" ) { outputObjectConfig "Policy Data Sets" "policy dataset" }
  2148. if ($NSObjects."policy map" ) { outputObjectConfig "Policy Maps" "policy map" }
  2149. if ($NSObjects."policy stringmap" ) { outputObjectConfig "Policy String Maps" "policy stringmap" }
  2150. if ($NSObjects."policy urlset" ) { outputObjectConfig "Policy URL Sets" "policy urlset" }
  2151. if ($NSObjects."policy httpCallout" ) { outputObjectConfig "HTTP Callouts" "policy httpCallout" }
  2152. if ($NSObjects."policy expression" ) { outputObjectConfig "Policy Expressions" "policy expression" }
  2153. if ($NSObjects."dns addRec" ) { outputObjectConfig "DNS Address Records" "dns addRec" }
  2154. if ($NSObjects."dns nsRec" ) { outputObjectConfig "DNS Name Server Records" "dns nsRec"}
  2155. if ($NSObjects."dns cnameRec" ) { outputObjectConfig "DNS CNAME Records" "dns cnameRec"}
  2156. if ($NSObjects."dns soaRec" ) { outputObjectConfig "DNS SOA Records" "dns soaRec"}
  2157. if ($NSObjects."ns tcpProfile" ) { outputObjectConfig "TCP Profiles" "ns tcpProfile" }
  2158. if ($NSObjects."ns httpProfile" ) { outputObjectConfig "HTTP Profiles" "ns httpProfile" }
  2159. if ($NSObjects."db dbProfile" ) { outputObjectConfig "Database Profiles" "db dbProfile" }
  2160. if ($NSObjects."netProfile" ) { outputObjectConfig "Net Profiles" "netProfile" }
  2161. if ($NSObjects."ns trafficDomain" ) { outputObjectConfig "Traffic Domains" "ns trafficDomain" }
  2162. if ($NSObjects."ipset" ) { outputObjectConfig "IP Sets" "ipset" }
  2163. if ($NSObjects."analytics profile" ) { outputObjectConfig "Analytics Profiles" "analytics profile" }
  2164. if ($NSObjects."audit messageaction" ) { outputObjectConfig "Log Messages" "audit messageaction" }
  2165. # Policies Output
  2166. if ($NSObjects."appflow param" ) { outputObjectConfig "Appflow Global Params" "appflow param" "raw" }
  2167. if ($NSObjects."appflow collector" ) { outputObjectConfig "Appflow Collectors" "appflow collector" }
  2168. if ($NSObjects."appflow action" ) { outputObjectConfig "Appflow Actions" "appflow action" }
  2169. if ($NSObjects."appflow policy" ) { outputObjectConfig "Appflow Policies" "appflow policy" }
  2170. if ($NSObjects."appflow policylabel" ) { outputObjectConfig "Appflow Policy Labels" "appflow policylabel" }
  2171. if ($NSObjects."appflow global" ) { outputObjectConfig "Appflow Global Bindings" "appflow global" "raw" }
  2172. if ($NSObjects."rewrite param" ) { outputObjectConfig "Rewrite Global Parameters" "rewrite param" "raw" }
  2173. if ($NSObjects."rewrite action" ) { outputObjectConfig "Rewrite Actions" "rewrite action" }
  2174. if ($NSObjects."rewrite policy" ) { outputObjectConfig "Rewrite Policies" "rewrite policy" }
  2175. if ($NSObjects."rewrite policylabel" ) { outputObjectConfig "Rewrite Policy Labels" "rewrite policylabel" }
  2176. if ($NSObjects."rewrite global" ) { outputObjectConfig "Rewrite Global Bindings" "rewrite global" "raw" }
  2177. if ($NSObjects."responder param" ) { outputObjectConfig "Responder Global Parameters" "responder param" "raw" }
  2178. if ($NSObjects."responder action" ) { outputObjectConfig "Responder Actions" "responder action" }
  2179. if ($NSObjects."responder policy" ) { outputObjectConfig "Responder Policies" "responder policy" }
  2180. if ($NSObjects."responder policylabel" ) { outputObjectConfig "Responder Policy Labels" "responder policylabel" }
  2181. if ($NSObjects."responder global" ) { outputObjectConfig "Responder Global Bindings" "responder global" "raw" }
  2182. if ($NSObjects."appqoe parameter" ) { outputObjectConfig "AppQoE Global Parameters" "appqoe parameter" "raw"}
  2183. if ($NSObjects."appqoe action" ) { outputObjectConfig "AppQoE Actions" "appqoe action" }
  2184. if ($NSObjects."appqoe policy" ) { outputObjectConfig "AppQoE Policies" "appqoe policy" }
  2185. if ($NSObjects."feo parameter" ) { outputObjectConfig "Front-End Optimization Global Parameters" "feo parameter" "raw"}
  2186. if ($NSObjects."feo action" ) { outputObjectConfig "Front-End Optimization Actions" "feo action" }
  2187. if ($NSObjects."feo policy" ) { outputObjectConfig "Front-End Optimization Policies" "feo policy" }
  2188. if ($NSObjects."feo global" ) { outputObjectConfig "Front-End Optimization Global Bindings" "feo global" }
  2189. if ($NSObjects."cache parameter" ) { outputObjectConfig "Cache Global Parameters" "cache parameter" "raw" }
  2190. if ($NSObjects."cache selector" ) { outputObjectConfig "Cache Selectors" "cache selector" }
  2191. if ($NSObjects."cache contentGroup" ) { outputObjectConfig "Cache Content Groups" "cache contentGroup" }
  2192. if ($NSObjects."cache policy" ) { outputObjectConfig "Cache Policies" "cache policy" }
  2193. if ($NSObjects."cache policylabel" ) { outputObjectConfig "Cache Policy Labels" "cache policylabel" }
  2194. if ($NSObjects."cache global" ) { outputObjectConfig "Cache Global Bindings" "cache global" "raw" }
  2195. if ($NSObjects."cmp parameter" ) { outputObjectConfig "Compression Global Parameters" "cmp parameter" "raw" }
  2196. if ($NSObjects."cmp policy" ) { outputObjectConfig "Compression Policies" "cmp policy" }
  2197. if ($NSObjects."cmp policylabel" ) { outputObjectConfig "Compression Policy Labels" "cmp policylabel" }
  2198. if ($NSObjects."cmp global" ) { outputObjectConfig "Compression Global Bindings" "cmp global" "raw" }
  2199. if ($NSObjects."appfw parameter" ) { outputObjectConfig "AppFW Global Settings" "appfw parameter" "raw" }
  2200. if ($NSObjects."appfw profile" ) { outputObjectConfig "AppFW Profiles" "appfw profile" `
  2201. -explainText ("Some portions of AppFw Profile are not in the config file.`nManually export/import Signatures Object" + `
  2202. "`nManually export/import the AppFW Import Objects (e.g. HTML Error, XML Schema)") }
  2203. if ($NSObjects."appfw policy" ) { outputObjectConfig "AppFW Policies" "appfw policy" }
  2204. if ($NSObjects."appfw policylabel" ) { outputObjectConfig "AppFW Policy Labels" "appfw policylabel" }
  2205. if ($NSObjects."appfw global" ) { outputObjectConfig "AppFW Global Bindings" "appfw global" "raw" }
  2206. if ($NSObjects."bot parameter" ) { outputObjectConfig "Bot Management Global Settings" "bot parameter" "raw" }
  2207. if ($NSObjects."bot profile" ) { outputObjectConfig "Bot Management Profiles" "bot profile" `
  2208. -explainText ("Some portions of Bot Profiles are not in the config file.`nManually export/import Signatures Object") }
  2209. if ($NSObjects."bot policy" ) { outputObjectConfig "Bot Management Policies" "bot policy" }
  2210. if ($NSObjects."bot policylabel" ) { outputObjectConfig "Bot Management Policy Labels" "bot policylabel" }
  2211. if ($NSObjects."bot global" ) { outputObjectConfig "Bot Management Global Bindings" "bot global" "raw" }
  2212. if ($NSObjects."transform profile" ) { outputObjectConfig "Transform Profiles" "transform profile" }
  2213. if ($NSObjects."transform action" ) { outputObjectConfig "Transform Actions" "transform action" }
  2214. if ($NSObjects."transform policy" ) { outputObjectConfig "Transform Policies" "transform policy" }
  2215. if ($NSObjects."transform policylabel" ) { outputObjectConfig "Transform Policy Labels" "transform policylabel" }
  2216. if ($NSObjects."transform global" ) { outputObjectConfig "Transform Global Bindings" "transform global" "raw" }
  2217. if ($NSObjects."filter action" ) { outputObjectConfig "Filter Actions" "filter action" }
  2218. if ($NSObjects."filter policy" ) { outputObjectConfig "Filter Policies" "filter policy" }
  2219. if ($NSObjects."filter global" ) { outputObjectConfig "Filter Global Bindings" "filter global" "raw" }
  2220. if ($NSObjects."audit syslogaction" ) { outputObjectConfig "Audit Syslog Actions" "audit syslogaction" }
  2221. if ($NSObjects."audit syslogpolicy" ) { outputObjectConfig "Audit Syslog Policies" "audit syslogpolicy" }
  2222. if ($NSObjects."audit nslogaction" ) { outputObjectConfig "Audit NSLog Actions" "audit nslogaction" }
  2223. if ($NSObjects."audit nslogpolicy" ) { outputObjectConfig "Audit NSLog Policies" "audit nslogpolicy" }
  2224. if ($NSObjects."audit syslogactionglobal" ) { outputObjectConfig "Global Audit Syslog Bindings" "audit syslogactionglobal" "raw" }
  2225. # SSL Output
  2226. if ($NSObjects."ssl parameter" ) { outputObjectConfig "SSL Global Parameters" "ssl parameter" "raw" }
  2227. if ($NSObjects."ssl cipher" ) { outputObjectConfig "SSL Cipher Groups" "ssl cipher" }
  2228. if ($NSObjects."ssl fipsKey" ) { outputObjectConfig "SSL FIPS Keys" "ssl fipsKey" }
  2229. if ($NSObjects."ssl cert" ) { outputObjectConfig "Certs" "ssl cert" "raw" `
  2230. -explainText "Get certificate files from /nsconfig/ssl" }
  2231. if ($NSObjects."ssl link" ) { outputObjectConfig "Cert Links" "ssl link" "raw" }
  2232. if ($NSObjects."ssl profile" ) { outputObjectConfig "SSL Profiles" "ssl profile" }
  2233. if ($NSObjects."ssl logprofile" ) { outputObjectConfig "SSL Log Profiles" "ssl logprofile" }
  2234. if ($NSObjects."ssl action" ) { outputObjectConfig "SSL Actions" "ssl action" }
  2235. if ($NSObjects."ssl policy" ) { outputObjectConfig "SSL Policies" "ssl policy" }
  2236. # AAA Output
  2237. if ($NSObjects."vpn portaltheme" ) { outputObjectConfig "Portal Themes" "vpn portaltheme" `
  2238. -explainText "Portal Theme customizations are not in the NetScaler config file and instead are stored in /var/netscaler/logon/themes/{ThemeName}" }
  2239. if ($NSObjects."authentication param" ) { outputObjectConfig "AAA Global Settings" "authentication param" "raw" }
  2240. if ($NSObjects."authorization policy" ) { outputObjectConfig "Authorization Policies" "authorization policy" }
  2241. if ($NSObjects."authorization policylabel" ) { outputObjectConfig "Authorization Policies" "authorization policylabel" }
  2242. if ($NSObjects."authentication pushService" ) { outputObjectConfig "OTP Push Service" "authentication pushService" }
  2243. if ($NSObjects."aaa kcdAccount" ) { outputObjectConfig "KCD Accounts" "aaa kcdAccount" }
  2244. if ($NSObjects."authentication ldapAction" ) { outputObjectConfig "LDAP Actions" "authentication ldapAction" `
  2245. -explainText "LDAP certificate verification Root certificates are in /nsconfig/truststore" }
  2246. if ($NSObjects."authentication ldapPolicy" ) { outputObjectConfig "LDAP Policies" "authentication ldapPolicy" }
  2247. if ($NSObjects."authentication radiusAction" ) { outputObjectConfig "RADIUS Actions" "authentication radiusAction" }
  2248. if ($NSObjects."authentication radiusPolicy" ) { outputObjectConfig "RADIUS Policies" "authentication radiusPolicy" }
  2249. if ($NSObjects."authentication OAuthAction" ) { outputObjectConfig "OAuth Actions" "authentication OAuthAction" }
  2250. if ($NSObjects."authentication samlAction" ) { outputObjectConfig "SAML Actions" "authentication samlAction" }
  2251. if ($NSObjects."authentication samlIdPProfile" ) { outputObjectConfig "SAML IdP Profiles" "authentication samlIdPProfile" }
  2252. if ($NSObjects."authentication certAction" ) { outputObjectConfig "Cert Actions" "authentication certAction" }
  2253. if ($NSObjects."authentication dfaAction" ) { outputObjectConfig "Delegaged Forms Authentication Actions" "authentication dfaAction" }
  2254. if ($NSObjects."authentication epaAction" ) { outputObjectConfig "Endpoint Analysis Actions" "authentication epaAction" }
  2255. if ($NSObjects."authentication negotiateAction" ) { outputObjectConfig "Negotiate (Kerberos) Actions" "authentication negotiateAction" }
  2256. if ($NSObjects."authentication storefrontAuthAction" ) { outputObjectConfig "StorefrontAuth Actions" "authentication storefrontAuthAction" }
  2257. if ($NSObjects."authentication tacacsAction" ) { outputObjectConfig "TACACS Actions" "authentication tacacsAction" }
  2258. if ($NSObjects."authentication tacacsPolicy" ) { outputObjectConfig "TACACS Policies" "authentication tacacsPolicy" }
  2259. if ($NSObjects."authentication localPolicy" ) { outputObjectConfig "Local Authentication Policies" "authentication localPolicy" }
  2260. if ($NSObjects."authentication webAuthAction" ) { outputObjectConfig "Web Auth Actions" "authentication webAuthAction" }
  2261. if ($NSObjects."authentication emailAction" ) { outputObjectConfig "Email (SSPR) Actions" "authentication emailAction" }
  2262. if ($NSObjects."authentication noAuthAction" ) { outputObjectConfig "NoAuth Actions" "authentication noAuthAction" }
  2263. if ($NSObjects."authentication captchaAction" ) { outputObjectConfig "Captcha Actions" "authentication captchaAction" }
  2264. if ($NSObjects."authentication adfsProxyProfile" ) { outputObjectConfig "ADFS Proxy Profile" "authentication adfsProxyProfile" }
  2265. if ($NSObjects."authentication samlPolicy" ) { outputObjectConfig "SAML Authentication Policies" "authentication samlPolicy" }
  2266. if ($NSObjects."authentication policy" ) { outputObjectConfig "Advanced Authentication Policies" "authentication policy" }
  2267. if ($NSObjects."authentication loginSchema" ) { outputObjectConfig "Login Schemas" "authentication loginSchema" }
  2268. if ($NSObjects."authentication loginSchemaPolicy" ) { outputObjectConfig "Login Schema Policies" "authentication loginSchemaPolicy" }
  2269. if ($NSObjects."authentication policylabel" ) { outputObjectConfig "Authentication Policy Labels" "authentication policylabel" }
  2270. if ($NSObjects."tm sessionAction" ) { outputObjectConfig "AAA Session Profiles" "tm sessionAction" }
  2271. if ($NSObjects."tm sessionPolicy" ) { outputObjectConfig "AAA Session Policies" "tm sessionPolicy" }
  2272. if ($NSObjects."authentication vserver" ) { outputObjectConfig "Authentication Virtual Servers" "authentication vserver" }
  2273. if ($NSObjects."authentication authnProfile" ) { outputObjectConfig "Authentication Profiles" "authentication authnProfile" }
  2274. if ($NSObjects."tm formSSOAction" ) { outputObjectConfig "AAA Form SSO Profiles" "tm formSSOAction" }
  2275. if ($NSObjects."tm samlSSOProfile" ) { outputObjectConfig "AAA SAML SSO Profiles" "tm samlSSOProfile" }
  2276. if ($NSObjects."tm trafficAction" ) { outputObjectConfig "AAA Traffic Profiles" "tm trafficAction" }
  2277. if ($NSObjects."tm trafficPolicy" ) { outputObjectConfig "AAA Traffic Policies" "tm trafficPolicy" }
  2278. if ($NSObjects."tm global" ) { outputObjectConfig "AAA Global Bindings" "tm global" "raw" }
  2279. # Load Balancing output
  2280. if ($NSObjects."lb parameter" ) { outputObjectConfig "Load Balancing Global Parameters" "lb parameter" "raw" }
  2281. if ($NSObjects."lb metricTable" ) { outputObjectConfig "Metric Tables" "lb metricTable" }
  2282. if ($NSObjects."lb profile" ) { outputObjectConfig "Load Balancing Profiles" "lb profile" }
  2283. if ($NSObjects."monitor" ) { outputObjectConfig "Monitors" "monitor" }
  2284. if ($NSObjects."server" ) { outputObjectConfig "Servers" "server" }
  2285. if ($NSObjects."service" ) { outputObjectConfig "Services" "service" }
  2286. if ($NSObjects."serviceGroup" ) { outputObjectConfig "Service Groups" "serviceGroup" }
  2287. if ($NSObjects."lb vserver" ) { outputObjectConfig "Load Balancing Virtual Servers" "lb vserver" }
  2288. if ($NSObjects."lb group" ) { outputObjectConfig "Persistency Group" "lb group" }
  2289. # Content Switching Output
  2290. if ($NSObjects."cs parameter" ) { outputObjectConfig "Content Switching Parameters" "cs parameter" "raw" }
  2291. if ($NSObjects."cs action" ) { outputObjectConfig "Content Switching Actions" "cs action" }
  2292. if ($NSObjects."cs policy" ) { outputObjectConfig "Content Switching Policies" "cs policy" }
  2293. if ($NSObjects."cs policylabel" ) { outputObjectConfig "Content Switching Policy Labels" "cs policylabel" }
  2294. # Citrix Gateway Output
  2295. if ($NSObjects."vpn intranetApplication" ) { outputObjectConfig "Citrix Gateway Intranet Applications" "vpn intranetApplication" }
  2296. if ($NSObjects."aaa preauthenticationaction" ) { outputObjectConfig "Preauthentication Profiles" "aaa preauthenticationaction" }
  2297. if ($NSObjects."aaa preauthenticationpolicy" ) { outputObjectConfig "Preauthentication Policies" "aaa preauthenticationpolicy" }
  2298. if ($NSObjects."vpn eula" ) { outputObjectConfig "Citrix Gateway EULA" "vpn eula" }
  2299. if ($NSObjects."vpn clientlessAccessProfile" ) { outputObjectConfig "Citrix Gateway Clientless Access Profiles" "vpn clientlessAccessProfile" }
  2300. if ($NSObjects."vpn clientlessAccessPolicy" ) { outputObjectConfig "Citrix Gateway Clientless Access Policies" "vpn clientlessAccessPolicy" }
  2301. if ($NSObjects."rdp clientprofile" ) { outputObjectConfig "Citrix Gateway RDP Profiles" "rdp clientprofile" }
  2302. if ($NSObjects."vpn pcoipProfile" ) { outputObjectConfig "Citrix Gateway PCoIP Profiles" "vpn pcoipProfile" }
  2303. if ($NSObjects."vpn pcoipVserverProfile" ) { outputObjectConfig "Citrix Gateway VServer PCoIP Profiles" "vpn pcoipVserverProfile" }
  2304. if ($NSObjects."vpn formSSOAction" ) { outputObjectConfig "Citrix Gateway Form SSO Profiles" "vpn formSSOAction" }
  2305. if ($NSObjects."vpn samlSSOProfile" ) { outputObjectConfig "Citrix Gateway SAML SSO Profiles" "vpn samlSSOProfile" }
  2306. if ($NSObjects."vpn trafficAction" ) { outputObjectConfig "Citrix Gateway Traffic Profiles" "vpn trafficAction" }
  2307. if ($NSObjects."vpn trafficPolicy" ) { outputObjectConfig "Citrix Gateway Traffic Policies" "vpn trafficPolicy" }
  2308. if ($NSObjects."vpn alwaysONProfile" ) { outputObjectConfig "Citrix Gateway AlwaysON Profiles" "vpn alwaysONProfile" }
  2309. if ($NSObjects."vpn sessionAction" ) { outputObjectConfig "Citrix Gateway Session Profiles" "vpn sessionAction" }
  2310. if ($NSObjects."vpn sessionPolicy" ) { outputObjectConfig "Citrix Gateway Session Policies" "vpn sessionPolicy" }
  2311. if ($NSObjects."ica accessprofile" ) { outputObjectConfig "Citrix Gateway SmartControl Access Profiles" "ica accessprofile" }
  2312. if ($NSObjects."ica action" ) { outputObjectConfig "Citrix Gateway SmartControl Actions" "ica action" }
  2313. if ($NSObjects."ica policy" ) { outputObjectConfig "Citrix Gateway SmartControl Policies" "ica policy" }
  2314. if ($NSObjects."vpn url" ) { outputObjectConfig "Citrix Gateway Bookmarks" "vpn url" }
  2315. if ($NSObjects."vpn parameter" ) { outputObjectConfig "Citrix Gateway Global Settings" "vpn parameter" "raw" }
  2316. if ($NSObjects."clientless domains" ) { outputObjectConfig "Citrix Gateway Clientless Domains" "clientless domains" "raw" }
  2317. if ($NSObjects."vpn nextHopServer" ) { outputObjectConfig "Citrix Gateway Next Hop Servers" "vpn nextHopServer" }
  2318. if ($NSObjects."vpn vserver" ) { outputObjectConfig "Citrix Gateway Virtual Servers" "vpn vserver" }
  2319. if ($NSObjects."vpn global" ) { outputObjectConfig "Citrix Gateway Global Bindings" "vpn global" "raw" }
  2320. if ($NSObjects."aaa group" ) { outputObjectConfig "AAA Groups" "aaa group" }
  2321. # GSLB Output
  2322. if ($NSObjects."adns service" ) { outputObjectConfig "ADNS Services" "adns service" "raw" }
  2323. if ($NSObjects."gslb site" ) { outputObjectConfig "GSLB Sites" "gslb site" }
  2324. if ($NSObjects."ns rpcNode" ) { outputObjectConfig "GSLB RPC Nodes" "ns rpcNode" }
  2325. if ($NSObjects."dns view" ) { outputObjectConfig "DNS Views" "dns view" }
  2326. if ($NSObjects."dns action" ) { outputObjectConfig "DNS Actions" "dns action" }
  2327. if ($NSObjects."dns policy" ) { outputObjectConfig "DNS Policies" "dns policy" }
  2328. if ($NSObjects."dns global" ) { outputObjectConfig "DNS Global Bindings" "dns global" "raw"}
  2329. if ($NSObjects."gslb location" ) { outputObjectConfig "GSLB Locations (Static Proximity)" "gslb location" "raw" }
  2330. if ($NSObjects."gslb parameter" ) { outputObjectConfig "GSLB Parameters" "gslb parameter" "raw" }
  2331. if ($NSObjects."gslb service" ) { outputObjectConfig "GSLB Services" "gslb service" }
  2332. if ($NSObjects."gslb vserver" ) { outputObjectConfig "GSLB Virtual Servers" "gslb vserver" }
  2333. if ($NSObjects."cr policy" ) { outputObjectConfig "Cache Redirection Policies" "cr policy" }
  2334. if ($NSObjects."cr vserver" ) { outputObjectConfig "Cache Redirection Virtual Servers" "cr vserver" }
  2335. if ($NSObjects."cs vserver" ) { outputObjectConfig "Content Switching Virtual Servers" "cs vserver" }
  2336. if ($NSObjects."ssl vserver" ) { outputObjectConfig "SSL Virtual Servers" "ssl vserver" }
  2337. # Global System Bindings - can't bind until objects are created
  2338. if ($NSObjects."system global" ) { outputObjectConfig "System Global Bindings" "system global" "raw"}
  2339. if ($NSObjects."dns nameServer" ) { outputObjectConfig "DNS Name Servers" "dns nameServer" }
  2340. if ($outputFile -and ($outputFile -ne "screen")) {
  2341. # Convert file EOLs to UNIX format so file can be batch imported to NetScaler
  2342. $text = [IO.File]::ReadAllText($outputFile) -replace "`r`n", "`n"
  2343. [IO.File]::WriteAllText($outputFile, $text)
  2344. }
  2345. if ($textEditor -and ($outputFile -and ($outputFile -ne "screen"))) {
  2346. # Open Text Editor
  2347. #if (Test-Path $textEditor -PathType Leaf){
  2348. write-host "`nOpening Output file `"$outputFile`" using `"$textEditor`" ..."
  2349. start-process -FilePath $textEditor -ArgumentList "`"$outputFile`""
  2350. <#} else {
  2351. write-host "`nText Editor not found: `"$textEditor`""
  2352. write-host "`nCan't open output file: `"$outputFile`""
  2353. }#>
  2354. }