@microsoft/windows-admin-center-sdk 2.541.1 → 2.552.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1385 -301
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  23. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  24. package/angular/esm2015/src/controls/details/details.component.js +13 -5
  25. package/angular/esm2015/src/controls/index.js +7 -2
  26. package/angular/esm2015/src/controls/layout/layout.component.js +10 -2
  27. package/angular/esm2015/src/controls/pivot/pivot.component.js +58 -4
  28. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +2 -2
  29. package/angular/esm2015/src/controls/ux/sme-ux-content/index.js +3 -0
  30. package/angular/esm2015/src/controls/ux/sme-ux-content/sme-ux-content.component.js +25 -0
  31. package/angular/esm2015/src/controls/ux/sme-ux-content/sme-ux-content.module.js +23 -0
  32. package/angular/esm2015/src/controls/ux/sme-ux-footer/index.js +4 -0
  33. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/index.js +3 -0
  34. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.js +184 -0
  35. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.module.js +31 -0
  36. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer.component.js +25 -0
  37. package/angular/esm2015/src/controls/ux/sme-ux-footer/sme-ux-footer.module.js +23 -0
  38. package/angular/esm2015/src/controls/ux/sme-ux-page/index.js +3 -0
  39. package/angular/esm2015/src/controls/ux/sme-ux-page/sme-ux-page.component.js +25 -0
  40. package/angular/esm2015/src/controls/ux/sme-ux-page/sme-ux-page.module.js +31 -0
  41. package/angular/esm2015/src/controls/wizard-lite/index.js +3 -0
  42. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.component.js +109 -0
  43. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.module.js +57 -0
  44. package/angular/esm2015/src/controls/wizard-lite/wizard-lite.service.js +109 -0
  45. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/index.js +3 -0
  46. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.js +241 -0
  47. package/angular/esm2015/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.module.js +31 -0
  48. package/angular/esm2015/src/generated/strings.js +1 -1
  49. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1192 -282
  50. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  51. package/angular/src/controls/details/details.component.d.ts +2 -1
  52. package/angular/src/controls/index.d.ts +6 -1
  53. package/angular/src/controls/pivot/pivot.component.d.ts +27 -1
  54. package/angular/src/controls/ux/sme-ux-content/index.d.ts +2 -0
  55. package/angular/src/controls/ux/sme-ux-content/sme-ux-content.component.d.ts +9 -0
  56. package/angular/src/controls/ux/sme-ux-content/sme-ux-content.module.d.ts +8 -0
  57. package/angular/src/controls/ux/sme-ux-footer/index.d.ts +3 -0
  58. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/index.d.ts +2 -0
  59. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.d.ts +36 -0
  60. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.module.d.ts +10 -0
  61. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer.component.d.ts +9 -0
  62. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer.module.d.ts +8 -0
  63. package/angular/src/controls/ux/sme-ux-page/index.d.ts +2 -0
  64. package/angular/src/controls/ux/sme-ux-page/sme-ux-page.component.d.ts +9 -0
  65. package/angular/src/controls/ux/sme-ux-page/sme-ux-page.module.d.ts +10 -0
  66. package/angular/src/controls/wizard-lite/index.d.ts +2 -0
  67. package/angular/src/controls/wizard-lite/wizard-lite.component.d.ts +38 -0
  68. package/angular/src/controls/wizard-lite/wizard-lite.module.d.ts +14 -0
  69. package/angular/src/controls/wizard-lite/wizard-lite.service.d.ts +30 -0
  70. package/angular/src/controls/wizard-lite/wizard-navigation-button/index.d.ts +2 -0
  71. package/angular/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.d.ts +108 -0
  72. package/angular/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.module.d.ts +9 -0
  73. package/angular/src/generated/strings.d.ts +10 -0
  74. package/core/assets/strings/cs-CZ/strings.json +1 -1
  75. package/core/assets/strings/de-DE/strings.json +1 -1
  76. package/core/assets/strings/es-ES/strings.json +1 -1
  77. package/core/assets/strings/fr-FR/strings.json +1 -1
  78. package/core/assets/strings/hu-HU/strings.json +1 -1
  79. package/core/assets/strings/id-ID/strings.json +1 -1
  80. package/core/assets/strings/it-IT/strings.json +1 -1
  81. package/core/assets/strings/ja-JP/strings.json +1 -1
  82. package/core/assets/strings/ko-KR/strings.json +1 -1
  83. package/core/assets/strings/nl-NL/strings.json +1 -1
  84. package/core/assets/strings/pl-PL/strings.json +1 -1
  85. package/core/assets/strings/pt-BR/strings.json +1 -1
  86. package/core/assets/strings/pt-PT/strings.json +1 -1
  87. package/core/assets/strings/ru-RU/strings.json +1 -1
  88. package/core/assets/strings/strings.json +1 -1
  89. package/core/assets/strings/sv-SE/strings.json +1 -1
  90. package/core/assets/strings/tr-TR/strings.json +1 -1
  91. package/core/assets/strings/zh-CN/strings.json +1 -1
  92. package/core/assets/strings/zh-TW/strings.json +1 -1
  93. package/core/data/file-transfer.js +5 -5
  94. package/core/data/file-transfer.js.map +1 -1
  95. package/core/data/wdac-operations.d.ts +10 -0
  96. package/core/data/wdac-operations.js +14 -1
  97. package/core/data/wdac-operations.js.map +1 -1
  98. package/core/diagnostics/sme-web-telemetry-models.d.ts +2 -1
  99. package/core/diagnostics/sme-web-telemetry-models.js +1 -0
  100. package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
  101. package/core/diagnostics/sme-web-telemetry.d.ts +20 -0
  102. package/core/diagnostics/sme-web-telemetry.js +59 -0
  103. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  104. package/core/generated/powershell-scripts.js +1 -1
  105. package/core/generated/powershell-scripts.js.map +1 -1
  106. package/core/generated/strings.d.ts +1 -0
  107. package/core/generated/strings.js.map +1 -1
  108. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +11 -3
  109. package/core/shared/server-inventory/server-inventory-cache.js +3 -0
  110. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  111. package/core/shared/server-inventory/server-inventory.d.ts +24 -0
  112. package/core/shared/server-inventory/server-inventory.js.map +1 -1
  113. package/package.json +1 -1
  114. package/styles/css/main-v2.css +1 -1
  115. package/tools/wac-cli/templates/wac-template/angular.json +2 -2
  116. package/tools/wac-cli/templates/wac-template/src/main.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/diagnostics/sme-web-telemetry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,oFAAoF;AAEpF,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAoB,WAAW,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAC/I,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAQH,aAAa,EAEb,oBAAoB,EAEpB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAKpC,MAAM,OAAO,eAAe;IAExB;;OAEG;IACK,MAAM,KAAK,aAAa;QAC5B,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD;;OAEG;IACK,MAAM,KAAK,YAAY;QAC3B,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtG,CAAC;IAEO,MAAM,KAAK,eAAe;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;IACzC,CAAC;IAYM,MAAM,KAAK,YAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAcD;;;;OAIG;IACK,MAAM,CAAC,gBAAgB,CAAC,UAAkB;QAC9C,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;SAC1C;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;QAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACrD,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;QAC1C,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB;QAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAwC,EAAE,EAAE;YAC9E,QAAQ,IAAI,EAAE;gBACV,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,cAA8C,CAAC;oBACzE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACxF,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC;oBAC7B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAA8C,CAAC,CAAC;oBAC/F,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,qBAAqB;oBAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAAC,MAAM;gBACrG,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;oBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,cAA2C,CAAC;oBACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACpE,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC;oBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,cAA8C,CAAC;oBACzE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,cAAyC,CAAC;oBACpE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACxD,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,YAAY;oBAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAAC,MAAM;gBAC1F,OAAO,CAAC,CAAC,OAAO;aACnB;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,yBAAyB;QACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC,SAAS,CACjC,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EACnC,CAAC,KAAY,EAAE,EAAE;YACb,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,CAAC,CACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,YAAY;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;SACpE;IACL,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,WAAoC;QAChE,8HAA8H;QAC9H,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;eACxC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;QAExE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,4GAA4G;QAC5G,oHAAoH;QACpH,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC;IACL,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,IAAI,CAAC,UAAsB;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,iHAAiH;QACjH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;QACnF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7D,0DAA0D;QAC1D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAE/C,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACpE,OAAO,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;aACrC,IAAI,CACD,SAAS,CAAC,MAAM,CAAC,EAAE;YACf,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CACd,KAAK,CAAC,IAAI,CAAC,EACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACV,IAAI,cAAc,KAAK,CAAC,EAAE;oBACtB,MAAM,KAAK,CAAC;iBACf;gBACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;gBAC7E,cAAc,EAAE,CAAC;YACrB,CAAC,CAAC,CACL,CAAC;QACN,CAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;YAChB,MAAM,SAAS,GAAqB,MAAM,CAAC,QAAQ,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;mBACN,SAAS,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,UAAU,CAAC;YAE1F,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,QAAQ,CAAC;YAC/G,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAC/G,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClE,qFAAqF;YACrF,0DAA0D;YAC1D,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;gBAC1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;aACpC;QACL,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,+CAA+C,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9G,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB;QAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC5C,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAoB,CAAC;YACrF,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,6BAA6B,CAAC;YACpG,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;YACjC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YAEpB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;gBACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAW,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC7D,MAAM,SAAS,GAAW,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;gBAE7D,MAAM,MAAM,GAAG;oBACb,kBAAkB,EAAE,IAAI,CAAC,6BAA6B;oBACtD,6BAA6B;oBAC7B,oBAAoB,EAAE;wBAClB,gBAAgB,EAAE,EAAE;qBACvB;oBACD,kCAAkC;oBAClC,qBAAqB,EAAE;wBACnB,SAAS,EAAE,sBAAsB;wBACjC,aAAa,EAAE,IAAI;qBACtB;oBACD,qCAAqC;oBACrC,yBAAyB,EAAE;wBACvB,WAAW,EAAE;4BACX,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,IAAI;4BACX,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,IAAI;yBACd;wBACD,QAAQ,EAAE;4BACR,QAAQ,EAAE,IAAI,CAAC,YAAY;4BAC3B,kDAAkD;4BAClD,WAAW,EAAE,sBAAsB;4BACnC,UAAU,EAAE,sBAAsB;4BAClC,QAAQ,EAAE;gCACN,cAAc,EAAE,SAAS,IAAI,EAAE;gCAC/B,cAAc,EAAE,SAAS,IAAI,EAAE;6BAClC;yBACJ;wBACD,0BAA0B,EAAE,KAAK;qBAClC;iBACF,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,KAAU,EAAE,EAAE;oBACzD,0FAA0F;oBAC1F,+CAA+C;oBAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE;wBAC3C,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC;4BACvE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;qBAClD;oBACD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,GAAG,EAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;wBACzC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAC,CAAC;oBAClG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAC,CAAC;gBAE7G,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;gBAClB,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAgB,EAAE,cAA0C,EAAE,UAAkC;QACtH,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc;oBAC7C,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACtF,OAAO;SACV;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAC5B,cAAc,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,cAAuC,EAAE,UAAoC;QACrG,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACvF,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,cAA4C,EAAE,UAAoC;QAC/G,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1H,OAAO;SACV;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAC5B,cAAc,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,2BAA2B,CAAC,IAAwB;QAC/D,MAAM,eAAe,GAA+B;YAChB,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI;YAC1C,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE;YACxD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAC7B,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;SACjB,CAAC;QAClC,8EAA8E;QAC9E,6FAA6F;QAC7F,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG;YACf,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;YACrB,WAAW,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YACjC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SAChE,CAAC;QAEF,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7D,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAChE,oEAAoE;gBACpE,2EAA2E;gBAC3E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;oBAChE,eAAe,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChF;aACJ;SACJ;QAED,mFAAmF;QACnF,qDAAqD;QACrD,IAAI,eAAe,CAAC,UAAU,EAAE;YAC5B,eAAe,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;SAC7E;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,MAAM,CAAC,oBAAoB,CAAC,WAA+B,EAAE,gBAAsB;QACtF,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,WAAW,EAC3B,EAAE,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAkC;iBAC9E;aACJ,CAAC,CAAC;YACvB,OAAO;SACV;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QAEtE,+DAA+D;QAC/D,MAAM,cAAc,GAAiC;YACjD,UAAU,EAAE,oBAAoB,CAAC,SAAS;YAC1C,OAAO,EAAE,gBAAgB,IAAI,WAAW;SAC3C,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,CAAC;QAC7E,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,mBAAmB,CAAC,WAAyC,EAAG,gBAAsB,EAChE,UAAoC;QACpE,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,UAAU,EAC1B,EAAE,UAAU,EAAE,WAAW,EACvB,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAkC;iBAC9E,CAAC,CAAC,CAAC;YAC5B,OAAO;SACV;QAED,MAAM,cAAc,GAAiC;YACjD,UAAU,EAAE,oBAAoB,CAAC,SAAS;YAC1C,OAAO,EAAE,gBAAgB,IAAI,WAAW;SAC3C,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,CAAC;QACnF,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,0BAA0B,CAAC,WAA+B;QACpE,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAC9F,OAAO;SACV;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,MAAM,cAAc,GAAuC;YACvD,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SACrC,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,CAAC;QAE7E,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAClF,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,uBAAuB,CAAC,kBAAmC;QACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;YAC7F,OAAO;SACV;QACD,MAAM,cAAc,GAAiC;YACjD,OAAO,EAAE;gBACL,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,KAAK,EAAE,kBAAkB,CAAC,KAAK;gBAC/B,KAAK,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAClD,WAAW,EAAE,mBAAmB,CAAC,YAAY;aAChD;YACD,+DAA+D;YAC/D,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY;SAC9F,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,EAAU,EAAE,OAA0B;QAChE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,EAAU;QACvC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA0B,EAAE,KAA2B,EAAE,OAA2B;QACnH,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE/D,kEAAkE;QAClE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;YACjD,OAAO;SACV;QAED,wFAAwF;QACxF,IAAI,KAAK,KAAK,oBAAoB,CAAC,OAAO,IAAI,EAAE,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;SAC/B;QAED,MAAM,SAAS,GAAG,EAAC,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM;YACrE,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnD;aAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YACpC,SAAS,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACzG;QACD,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAC,EACxE,EAAC,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,yBAAyB,CAAC,QAAkB,EAAE,KAA2B,EAAE,OAA2B;QACjH,2CAA2C;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,OAAO;SACV;QAED,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE;YACzD,IAAI,cAAc,EAAE;gBAChB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;gBACpE,IAAI,aAAa,EAAE;oBACf,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACnC;gBACD,OAAO,WAAW,CAAC;aACtB;QACL,CAAC,EAAE,cAAc,CAAC,CAAC;QAGvB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,MAAM,SAAS,GAAG,EAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC;QAE/H,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnD;aAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YACpC,SAAS,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACzG;QACD,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,SAAS,EAAC,EAClD,EAAC,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAC,CAAC,CAAC;IAChD,CAAC;;AAvjBc,4BAAY,GAA4C,EAAE,CAAC;AAC3D,gCAAgB,GAAG,IAAI,CAAC;AAExB,wBAAQ,GAAG,MAAM,CAAC;AAElB,8BAAc,GAAG,KAAK,CAAC;AACvB,wBAAQ,GAA4B,EAAE,CAAC;AACvC,+BAAe,GAAsC,EAAE,CAAC;AACxD,sBAAM,GAAG,IAAI,CAAC;AAM7B,iDAAiD;AACjD,oEAAoE;AACpE,iFAAiF;AACjF,oGAAoG;AACpG,iEAAiE;AAClD,6CAA6B,GAAG,4EAA4E,CAAC;AAE5H;;GAEG;AACY,8BAAc,GAAG,EAAE,CAAC","file":"sme-web-telemetry.js","sourcesContent":["// 1DS documentation found at\r\n// https://1dsdocs.azurewebsites.net/getting-started/javascript-getting_started.html\r\n\r\nimport { Meta } from '@angular/platform-browser';\r\nimport { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, delay, retryWhen, shareReplay, take, tap } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { NotificationState } from '../notification/notification-state';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport { GatewayInstallationType, GatewayInventory, GatewayMode, GatewayOperationalMode } from '../shared/gateway-inventory/gateway-inventory';\r\nimport { GatewayInventoryCache } from '../shared/gateway-inventory/gateway-inventory-cache';\r\nimport { Logging } from './logging';\r\nimport {\r\n CompleteSmePerformanceData,\r\n IContentUpdateOverrideValues,\r\n IPageActionOverrideValues,\r\n IPageViewOverrideValues,\r\n IPageViewPerformanceOverrideValues,\r\n LighthousePerformanceMetrics,\r\n PowershellDetails,\r\n SmeMetaLabels,\r\n SmePerformanceData,\r\n TelemetryActionTypes,\r\n TelemetryEventBody,\r\n TelemetryEvents,\r\n TelemetryEventStates,\r\n TelemetryEventTypes\r\n} from './sme-web-telemetry-models';\r\n\r\n// placeholder for the oneDS type, introduced when we load script.\r\ndeclare var oneDS: any;\r\n\r\nexport class SmeWebTelemetry {\r\n\r\n /**\r\n * The source name to use when logging about this service.\r\n */\r\n private static get logSourceName() {\r\n return 'WebTelemetry';\r\n }\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private static get nameOfModule(): string {\r\n return MsftSme.self().Init.moduleName ? MsftSme.self().Init.moduleName : SmeWebTelemetry.testMode;\r\n }\r\n\r\n private static get backlogHasSpace(): boolean {\r\n return this.eventBacklog.length < 50;\r\n }\r\n\r\n private static eventBacklog: [TelemetryEvents, TelemetryEventBody][] = [];\r\n private static telemetryHandler = null;\r\n\r\n private static testMode = 'test';\r\n private static metaService: Meta;\r\n private static rpcInitAlready = false;\r\n private static metaTags: {[tag: string]: string} = {};\r\n private static powershellIdMap: {[id: string]: PowerShellCommand} = {};\r\n private static isProd = true;\r\n\r\n public static get isProduction() {\r\n return this.isProd;\r\n }\r\n\r\n // AppId/Tenant Token provided by MarTech support\r\n // AppId is not used, but it will be mapped to later in the pipeline\r\n // Full keys are JS:WindowsAdminCenter and o:f78e2b7c9ae4461399c360160d82dcfc for\r\n // AppId/Tenant token respectively. In Cosmos, only the initial portion of the tenant token is used.\r\n // private static windowsAdminCenterAppId = 'WindowsAdminCenter';\r\n private static windowsAdminCenterTenantToken = 'f78e2b7c9ae4461399c360160d82dcfc-9371288c-a1b9-4fdc-a196-0340fc5f9880-7071';\r\n\r\n /**\r\n * Map of module versions used in this instance of web telemetry - memoize values here.\r\n */\r\n private static moduleVersions = {};\r\n\r\n /**\r\n * Get the list of module versions for use in telemetry where the event is sent via RPC to shell\r\n * from the actual module the event is called in.\r\n * @returns list of module mappings to versions\r\n */\r\n private static getModuleVersion(moduleName: string): string {\r\n if (this.moduleVersions[moduleName]) {\r\n return this.moduleVersions[moduleName];\r\n }\r\n const environment = MsftSme.self().Environment;\r\n const moduleObject = environment.modules.find((module) => {\r\n return module.name === moduleName;\r\n });\r\n const version = moduleObject ? moduleObject.version : 'N/A';\r\n this.moduleVersions[moduleName] = version;\r\n return version;\r\n }\r\n\r\n /**\r\n * Send any manual events that were triggered prior to telemetry initializing.\r\n */\r\n private static sendBacklogEvents(): void {\r\n this.eventBacklog.forEach(([type, body]: [TelemetryEvents, TelemetryEventBody]) => {\r\n switch (type) {\r\n case TelemetryEvents.Performance: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.tracePerformanceData(body.performance, overrideVals ? overrideVals.content : null);\r\n break;\r\n }\r\n case TelemetryEvents.Lighthouse: {\r\n this.traceLighthouseData(body.lighthouse, body.overrideValues as IContentUpdateOverrideValues);\r\n break;\r\n }\r\n case TelemetryEvents.ModuleOpenPerformance: this.traceModuleOpenPerformance(body.performance); break;\r\n case TelemetryEvents.Action: {\r\n const overrideVals = body.overrideValues as IPageActionOverrideValues;\r\n this.traceAction(body.element, overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.ContentUpdate: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.traceContentUpdate(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.PageView: {\r\n const overrideVals = body.overrideValues as IPageViewOverrideValues;\r\n this.tracePageView(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.Notification: this.traceClientNotification(body.notification); break;\r\n default: return;\r\n }\r\n });\r\n this.eventBacklog = [];\r\n }\r\n\r\n /**\r\n * Helper to combine setting metaTags, initialize handler, and\r\n * send any telemetry events that occurred prior to initialization\r\n */\r\n private static configureAndInitTelemetry(): void {\r\n this.setMetaInDom();\r\n this.initTelemetryHandler().subscribe(\r\n () => { this.sendBacklogEvents(); },\r\n (error: Error) => {\r\n Logging.logError(this.logSourceName, '{0}: {1}'.format(error.name, error.message));\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Helper function to set metaTags in DOM\r\n */\r\n private static setMetaInDom(): void {\r\n for (const [key, value] of Object.entries(this.metaTags)) {\r\n this.metaService.updateTag({name: `awa-${key}`, content: value});\r\n }\r\n }\r\n\r\n /**\r\n * Update Metatags and/or initialize telemetry, depending on whether rpc message came before or after app-context init.\r\n * @param newMetaTags Primarily contains WAC-Session-Id & extension-version, received from RPC message\r\n */\r\n public static updateFromRpcInit(newMetaTags: {[tag: string]: string}): void {\r\n // All the fields will be updated at the same time here, checking one (wac-session-id is the main one) is enough for the check\r\n const shouldInitHere = SmeMetaLabels.SessionId in this.metaTags\r\n && this.metaTags[SmeMetaLabels.SessionId] === 'N/A';\r\n\r\n this.rpcInitAlready = true;\r\n MsftSme.deepAssign(this.metaTags, newMetaTags);\r\n\r\n // If metaTags contains session ID but it's N/A (ie initial init was called already), call the init. If not,\r\n // just wait for normal init to be called in app-context. Depending on timing RPC update can happen before or after.\r\n if (shouldInitHere) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }\r\n\r\n /**\r\n * Load 1DS if does not already exist.\r\n * @param appContext App context currently being used\r\n */\r\n public static init(appContext: AppContext): Observable<boolean> {\r\n if (this.telemetryHandler) {\r\n return EMPTY;\r\n }\r\n\r\n this.metaService = new Meta(document);\r\n // Set fields we don't need gateway for, if connection to gateway fails, initialize telemetry with limited fields\r\n this.metaTags[SmeMetaLabels.Language] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.Market] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.IsProduction] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.ExtensionVersion] = MsftSme.self().Environment.version;\r\n this.metaTags[SmeMetaLabels.SessionId] = MsftSme.sessionId();\r\n // Instantiate these initially so they aren't empty values\r\n this.metaTags[SmeMetaLabels.InstallationType] = 'N/A';\r\n this.metaTags[SmeMetaLabels.Build] = 'N/A';\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[MsftSme.self().Init.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = 'N/A';\r\n this.isProd = MsftSme.self().Init.isProduction;\r\n\r\n const gatewayInventoryCache = new GatewayInventoryCache(appContext);\r\n return gatewayInventoryCache.query({})\r\n .pipe(\r\n retryWhen(errors => {\r\n let gatewayRetries = 2;\r\n return errors.pipe(\r\n delay(1000),\r\n tap((error) => {\r\n if (gatewayRetries === 0) {\r\n throw error;\r\n }\r\n Logging.logDebug(this.logSourceName, 'Attempting to query gateway again...');\r\n gatewayRetries--;\r\n })\r\n );\r\n }),\r\n take(1),\r\n tap((status: any) => {\r\n const inventory: GatewayInventory = status.instance;\r\n this.isProd = this.isProd\r\n && inventory.gatewayOperationalMode === GatewayOperationalMode.Production;\r\n\r\n this.metaTags[SmeMetaLabels.InstallationType] = inventory.installationType || GatewayInstallationType.Standard;\r\n this.metaTags[SmeMetaLabels.Build] = inventory.gatewayVersion;\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[inventory.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = GatewayOperationalMode[inventory.gatewayOperationalMode];\r\n this.metaTags[SmeMetaLabels.IsProduction] = this.isProd.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = this.isProd.toString();\r\n // If not shell, handle in RPC handler, because some fields will init after 1DS inits\r\n // If rpc handler has happened already, go ahead with this\r\n if (MsftSme.isShell() || this.rpcInitAlready) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }),\r\n catchError((error) => {\r\n Logging.logWarning(this.logSourceName, 'Telemetry failed to initialized with error {}'.format(error.message));\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set config and initialize telemetry library handler\r\n */\r\n private static initTelemetryHandler(): Observable<void> {\r\n const observable = Observable.create(observer => {\r\n const script: HTMLScriptElement = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnLink;\r\n script.integrity = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnIntegrityHash;\r\n script.crossOrigin = 'anonymous';\r\n script.async = true;\r\n\r\n script.onload = () => {\r\n this.telemetryHandler = new oneDS.ApplicationInsights();\r\n const entryType: string = MsftSme.self().Init.entryPointType;\r\n const entryName: string = MsftSme.self().Init.entryPointName;\r\n\r\n const config = {\r\n instrumentationKey: this.windowsAdminCenterTenantToken,\r\n // post channel configuration\r\n channelConfiguration: {\r\n eventsLimitInMem: 50\r\n },\r\n // Properties Plugin configuration\r\n propertyConfiguration: {\r\n userAgent: 'Windows Admin Center',\r\n sessionAsGuid: true\r\n },\r\n // Web Analytics Plugin configuration\r\n webAnalyticsConfiguration: {\r\n autoCapture: {\r\n scroll: false,\r\n pageView: true,\r\n onLoad: false,\r\n onUnload: true,\r\n click: true,\r\n resize: true,\r\n jsError: true,\r\n lineage: true\r\n },\r\n coreData: {\r\n pageName: this.nameOfModule,\r\n // to prevent personal data from being sent in URI\r\n referrerUri: 'windows.admin.center',\r\n requestUri: 'windows.admin.center',\r\n pageTags: {\r\n entryPointName: entryName || '',\r\n entryPointType: entryType || ''\r\n }\r\n },\r\n useShortNameForContentBlob: false\r\n }\r\n };\r\n this.telemetryHandler.initialize(config, []);\r\n this.telemetryHandler.addTelemetryInitializer((event: any) => {\r\n // If we send an event that originates from a different module (eg notifications in shell)\r\n // change the extension version to match module\r\n if (event.baseData.name !== this.nameOfModule) {\r\n event.baseData.properties.pageTags.metaTags[SmeMetaLabels.ExtensionVersion] =\r\n this.getModuleVersion(event.baseData.name);\r\n }\r\n event.baseData.properties.pageTags.screenResolution = {availableHeight: window.screen.availHeight,\r\n availableWidth: window.screen.availWidth};\r\n event.baseData.properties.pageTags.frameDetails = {height: window.innerHeight, width: window.innerWidth};\r\n\r\n });\r\n observer.next();\r\n observer.complete();\r\n };\r\n script.onerror = () => {\r\n script.remove();\r\n observer.error(new Error('1DS Script could not be loaded'));\r\n };\r\n document.body.appendChild(script);\r\n }).pipe(shareReplay(1));\r\n return observable;\r\n }\r\n\r\n /**\r\n * Send a Page-Action event through Web Telemetry.\r\n * @param element Element action is being executed on\r\n * @param overrideValues Various values to override within default Web Telemetry page action fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceAction(element: Element, overrideValues?: IPageActionOverrideValues, properties?: {[name: string]: any}): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Action, { element: element, overrideValues: overrideValues,\r\n customProperties: properties }]);\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.capturePageAction(element, overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Page-View event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry page view fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static tracePageView(overrideValues: IPageViewOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.PageView, { overrideValues: overrideValues }]);\r\n return;\r\n }\r\n this.telemetryHandler.capturePageView(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Content-Update event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry content update fields, see Web Telemetry documentation\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceContentUpdate(overrideValues: IContentUpdateOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ContentUpdate, { overrideValues: overrideValues, customProperties: properties }]);\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.captureContentUpdate(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Add standard fields onto performance data\r\n * @param data SmePerformanceData to be sent\r\n */\r\n private static fillStandardPerformanceData(data: SmePerformanceData): CompleteSmePerformanceData {\r\n const fullDataPayload: CompleteSmePerformanceData = {\r\n extension: MsftSme.self().Environment.name,\r\n entryPointName: MsftSme.self().Init.entryPointName || '',\r\n url: window.location.pathname,\r\n moduleOpened: false,\r\n totalLoadTime: '',\r\n label: data.label,\r\n sme: {},\r\n resources: {},\r\n navigation: {}\r\n };\r\n // Truncate all decimals to 5 places to avoid cosmos stream from redacting any\r\n // Convert PerformanceNavigationTiming to JSON so we can manipulate it via Object.() methods.\r\n fullDataPayload.totalLoadTime = data.totalLoadTime.toFixed(5);\r\n const timingData = {\r\n 'sme': data.sme || {},\r\n 'resources': data.resources || {},\r\n 'navigation': data.navigation ? data.navigation.toJSON() : {}\r\n };\r\n\r\n for (const [sourceKey, sourceVal] of Object.entries(timingData)) {\r\n for (const [resourceKey, resourceVal] of Object.entries(sourceVal)) {\r\n // navigation has some string-string maps, ignore the string values.\r\n // Convert all numbers back into numbers to preserve types in cosmos stream\r\n if (!MsftSme.isEmpty(sourceVal) && typeof resourceVal === 'number') {\r\n fullDataPayload[sourceKey][resourceKey] = parseFloat(resourceVal.toFixed(7));\r\n }\r\n }\r\n }\r\n\r\n // Set this here if need - often the appLoad times happen before Init is populated,\r\n // so check again to make sure if its actually empty.\r\n if (fullDataPayload.navigation) {\r\n fullDataPayload.entryPointName = MsftSme.self().Init.entryPointName || '';\r\n }\r\n return fullDataPayload;\r\n }\r\n\r\n /**\r\n * Send a content update event. This content update contains an updated sme-specific timings structure with relevant\r\n * performance data under the data field. The original timings data is also contained under the navigation field.\r\n * The structure of the event is such:\r\n * data : { ...,\r\n * \"timings\": {\r\n * \"extension\": [extension-name],\r\n * \"entryPointName\": [entryPointName],\r\n * \"url\": [url-endpoint],\r\n * \"moduleOpened\" : [isModuleOpened],\r\n * \"sme\": {\r\n * [sme-mark] : [mark-timestamps],\r\n * ...\r\n * },\r\n * \"resources\": {\r\n * [resource-endpoint] : [resource-load-complete-timestamps],\r\n * ...\r\n * },\r\n * \"navigation\": {\r\n * [performance-navigation-event]: [navigation-event-timestamps]\r\n * }\r\n * }, ...\r\n * }\r\n * Certain fields are set within this class instead of outside modules since they will always be the same.\r\n * @param dataPayload performance data to be sent through telemetry.\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static tracePerformanceData(dataPayload: SmePerformanceData, contentOverrides?: any): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Performance,\r\n { performance: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }\r\n ]);\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n\r\n // A for automatic, performance tracking is done automatically.\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Send a content update event - this event will contain timings for lighthouse calculation in the backend\r\n * This can potentially be sent a couple times with overlapping data for one page load event, depending\r\n * on when the TTI is calculated. In this scenario, it will be handled on the backend.\r\n * @param dataPayload Lighthouse data\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static traceLighthouseData(dataPayload: LighthousePerformanceMetrics, contentOverrides?: any,\r\n properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Lighthouse,\r\n { lighthouse: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n return;\r\n }\r\n\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: dataPayload, type: TelemetryEventTypes.Lighthouse };\r\n MsftSme.deepAssign(customProps, properties);\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * See tracePerformanceData comments, only difference is moduleOpened is true and the contentOverrides\r\n * @param dataPayload performance data to be sent through telemetry.\r\n */\r\n public static traceModuleOpenPerformance(dataPayload: SmePerformanceData): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ModuleOpenPerformance, { performance: dataPayload }]);\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n data.moduleOpened = true;\r\n\r\n const overrideValues: IPageViewPerformanceOverrideValues = {\r\n customTiming: JSON.stringify(data)\r\n };\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n\r\n this.telemetryHandler.capturePageViewPerformance(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for notification\r\n * @param clientNotification Client notification to send event for\r\n */\r\n public static traceClientNotification(clientNotification: RpcNotification): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Notification, { notification: clientNotification }]);\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n content: {\r\n message: clientNotification.message,\r\n title: clientNotification.title,\r\n state: NotificationState[clientNotification.state],\r\n contentType: TelemetryEventTypes.Notification\r\n },\r\n // If source is not shell, replace pagename with proper source.\r\n pageName: clientNotification.sourceName ? clientNotification.sourceName : this.nameOfModule\r\n };\r\n this.traceContentUpdate(overrideValues, { type: TelemetryEventTypes.Notification });\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static addPowershellId(id: string, command: PowerShellCommand) {\r\n this.powershellIdMap[id] = command;\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static removePowershellId(id: string) {\r\n delete this.powershellIdMap[id];\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell event. In the case where command is not available,\r\n * use an ID (usually ps session ID, which may correlate with work item id)\r\n * This is only used to track ERROR messages.\r\n * @param command Powershell Command\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object - see interface for more detail.\r\n */\r\n public static tracePowershellEvent(command: PowerShellCommand, state: TelemetryEventStates, details?: PowershellDetails ): void {\r\n const id = details ? details.id : null;\r\n const response = details ? details.response : null;\r\n const psCommand = command ? command : this.powershellIdMap[id];\r\n\r\n // Ignore any events that are either null or un-named PS commands.\r\n if ((psCommand && !psCommand.command) || !psCommand) {\r\n return;\r\n }\r\n\r\n // If state is not started and id is provided, remove the ID from the map to save space.\r\n if (state !== TelemetryEventStates.Started && id) {\r\n this.removePowershellId(id);\r\n }\r\n\r\n const psContent = {psCommand: psCommand.command, state: state, psModule: psCommand.module,\r\n otherData: details && details.otherData ? details.otherData : {}};\r\n const sourceName = this.nameOfModule;\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, {content: psContent, pageName: sourceName},\r\n {type: TelemetryEventTypes.Powershell});\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell batch event. Batch doesn't deal with work items, so\r\n * we can ignore the ID and sourceName handling that the above function handles.\r\n * @param commands Powershell Commands List in properties stringified form. PS Batch events places PS command into a\r\n * '{properties: PSCommand }' string structure.\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object contains various optional fields in powershell event.\r\n * @returns\r\n */\r\n public static tracePowershellBatchEvent(commands: string[], state: TelemetryEventStates, details?: PowershellDetails ) {\r\n // check that at least one command is valid\r\n if (!commands || commands.length === 0) {\r\n return;\r\n }\r\n\r\n let parsedCommands: string[] = [];\r\n parsedCommands = commands.reduce((commandList, currentCommand) => {\r\n if (currentCommand) {\r\n const parsedCommand = JSON.parse(currentCommand).properties.command;\r\n if (parsedCommand) {\r\n commandList.push(parsedCommand);\r\n }\r\n return commandList;\r\n }\r\n }, parsedCommands);\r\n\r\n\r\n const response = details ? details.response : null;\r\n\r\n const psContent = {psCommands: parsedCommands, state: state, otherData: details && details.otherData ? details.otherData : {}};\r\n\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, {content: psContent},\r\n {type: TelemetryEventTypes.Powershell});\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/diagnostics/sme-web-telemetry.ts"],"names":[],"mappings":"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","file":"sme-web-telemetry.js","sourcesContent":["// 1DS documentation found at\r\n// https://1dsdocs.azurewebsites.net/getting-started/javascript-getting_started.html\r\n\r\nimport { Meta } from '@angular/platform-browser';\r\nimport { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, delay, retryWhen, shareReplay, take, tap } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { NotificationState } from '../notification/notification-state';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport {\r\n GatewayInstallationType,\r\n GatewayInventory,\r\n GatewayMode,\r\n GatewayOperationalMode\r\n} from '../shared/gateway-inventory/gateway-inventory';\r\nimport { GatewayInventoryCache } from '../shared/gateway-inventory/gateway-inventory-cache';\r\nimport { Logging } from './logging';\r\nimport {\r\n CompleteSmePerformanceData,\r\n IContentUpdateOverrideValues,\r\n IPageActionOverrideValues,\r\n IPageViewOverrideValues,\r\n IPageViewPerformanceOverrideValues,\r\n LighthousePerformanceMetrics,\r\n PowershellDetails,\r\n SmeMetaLabels,\r\n SmePerformanceData,\r\n TelemetryActionTypes,\r\n TelemetryEventBody,\r\n TelemetryEvents,\r\n TelemetryEventStates,\r\n TelemetryEventTypes\r\n} from './sme-web-telemetry-models';\r\n\r\n// placeholder for the oneDS type, introduced when we load script.\r\ndeclare var oneDS: any;\r\n\r\nexport class SmeWebTelemetry {\r\n\r\n /**\r\n * The source name to use when logging about this service.\r\n */\r\n private static get logSourceName() {\r\n return 'WebTelemetry';\r\n }\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private static get nameOfModule(): string {\r\n return MsftSme.self().Init.moduleName ? MsftSme.self().Init.moduleName : SmeWebTelemetry.testMode;\r\n }\r\n\r\n private static get backlogHasSpace(): boolean {\r\n return this.eventBacklog.length < 50;\r\n }\r\n\r\n private static eventBacklog: [TelemetryEvents, TelemetryEventBody][] = [];\r\n private static telemetryHandler = null;\r\n\r\n private static testMode = 'test';\r\n private static metaService: Meta;\r\n private static rpcInitAlready = false;\r\n private static metaTags: {[tag: string]: string} = {};\r\n private static powershellIdMap: {[id: string]: PowerShellCommand} = {};\r\n private static isProd = true;\r\n\r\n public static get isProduction() {\r\n return this.isProd;\r\n }\r\n\r\n // AppId/Tenant Token provided by MarTech support\r\n // AppId is not used, but it will be mapped to later in the pipeline\r\n // Full keys are JS:WindowsAdminCenter and o:f78e2b7c9ae4461399c360160d82dcfc for\r\n // AppId/Tenant token respectively. In Cosmos, only the initial portion of the tenant token is used.\r\n // private static windowsAdminCenterAppId = 'WindowsAdminCenter';\r\n private static windowsAdminCenterTenantToken = 'f78e2b7c9ae4461399c360160d82dcfc-9371288c-a1b9-4fdc-a196-0340fc5f9880-7071';\r\n\r\n /**\r\n * Map of module versions used in this instance of web telemetry - memoize values here.\r\n */\r\n private static moduleVersions = {};\r\n\r\n /**\r\n * Get the list of module versions for use in telemetry where the event is sent via RPC to shell\r\n * from the actual module the event is called in.\r\n * @returns list of module mappings to versions\r\n */\r\n private static getModuleVersion(moduleName: string): string {\r\n if (this.moduleVersions[moduleName]) {\r\n return this.moduleVersions[moduleName];\r\n }\r\n const environment = MsftSme.self().Environment;\r\n const moduleObject = environment.modules.find((module) => {\r\n return module.name === moduleName;\r\n });\r\n const version = moduleObject ? moduleObject.version : 'N/A';\r\n this.moduleVersions[moduleName] = version;\r\n return version;\r\n }\r\n\r\n /**\r\n * Send any manual events that were triggered prior to telemetry initializing.\r\n */\r\n private static sendBacklogEvents(): void {\r\n this.eventBacklog.forEach(([type, body]: [TelemetryEvents, TelemetryEventBody]) => {\r\n switch (type) {\r\n case TelemetryEvents.Performance: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.tracePerformanceData(body.performance, overrideVals ? overrideVals.content : null);\r\n break;\r\n }\r\n case TelemetryEvents.Lighthouse: {\r\n this.traceLighthouseData(body.lighthouse, body.overrideValues as IContentUpdateOverrideValues);\r\n break;\r\n }\r\n case TelemetryEvents.ModuleOpenPerformance: this.traceModuleOpenPerformance(body.performance); break;\r\n case TelemetryEvents.Action: {\r\n const overrideVals = body.overrideValues as IPageActionOverrideValues;\r\n this.traceAction(body.element, overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.ContentUpdate: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.traceContentUpdate(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.PageView: {\r\n const overrideVals = body.overrideValues as IPageViewOverrideValues;\r\n this.tracePageView(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.Notification: this.traceClientNotification(body.notification); break;\r\n default: return;\r\n }\r\n });\r\n this.eventBacklog = [];\r\n }\r\n\r\n /**\r\n * Helper to combine setting metaTags, initialize handler, and\r\n * send any telemetry events that occurred prior to initialization\r\n */\r\n private static configureAndInitTelemetry(): void {\r\n this.setMetaInDom();\r\n this.initTelemetryHandler().subscribe(\r\n () => { this.sendBacklogEvents(); },\r\n (error: Error) => {\r\n Logging.logError(this.logSourceName, '{0}: {1}'.format(error.name, error.message));\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Helper function to set metaTags in DOM\r\n */\r\n private static setMetaInDom(): void {\r\n for (const [key, value] of Object.entries(this.metaTags)) {\r\n this.metaService.updateTag({name: `awa-${key}`, content: value});\r\n }\r\n }\r\n\r\n /**\r\n * Update Metatags and/or initialize telemetry, depending on whether rpc message came before or after app-context init.\r\n * @param newMetaTags Primarily contains WAC-Session-Id & extension-version, received from RPC message\r\n */\r\n public static updateFromRpcInit(newMetaTags: {[tag: string]: string}): void {\r\n // All the fields will be updated at the same time here, checking one (wac-session-id is the main one) is enough for the check\r\n const shouldInitHere = SmeMetaLabels.SessionId in this.metaTags\r\n && this.metaTags[SmeMetaLabels.SessionId] === 'N/A';\r\n\r\n this.rpcInitAlready = true;\r\n MsftSme.deepAssign(this.metaTags, newMetaTags);\r\n\r\n // If metaTags contains session ID but it's N/A (ie initial init was called already), call the init. If not,\r\n // just wait for normal init to be called in app-context. Depending on timing RPC update can happen before or after.\r\n if (shouldInitHere) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }\r\n\r\n /**\r\n * Load 1DS if does not already exist.\r\n * @param appContext App context currently being used\r\n */\r\n public static init(appContext: AppContext): Observable<boolean> {\r\n if (this.telemetryHandler) {\r\n return EMPTY;\r\n }\r\n\r\n this.metaService = new Meta(document);\r\n // Set fields we don't need gateway for, if connection to gateway fails, initialize telemetry with limited fields\r\n this.metaTags[SmeMetaLabels.Language] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.Market] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.IsProduction] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.ExtensionVersion] = MsftSme.self().Environment.version;\r\n this.metaTags[SmeMetaLabels.SessionId] = MsftSme.sessionId();\r\n // Instantiate these initially so they aren't empty values\r\n this.metaTags[SmeMetaLabels.InstallationType] = 'N/A';\r\n this.metaTags[SmeMetaLabels.Build] = 'N/A';\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[MsftSme.self().Init.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = 'N/A';\r\n this.isProd = MsftSme.self().Init.isProduction;\r\n\r\n const gatewayInventoryCache = new GatewayInventoryCache(appContext);\r\n return gatewayInventoryCache.query({})\r\n .pipe(\r\n retryWhen(errors => {\r\n let gatewayRetries = 2;\r\n return errors.pipe(\r\n delay(1000),\r\n tap((error) => {\r\n if (gatewayRetries === 0) {\r\n throw error;\r\n }\r\n Logging.logDebug(this.logSourceName, 'Attempting to query gateway again...');\r\n gatewayRetries--;\r\n })\r\n );\r\n }),\r\n take(1),\r\n tap((status: any) => {\r\n const inventory: GatewayInventory = status.instance;\r\n this.isProd = this.isProd\r\n && inventory.gatewayOperationalMode === GatewayOperationalMode.Production;\r\n\r\n this.metaTags[SmeMetaLabels.InstallationType] = inventory.installationType || GatewayInstallationType.Standard;\r\n this.metaTags[SmeMetaLabels.Build] = inventory.gatewayVersion;\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[inventory.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = GatewayOperationalMode[inventory.gatewayOperationalMode];\r\n this.metaTags[SmeMetaLabels.IsProduction] = this.isProd.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = this.isProd.toString();\r\n // If not shell, handle in RPC handler, because some fields will init after 1DS inits\r\n // If rpc handler has happened already, go ahead with this\r\n if (MsftSme.isShell() || this.rpcInitAlready) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }),\r\n catchError((error) => {\r\n Logging.logWarning(this.logSourceName, 'Telemetry failed to initialized with error {}'.format(error.message));\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set config and initialize telemetry library handler\r\n */\r\n private static initTelemetryHandler(): Observable<void> {\r\n const observable = Observable.create(observer => {\r\n const script: HTMLScriptElement = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnLink;\r\n script.integrity = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnIntegrityHash;\r\n script.crossOrigin = 'anonymous';\r\n script.async = true;\r\n\r\n script.onload = () => {\r\n this.telemetryHandler = new oneDS.ApplicationInsights();\r\n const entryType: string = MsftSme.self().Init.entryPointType;\r\n const entryName: string = MsftSme.self().Init.entryPointName;\r\n\r\n const config = {\r\n instrumentationKey: this.windowsAdminCenterTenantToken,\r\n // post channel configuration\r\n channelConfiguration: {\r\n eventsLimitInMem: 50\r\n },\r\n // Properties Plugin configuration\r\n propertyConfiguration: {\r\n userAgent: 'Windows Admin Center',\r\n sessionAsGuid: true\r\n },\r\n // Web Analytics Plugin configuration\r\n webAnalyticsConfiguration: {\r\n autoCapture: {\r\n scroll: false,\r\n pageView: true,\r\n onLoad: false,\r\n onUnload: true,\r\n click: true,\r\n resize: true,\r\n jsError: true,\r\n lineage: true\r\n },\r\n coreData: {\r\n pageName: this.nameOfModule,\r\n // to prevent personal data from being sent in URI\r\n referrerUri: 'windows.admin.center',\r\n requestUri: 'windows.admin.center',\r\n pageTags: {\r\n entryPointName: entryName || '',\r\n entryPointType: entryType || ''\r\n }\r\n },\r\n useShortNameForContentBlob: false\r\n }\r\n };\r\n this.telemetryHandler.initialize(config, []);\r\n this.telemetryHandler.addTelemetryInitializer((event: any) => {\r\n // If we send an event that originates from a different module (eg notifications in shell)\r\n // change the extension version to match module\r\n if (event.baseData.name !== this.nameOfModule) {\r\n event.baseData.properties.pageTags.metaTags[SmeMetaLabels.ExtensionVersion] =\r\n this.getModuleVersion(event.baseData.name);\r\n }\r\n event.baseData.properties.pageTags.screenResolution = {availableHeight: window.screen.availHeight,\r\n availableWidth: window.screen.availWidth};\r\n event.baseData.properties.pageTags.frameDetails = {height: window.innerHeight, width: window.innerWidth};\r\n });\r\n observer.next();\r\n observer.complete();\r\n };\r\n script.onerror = () => {\r\n script.remove();\r\n observer.error(new Error('1DS Script could not be loaded'));\r\n };\r\n document.body.appendChild(script);\r\n }).pipe(shareReplay(1));\r\n return observable;\r\n }\r\n\r\n /**\r\n * Send a Page-Action event through Web Telemetry.\r\n * @param element Element action is being executed on\r\n * @param overrideValues Various values to override within default Web Telemetry page action fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceAction(element: Element, overrideValues?: IPageActionOverrideValues, properties?: {[name: string]: any}): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Action, { element: element, overrideValues: overrideValues,\r\n customProperties: properties }]);\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.capturePageAction(element, overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Page-View event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry page view fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static tracePageView(overrideValues: IPageViewOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.PageView, { overrideValues: overrideValues }]);\r\n return;\r\n }\r\n this.telemetryHandler.capturePageView(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Content-Update event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry content update fields, see Web Telemetry documentation\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceContentUpdate(overrideValues: IContentUpdateOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ContentUpdate, { overrideValues: overrideValues, customProperties: properties }]);\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.captureContentUpdate(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Add standard fields onto performance data\r\n * @param data SmePerformanceData to be sent\r\n */\r\n private static fillStandardPerformanceData(data: SmePerformanceData): CompleteSmePerformanceData {\r\n const fullDataPayload: CompleteSmePerformanceData = {\r\n extension: MsftSme.self().Environment.name,\r\n entryPointName: MsftSme.self().Init.entryPointName || '',\r\n url: window.location.pathname,\r\n moduleOpened: false,\r\n totalLoadTime: '',\r\n label: data.label,\r\n sme: {},\r\n resources: {},\r\n navigation: {}\r\n };\r\n // Truncate all decimals to 5 places to avoid cosmos stream from redacting any\r\n // Convert PerformanceNavigationTiming to JSON so we can manipulate it via Object.() methods.\r\n fullDataPayload.totalLoadTime = data.totalLoadTime.toFixed(5);\r\n const timingData = {\r\n 'sme': data.sme || {},\r\n 'resources': data.resources || {},\r\n 'navigation': data.navigation ? data.navigation.toJSON() : {}\r\n };\r\n\r\n for (const [sourceKey, sourceVal] of Object.entries(timingData)) {\r\n for (const [resourceKey, resourceVal] of Object.entries(sourceVal)) {\r\n // navigation has some string-string maps, ignore the string values.\r\n // Convert all numbers back into numbers to preserve types in cosmos stream\r\n if (!MsftSme.isEmpty(sourceVal) && typeof resourceVal === 'number') {\r\n fullDataPayload[sourceKey][resourceKey] = parseFloat(resourceVal.toFixed(7));\r\n }\r\n }\r\n }\r\n\r\n // Set this here if need - often the appLoad times happen before Init is populated,\r\n // so check again to make sure if its actually empty.\r\n if (fullDataPayload.navigation) {\r\n fullDataPayload.entryPointName = MsftSme.self().Init.entryPointName || '';\r\n }\r\n return fullDataPayload;\r\n }\r\n\r\n /**\r\n * Send a content update event. This content update contains an updated sme-specific timings structure with relevant\r\n * performance data under the data field. The original timings data is also contained under the navigation field.\r\n * The structure of the event is such:\r\n * data : { ...,\r\n * \"timings\": {\r\n * \"extension\": [extension-name],\r\n * \"entryPointName\": [entryPointName],\r\n * \"url\": [url-endpoint],\r\n * \"moduleOpened\" : [isModuleOpened],\r\n * \"sme\": {\r\n * [sme-mark] : [mark-timestamps],\r\n * ...\r\n * },\r\n * \"resources\": {\r\n * [resource-endpoint] : [resource-load-complete-timestamps],\r\n * ...\r\n * },\r\n * \"navigation\": {\r\n * [performance-navigation-event]: [navigation-event-timestamps]\r\n * }\r\n * }, ...\r\n * }\r\n * Certain fields are set within this class instead of outside modules since they will always be the same.\r\n * @param dataPayload performance data to be sent through telemetry.\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static tracePerformanceData(dataPayload: SmePerformanceData, contentOverrides?: any): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Performance,\r\n { performance: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }\r\n ]);\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n\r\n // A for automatic, performance tracking is done automatically.\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Send a content update event - this event will contain timings for lighthouse calculation in the backend\r\n * This can potentially be sent a couple times with overlapping data for one page load event, depending\r\n * on when the TTI is calculated. In this scenario, it will be handled on the backend.\r\n * @param dataPayload Lighthouse data\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static traceLighthouseData(dataPayload: LighthousePerformanceMetrics, contentOverrides?: any,\r\n properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Lighthouse,\r\n { lighthouse: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n return;\r\n }\r\n\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: dataPayload, type: TelemetryEventTypes.Lighthouse };\r\n MsftSme.deepAssign(customProps, properties);\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * See tracePerformanceData comments, only difference is moduleOpened is true and the contentOverrides\r\n * @param dataPayload performance data to be sent through telemetry.\r\n */\r\n public static traceModuleOpenPerformance(dataPayload: SmePerformanceData): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ModuleOpenPerformance, { performance: dataPayload }]);\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n data.moduleOpened = true;\r\n\r\n const overrideValues: IPageViewPerformanceOverrideValues = {\r\n customTiming: JSON.stringify(data)\r\n };\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n\r\n this.telemetryHandler.capturePageViewPerformance(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for notification\r\n * @param clientNotification Client notification to send event for\r\n */\r\n public static traceClientNotification(clientNotification: RpcNotification): void {\r\n if (!this.telemetryHandler && this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Notification, { notification: clientNotification }]);\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n content: {\r\n message: clientNotification.message,\r\n title: clientNotification.title,\r\n state: NotificationState[clientNotification.state],\r\n contentType: TelemetryEventTypes.Notification\r\n },\r\n // If source is not shell, replace pagename with proper source.\r\n pageName: clientNotification.sourceName ? clientNotification.sourceName : this.nameOfModule\r\n };\r\n this.traceContentUpdate(overrideValues, { type: TelemetryEventTypes.Notification });\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static addPowershellId(id: string, command: PowerShellCommand) {\r\n this.powershellIdMap[id] = command;\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static removePowershellId(id: string) {\r\n delete this.powershellIdMap[id];\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell event. In the case where command is not available,\r\n * use an ID (usually ps session ID, which may correlate with work item id)\r\n * This is only used to track ERROR messages.\r\n * @param command Powershell Command\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object - see interface for more detail.\r\n */\r\n public static tracePowershellEvent(command: PowerShellCommand, state: TelemetryEventStates, details?: PowershellDetails ): void {\r\n const id = details ? details.id : null;\r\n const response = details ? details.response : null;\r\n const psCommand = command ? command : this.powershellIdMap[id];\r\n\r\n // Ignore any events that are either null or un-named PS commands.\r\n if ((psCommand && !psCommand.command) || !psCommand) {\r\n return;\r\n }\r\n\r\n // If state is not started and id is provided, remove the ID from the map to save space.\r\n if (state !== TelemetryEventStates.Started && id) {\r\n this.removePowershellId(id);\r\n }\r\n\r\n const psContent = {psCommand: psCommand.command, state: state, psModule: psCommand.module,\r\n otherData: details && details.otherData ? details.otherData : {}};\r\n const sourceName = this.nameOfModule;\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, {content: psContent, pageName: sourceName},\r\n {type: TelemetryEventTypes.Powershell});\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell batch event. Batch doesn't deal with work items, so\r\n * we can ignore the ID and sourceName handling that the above function handles.\r\n * @param commands Powershell Commands List in properties stringified form. PS Batch events places PS command into a\r\n * '{properties: PSCommand }' string structure.\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object contains various optional fields in powershell event.\r\n * @returns\r\n */\r\n public static tracePowershellBatchEvent(commands: string[], state: TelemetryEventStates, details?: PowershellDetails ) {\r\n // check that at least one command is valid\r\n if (!commands || commands.length === 0) {\r\n return;\r\n }\r\n\r\n let parsedCommands: string[] = [];\r\n parsedCommands = commands.reduce((commandList, currentCommand) => {\r\n if (currentCommand) {\r\n const parsedCommand = JSON.parse(currentCommand).properties.command;\r\n if (parsedCommand) {\r\n commandList.push(parsedCommand);\r\n }\r\n return commandList;\r\n }\r\n }, parsedCommands);\r\n\r\n\r\n const response = details ? details.response : null;\r\n\r\n const psContent = {psCommands: parsedCommands, state: state, otherData: details && details.otherData ? details.otherData : {}};\r\n\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, {content: psContent},\r\n {type: TelemetryEventTypes.Powershell});\r\n }\r\n\r\n /**\r\n * Helper to redactGenericModel function\r\n * Determines whether field should be redacted according to fields provided for redacting and exceptions\r\n * @param key The field in question\r\n * @param keywordsToRedact List of string inclusions to redact - if the field contains any part of this, it will be redacted\r\n * @param exceptions Set of exceptions to the above - if the field matches an exception, it will not be redacted\r\n * @returns True if field should be redacted, false otherwise\r\n */\r\n private static fieldShouldBeRedacted (key: string, keywordsToRedact: string[], exceptions: Set<string>): boolean {\r\n if (exceptions.has(key)) {\r\n return false;\r\n }\r\n\r\n for (const field of keywordsToRedact) {\r\n if (key.toLowerCase().includes(field.toLowerCase()) ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Telemetry utility function to redact a model object. This function will traverse the model in BFS fashion and redact any fields\r\n * that contain any string in the keywordsToRedact array, unless the field is an exception (in the exceptions array).\r\n * This function will not affect keys in StringMaps or Maps - if names exist there, they should be handled separately.\r\n *\r\n * @param model Model to redact\r\n * @param keywordsToRedact List of string inclusions to redact\r\n * @param fieldExceptions List of exceptions to the above\r\n * @returns Redacted model\r\n */\r\n public static redactGenericModel(model: any, keywordsToRedact: string[], fieldExceptions: string[]): any {\r\n const redacted_model: any = JSON.parse(JSON.stringify(model));\r\n const remainingObjects = [redacted_model];\r\n const exceptionSet = new Set(fieldExceptions);\r\n\r\n while (remainingObjects.length > 0) {\r\n const currentTree = remainingObjects[0];\r\n\r\n Object.keys(currentTree).forEach(key => {\r\n if (MsftSme.isPlainObject(currentTree[key])) {\r\n remainingObjects.push(currentTree[key]);\r\n } else if (Array.isArray(currentTree[key]) && currentTree[key].some((field: any) => MsftSme.isPlainObject(field))) {\r\n // If array intermixes objects and non-objects, we will push the objects into the queue and ignore the non-objects.\r\n // The non-objects will avoid redaction, but this should never be a concern in practice.\r\n remainingObjects.push(currentTree[key].filter((field: any) => MsftSme.isPlainObject(field)));\r\n } else if (this.fieldShouldBeRedacted(key, keywordsToRedact, exceptionSet)) {\r\n if (Array.isArray(currentTree[key])) {\r\n for (let i = 0; i < currentTree[key].length; ++i) {\r\n currentTree[key][i] = '***';\r\n }\r\n } else {\r\n currentTree[key] = '***';\r\n }\r\n }\r\n });\r\n remainingObjects.shift();\r\n }\r\n return redacted_model;\r\n }\r\n}\r\n"]}
@@ -51,7 +51,7 @@ export var PowerShellScripts;
51
51
  };
52
52
  PowerShellScripts.Get_ServerInventory = {
53
53
  command: 'Get-ServerInventory',
54
- script: "##Get-ServerInventory##:Get-ServerInventory.ps1\nSet-StrictMode -Version 5.0\nImport-Module CimCmdlets\nImport-Module Storage -ErrorAction SilentlyContinue\nfunction convertOsVersion([string]$osVersion) {\n[Ref]$parsedVersion = $null\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\nreturn $null\n}\n$version = [Version]$parsedVersion.Value\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\n}\nfunction isCredSSPEnabled() {\nSet-Variable credSSPServicePath -Option Constant -Value \"WSMan:\\localhost\\Service\\Auth\\CredSSP\"\nSet-Variable credSSPClientPath -Option Constant -Value \"WSMan:\\localhost\\Client\\Auth\\CredSSP\"\n$credSSPServerEnabled = $false;\n$credSSPClientEnabled = $false;\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\nif ($credSSPServerService) {\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\n}\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\nif ($credSSPClientService) {\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\n}\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\n}\nfunction isHyperVRoleInstalled() {\n$vmmsService = Get-Service -Name \"VMMS\" -ErrorAction SilentlyContinue\nreturn $vmmsService -and $vmmsService.Name -eq \"VMMS\"\n}\nfunction isHyperVPowerShellSupportInstalled() {\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\n}\nfunction isWMF5Installed([string] $operatingSystemVersion) {\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \u002710.0\u0027) # And Windows 10 client SKUs\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \u00276.2\u0027)\n$version = convertOsVersion $operatingSystemVersion\nif (-not $version) {\nreturn $false\n}\nif ($version -ge $Server2016) {\nreturn $true\n}\nelse {\nif ($version -ge $Server2012) {\n$registryKey = \u0027HKLM:\\SOFTWARE\\Microsoft\\PowerShell\\3\\PowerShellEngine\u0027\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\nif ($installedWmfVersion -ge [Version]\u00275.0\u0027) {\nreturn $true\n}\n}\n}\n}\nreturn $false\n}\nfunction isUserAnAdministrator() {\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \"Administrator\")\n}\nfunction getClusterInformation() {\n$returnValues = @{ }\n$returnValues.IsS2dEnabled = $false\n$returnValues.IsCluster = $false\n$returnValues.ClusterFqdn = $null\n$returnValues.IsBritannicaEnabled = $false\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\nif ($namespace) {\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\nif ($cluster) {\n$returnValues.IsCluster = $true\n$returnValues.ClusterFqdn = $cluster.Fqdn\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \"S2DEnabled\") -and ($cluster.S2DEnabled -gt 0)\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\n}\n}\nreturn $returnValues\n}\nfunction getComputerFqdnAndAddress($computerName) {\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\n$addressList = @()\nforeach ($item in $hostEntry.AddressList) {\n$address = New-Object PSObject\n$address | Add-Member -MemberType NoteProperty -Name \u0027IpAddress\u0027 -Value $item.ToString()\n$address | Add-Member -MemberType NoteProperty -Name \u0027AddressFamily\u0027 -Value $item.AddressFamily.ToString()\n$addressList += $address\n}\n$result = New-Object PSObject\n$result | Add-Member -MemberType NoteProperty -Name \u0027Fqdn\u0027 -Value $hostEntry.HostName\n$result | Add-Member -MemberType NoteProperty -Name \u0027AddressList\u0027 -Value $addressList\nreturn $result\n}\nfunction getHostFqdnAndAddress($computerSystem) {\n$computerName = $computerSystem.DNSHostName\nif (!$computerName) {\n$computerName = $computerSystem.Name\n}\nreturn getComputerFqdnAndAddress $computerName\n}\nfunction getManagementToolsSupportInformation() {\n$returnValues = @{ }\n$returnValues.ManagementToolsAvailable = $false\n$returnValues.ServerManagerAvailable = $false\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\nif ($namespaces) {\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \"ManagementTools\" })\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \"ServerManager\" })\n}\nreturn $returnValues\n}\nfunction isRemoteAppEnabled() {\nSet-Variable key -Option Constant -Value \"HKLM:\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\TSAppAllowList\"\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\nif (-not $registryKeyValue) {\nreturn $false\n}\nreturn $registryKeyValue.fDisabledAllowList -eq 1\n}\nfunction getOperatingSystemInfo() {\nreturn Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime\n}\nfunction getComputerSystemInfo() {\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\nMicrosoft.PowerShell.Utility\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\n}\nfunction getSmbiosData($computerSystem) {\n$ChassisTypes =\n@{\n1 = \u0027Other\u0027\n2 = \u0027Unknown\u0027\n3 = \u0027Desktop\u0027\n4 = \u0027Low Profile Desktop\u0027\n5 = \u0027Pizza Box\u0027\n6 = \u0027Mini Tower\u0027\n7 = \u0027Tower\u0027\n8 = \u0027Portable\u0027\n9 = \u0027Laptop\u0027\n10 = \u0027Notebook\u0027\n11 = \u0027Hand Held\u0027\n12 = \u0027Docking Station\u0027\n13 = \u0027All in One\u0027\n14 = \u0027Sub Notebook\u0027\n15 = \u0027Space-Saving\u0027\n16 = \u0027Lunch Box\u0027\n17 = \u0027Main System Chassis\u0027\n18 = \u0027Expansion Chassis\u0027\n19 = \u0027SubChassis\u0027\n20 = \u0027Bus Expansion Chassis\u0027\n21 = \u0027Peripheral Chassis\u0027\n22 = \u0027Storage Chassis\u0027\n23 = \u0027Rack Mount Chassis\u0027\n24 = \u0027Sealed-Case PC\u0027\n25 = \u0027Multi-system chassis\u0027\n26 = \u0027Compact PCI\u0027\n27 = \u0027Advanced TCA\u0027\n28 = \u0027Blade\u0027\n29 = \u0027Blade Enclosure\u0027\n30 = \u0027Tablet\u0027\n31 = \u0027Convertible\u0027\n32 = \u0027Detachable\u0027\n33 = \u0027IoT Gateway\u0027\n34 = \u0027Embedded PC\u0027\n35 = \u0027Mini PC\u0027\n36 = \u0027Stick PC\u0027\n}\n$list = New-Object System.Collections.ArrayList\n$win32_Bios = Get-CimInstance -class Win32_Bios\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\n$obj.SerialNumber = $win32_Bios.SerialNumber\n$obj.Manufacturer = $win32_Bios.Manufacturer\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\nif ($null -ne $computerSystemProduct) {\n$obj.UUID = $computerSystemProduct.UUID\n}\n$baseboard = Get-CimInstance Win32_BaseBoard\nif ($null -ne $baseboard) {\n$obj.BaseBoardProduct = $baseboard.Product\n}\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\nif ($null -ne $systemEnclosure) {\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\n}\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\Select-Object -ExpandProperty ChassisTypes\n$obj.Chassis = New-Object -TypeName \u0027System.Collections.ArrayList\u0027\n$obj.ChassisTypes | ForEach-Object -Process {\n$obj.Chassis.Add($ChassisTypes[[int]$_])\n}\n$obj.SystemFamily = $computerSystem.SystemFamily\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\n$list.Add($obj) | Out-Null\nreturn $list\n}\n$operatingSystem = getOperatingSystemInfo\n$computerSystem = getComputerSystemInfo\n$isAdministrator = isUserAnAdministrator\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\n$hostname = [Environment]::MachineName\n$netbios = $env:ComputerName\n$managementToolsInformation = getManagementToolsSupportInformation\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\n$isHyperVRoleInstalled = isHyperVRoleInstalled\n$isCredSSPEnabled = isCredSSPEnabled\n$isRemoteAppEnabled = isRemoteAppEnabled\n$smbiosData = getSmbiosData $computerSystem\n$result = New-Object PSObject\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsAdministrator\u0027 -Value $isAdministrator\n$result | Add-Member -MemberType NoteProperty -Name \u0027OperatingSystem\u0027 -Value $operatingSystem\n$result | Add-Member -MemberType NoteProperty -Name \u0027ComputerSystem\u0027 -Value $computerSystem\n$result | Add-Member -MemberType NoteProperty -Name \u0027Fqdn\u0027 -Value $fqdnAndAddress.Fqdn\n$result | Add-Member -MemberType NoteProperty -Name \u0027AddressList\u0027 -Value $fqdnAndAddress.AddressList\n$result | Add-Member -MemberType NoteProperty -Name \u0027Hostname\u0027 -Value $hostname\n$result | Add-Member -MemberType NoteProperty -Name \u0027NetBios\u0027 -Value $netbios\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsManagementToolsAvailable\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsServerManagerAvailable\u0027 -Value $managementToolsInformation.ServerManagerAvailable\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsWmfInstalled\u0027 -Value $isWmfInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsCluster\u0027 -Value $clusterInformation.IsCluster\n$result | Add-Member -MemberType NoteProperty -Name \u0027ClusterFqdn\u0027 -Value $clusterInformation.ClusterFqdn\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsS2dEnabled\u0027 -Value $clusterInformation.IsS2dEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsBritannicaEnabled\u0027 -Value $clusterInformation.IsBritannicaEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsHyperVRoleInstalled\u0027 -Value $isHyperVRoleInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsHyperVPowershellInstalled\u0027 -Value $isHyperVPowershellInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsCredSSPEnabled\u0027 -Value $isCredSSPEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsRemoteAppEnabled\u0027 -Value $isRemoteAppEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027SmbiosData\u0027 -Value $smbiosData\n$result\n"
54
+ script: "##Get-ServerInventory##:Get-ServerInventory.ps1\nSet-StrictMode -Version 5.0\nImport-Module CimCmdlets\nImport-Module Storage -ErrorAction SilentlyContinue\nfunction convertOsVersion([string]$osVersion) {\n[Ref]$parsedVersion = $null\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\nreturn $null\n}\n$version = [Version]$parsedVersion.Value\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\n}\nfunction isCredSSPEnabled() {\nSet-Variable credSSPServicePath -Option Constant -Value \"WSMan:\\localhost\\Service\\Auth\\CredSSP\"\nSet-Variable credSSPClientPath -Option Constant -Value \"WSMan:\\localhost\\Client\\Auth\\CredSSP\"\n$credSSPServerEnabled = $false;\n$credSSPClientEnabled = $false;\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\nif ($credSSPServerService) {\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\n}\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\nif ($credSSPClientService) {\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\n}\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\n}\nfunction isHyperVRoleInstalled() {\n$vmmsService = Get-Service -Name \"VMMS\" -ErrorAction SilentlyContinue\nreturn $vmmsService -and $vmmsService.Name -eq \"VMMS\"\n}\nfunction isHyperVPowerShellSupportInstalled() {\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\n}\nfunction isWMF5Installed([string] $operatingSystemVersion) {\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \u002710.0\u0027) # And Windows 10 client SKUs\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \u00276.2\u0027)\n$version = convertOsVersion $operatingSystemVersion\nif (-not $version) {\nreturn $false\n}\nif ($version -ge $Server2016) {\nreturn $true\n}\nelse {\nif ($version -ge $Server2012) {\n$registryKey = \u0027HKLM:\\SOFTWARE\\Microsoft\\PowerShell\\3\\PowerShellEngine\u0027\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\nif ($installedWmfVersion -ge [Version]\u00275.0\u0027) {\nreturn $true\n}\n}\n}\n}\nreturn $false\n}\nfunction isUserAnAdministrator() {\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \"Administrator\")\n}\nfunction getClusterInformation() {\n$returnValues = @{ }\n$returnValues.IsS2dEnabled = $false\n$returnValues.IsCluster = $false\n$returnValues.ClusterFqdn = $null\n$returnValues.IsBritannicaEnabled = $false\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\nif ($namespace) {\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\nif ($cluster) {\n$returnValues.IsCluster = $true\n$returnValues.ClusterFqdn = $cluster.Fqdn\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \"S2DEnabled\") -and ($cluster.S2DEnabled -gt 0)\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\n}\n}\nreturn $returnValues\n}\nfunction getComputerFqdnAndAddress($computerName) {\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\n$addressList = @()\nforeach ($item in $hostEntry.AddressList) {\n$address = New-Object PSObject\n$address | Add-Member -MemberType NoteProperty -Name \u0027IpAddress\u0027 -Value $item.ToString()\n$address | Add-Member -MemberType NoteProperty -Name \u0027AddressFamily\u0027 -Value $item.AddressFamily.ToString()\n$addressList += $address\n}\n$result = New-Object PSObject\n$result | Add-Member -MemberType NoteProperty -Name \u0027Fqdn\u0027 -Value $hostEntry.HostName\n$result | Add-Member -MemberType NoteProperty -Name \u0027AddressList\u0027 -Value $addressList\nreturn $result\n}\nfunction getHostFqdnAndAddress($computerSystem) {\n$computerName = $computerSystem.DNSHostName\nif (!$computerName) {\n$computerName = $computerSystem.Name\n}\nreturn getComputerFqdnAndAddress $computerName\n}\nfunction getManagementToolsSupportInformation() {\n$returnValues = @{ }\n$returnValues.ManagementToolsAvailable = $false\n$returnValues.ServerManagerAvailable = $false\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\nif ($namespaces) {\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \"ManagementTools\" })\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \"ServerManager\" })\n}\nreturn $returnValues\n}\nfunction isRemoteAppEnabled() {\nSet-Variable key -Option Constant -Value \"HKLM:\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\TSAppAllowList\"\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\nif (-not $registryKeyValue) {\nreturn $false\n}\nreturn $registryKeyValue.fDisabledAllowList -eq 1\n}\nfunction getOperatingSystemInfo() {\n$operatingSystemInfo = Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime\n$currentVersion = Get-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\" | Microsoft.PowerShell.Utility\\Select-Object CurrentBuild, UBR, DisplayVersion\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name CurrentBuild -Value $currentVersion.CurrentBuild\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name UpdateBuildRevision -Value $currentVersion.UBR\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name DisplayVersion -Value $currentVersion.DisplayVersion\nreturn $operatingSystemInfo\n}\nfunction getComputerSystemInfo() {\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\nMicrosoft.PowerShell.Utility\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\n}\nfunction getSmbiosData($computerSystem) {\n$ChassisTypes =\n@{\n1 = \u0027Other\u0027\n2 = \u0027Unknown\u0027\n3 = \u0027Desktop\u0027\n4 = \u0027Low Profile Desktop\u0027\n5 = \u0027Pizza Box\u0027\n6 = \u0027Mini Tower\u0027\n7 = \u0027Tower\u0027\n8 = \u0027Portable\u0027\n9 = \u0027Laptop\u0027\n10 = \u0027Notebook\u0027\n11 = \u0027Hand Held\u0027\n12 = \u0027Docking Station\u0027\n13 = \u0027All in One\u0027\n14 = \u0027Sub Notebook\u0027\n15 = \u0027Space-Saving\u0027\n16 = \u0027Lunch Box\u0027\n17 = \u0027Main System Chassis\u0027\n18 = \u0027Expansion Chassis\u0027\n19 = \u0027SubChassis\u0027\n20 = \u0027Bus Expansion Chassis\u0027\n21 = \u0027Peripheral Chassis\u0027\n22 = \u0027Storage Chassis\u0027\n23 = \u0027Rack Mount Chassis\u0027\n24 = \u0027Sealed-Case PC\u0027\n25 = \u0027Multi-system chassis\u0027\n26 = \u0027Compact PCI\u0027\n27 = \u0027Advanced TCA\u0027\n28 = \u0027Blade\u0027\n29 = \u0027Blade Enclosure\u0027\n30 = \u0027Tablet\u0027\n31 = \u0027Convertible\u0027\n32 = \u0027Detachable\u0027\n33 = \u0027IoT Gateway\u0027\n34 = \u0027Embedded PC\u0027\n35 = \u0027Mini PC\u0027\n36 = \u0027Stick PC\u0027\n}\n$list = New-Object System.Collections.ArrayList\n$win32_Bios = Get-CimInstance -class Win32_Bios\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\n$obj.SerialNumber = $win32_Bios.SerialNumber\n$obj.Manufacturer = $win32_Bios.Manufacturer\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\nif ($null -ne $computerSystemProduct) {\n$obj.UUID = $computerSystemProduct.UUID\n}\n$baseboard = Get-CimInstance Win32_BaseBoard\nif ($null -ne $baseboard) {\n$obj.BaseBoardProduct = $baseboard.Product\n}\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\nif ($null -ne $systemEnclosure) {\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\n}\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\Select-Object -ExpandProperty ChassisTypes\n$obj.Chassis = New-Object -TypeName \u0027System.Collections.ArrayList\u0027\n$obj.ChassisTypes | ForEach-Object -Process {\n$obj.Chassis.Add($ChassisTypes[[int]$_])\n}\n$obj.SystemFamily = $computerSystem.SystemFamily\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\n$list.Add($obj) | Out-Null\nreturn $list\n}\n$operatingSystem = getOperatingSystemInfo\n$computerSystem = getComputerSystemInfo\n$isAdministrator = isUserAnAdministrator\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\n$hostname = [Environment]::MachineName\n$netbios = $env:ComputerName\n$managementToolsInformation = getManagementToolsSupportInformation\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\n$isHyperVRoleInstalled = isHyperVRoleInstalled\n$isCredSSPEnabled = isCredSSPEnabled\n$isRemoteAppEnabled = isRemoteAppEnabled\n$smbiosData = getSmbiosData $computerSystem\n$result = New-Object PSObject\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsAdministrator\u0027 -Value $isAdministrator\n$result | Add-Member -MemberType NoteProperty -Name \u0027OperatingSystem\u0027 -Value $operatingSystem\n$result | Add-Member -MemberType NoteProperty -Name \u0027ComputerSystem\u0027 -Value $computerSystem\n$result | Add-Member -MemberType NoteProperty -Name \u0027Fqdn\u0027 -Value $fqdnAndAddress.Fqdn\n$result | Add-Member -MemberType NoteProperty -Name \u0027AddressList\u0027 -Value $fqdnAndAddress.AddressList\n$result | Add-Member -MemberType NoteProperty -Name \u0027Hostname\u0027 -Value $hostname\n$result | Add-Member -MemberType NoteProperty -Name \u0027NetBios\u0027 -Value $netbios\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsManagementToolsAvailable\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsServerManagerAvailable\u0027 -Value $managementToolsInformation.ServerManagerAvailable\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsWmfInstalled\u0027 -Value $isWmfInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsCluster\u0027 -Value $clusterInformation.IsCluster\n$result | Add-Member -MemberType NoteProperty -Name \u0027ClusterFqdn\u0027 -Value $clusterInformation.ClusterFqdn\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsS2dEnabled\u0027 -Value $clusterInformation.IsS2dEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsBritannicaEnabled\u0027 -Value $clusterInformation.IsBritannicaEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsHyperVRoleInstalled\u0027 -Value $isHyperVRoleInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsHyperVPowershellInstalled\u0027 -Value $isHyperVPowershellInstalled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsCredSSPEnabled\u0027 -Value $isCredSSPEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027IsRemoteAppEnabled\u0027 -Value $isRemoteAppEnabled\n$result | Add-Member -MemberType NoteProperty -Name \u0027SmbiosData\u0027 -Value $smbiosData\n$result\n"
55
55
  };
56
56
  })(PowerShellScripts || (PowerShellScripts = {}));
57
57
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/generated/powershell-scripts.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;GAGG;AACH,MAAM,KAAQ,iBAAiB,CAkD9B;AAlDD,WAAc,iBAAiB;IAC3B,YAAY,CAAA;IAEC,wBAAM,GAAG,qBAAqB,CAAC;IAC/B,8BAAY,GAAG,cAAc,CAAC;IAC9B,kCAAgB,GAAG,OAAO,CAAC;IAC3B,uCAAqB,GAAG;QACjC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,q/BAAq/B;KAChgC,CAAA;IACY,6BAAW,GAAG;QACvB,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,oGAAoG;KAC/G,CAAA;IACY,2CAAyB,GAAG;QACrC,OAAO,EAAE,2BAA2B;QACpC,MAAM,EAAE,2wBAA2wB;KACtxB,CAAA;IACY,yCAAuB,GAAG;QACnC,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,+5BAA+5B;KAC16B,CAAA;IACY,yCAAuB,GAAG;QACnC,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,yJAAyJ;KACpK,CAAA;IACY,4CAA0B,GAAG;QACtC,OAAO,EAAE,4BAA4B;QACrC,MAAM,EAAE,kKAAkK;KAC7K,CAAA;IACY,4CAA0B,GAAG;QACtC,OAAO,EAAE,4BAA4B;QACrC,MAAM,EAAE,kKAAkK;KAC7K,CAAA;IACY,uCAAqB,GAAG;QACjC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,mJAAmJ;KAC9J,CAAA;IACY,sCAAoB,GAAG;QAChC,OAAO,EAAE,sBAAsB;QAC/B,MAAM,EAAE,+iHAA+iH;KAC1jH,CAAA;IACY,kCAAgB,GAAG;QAC5B,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,krGAAkrG;KAC7rG,CAAA;IACY,qCAAmB,GAAG;QAC/B,OAAO,EAAE,qBAAqB;QAC9B,MAAM,EAAE,m4VAAm4V;KAC94V,CAAA;AACL,CAAC,EAlDa,iBAAiB,KAAjB,iBAAiB,QAkD9B","file":"powershell-scripts.js","sourcesContent":["/* tslint:disable */\r\n/**\r\n * @file Source code generated by gulp-ps-code.\r\n * @version 1.1\r\n */\r\nexport module PowerShellScripts {\r\n 'use strict'\r\n\r\n export const module = 'Microsoft.SME.Shell';\r\n export const resourceName = 'MsftSmeShell';\r\n export const powerShellPrefix = 'WACSH';\r\n export const Start_ScheduledReboot = {\r\n command: 'Start-ScheduledReboot',\r\n script: \"##Start-ScheduledReboot##:Start-ScheduledReboot.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[bool]$restartlater,\\n[Parameter(Mandatory = $false)]\\n[String]$restartTime,\\n[Parameter(Mandatory = $false)]\\n[String]$restartReason,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMajor,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMinor\\n)\\n$waitTime = 5\\nif ($restartlater -and -not($restartTime)) {\\n$waitTime = 30\\n} elseif ($restartTime) {\\n$waitTime = [decimal]::round(((Get-Date $restartTime) - (Get-Date)).TotalSeconds);\\nif ($waitTime -gt (315360000 - 30)) {\\nTHROW \\\"Invalid restart time $restartTime. The valid range is 0-315360000s (10 years), with a default of 30\\\"\\n}\\n}\\nif ($waitTime -lt 5 ) {\\n$waitTime = 5\\n}\\n$command = \\\"Shutdown /r /t $waitTime\\\"\\nif ($restartReason -and ($reasonNumberMajor -ne $null) -and ($reasonNumberMinor -ne $null)) {\\n$command += \\\" /d ${restartReason}:${reasonNumberMajor}:${reasonNumberMinor}\\\"\\n}\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Stop_Reboot = {\r\n command: 'Stop-Reboot',\r\n script: \"##Stop-Reboot##:Stop-Reboot.ps1\\n$command = \\\"Shutdown /a\\\"\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Get_DecryptedDataFromNode = {\r\n command: 'Get-DecryptedDataFromNode',\r\n script: \"##Get-DecryptedDataFromNode##:Get-DecryptedDataFromNode.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[String]\\n$encryptedData\\n)\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction DecryptDataWithJWKOnNode {\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue) {\\n$rsaProvider = (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n$decryptedBytes = $rsaProvider.Decrypt([Convert]::FromBase64String($encryptedData), [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA1)\\nreturn [System.Text.Encoding]::UTF8.GetString($decryptedBytes)\\n}\\nthrow [System.InvalidOperationException] \\\"Password decryption failed. RSACryptoServiceProvider Instance not found\\\"\\n}\\n\"\r\n }\r\n export const Get_EncryptionJWKOnNode = {\r\n command: 'Get-EncryptionJWKOnNode',\r\n script: \"##Get-EncryptionJWKOnNode##:Get-EncryptionJWKOnNode.ps1\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction Get-RSAProvider\\n{\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue)\\n{\\nreturn (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n}\\n$Global:RSA = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 4096\\nreturn $RSA\\n}\\nfunction Get-JsonWebKey\\n{\\n$rsaProvider = Get-RSAProvider\\n$parameters = $rsaProvider.ExportParameters($false)\\nreturn [PSCustomObject]@{\\nkty = \\u0027RSA\\u0027\\nalg = \\u0027RSA-OAEP\\u0027\\ne = [Convert]::ToBase64String($parameters.Exponent)\\nn = [Convert]::ToBase64String($parameters.Modulus).TrimEnd(\\u0027=\\u0027).Replace(\\u0027+\\u0027, \\u0027-\\u0027).Replace(\\u0027/\\u0027, \\u0027_\\u0027)\\n}\\n}\\n$jwk = Get-JsonWebKey\\nConvertTo-Json $jwk -Compress\\n\"\r\n }\r\n export const Get_CimWin32LogicalDisk = {\r\n command: 'Get-CimWin32LogicalDisk',\r\n script: \"##Get-CimWin32LogicalDisk##:Get-CimWin32LogicalDisk.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_LogicalDisk\\n\"\r\n }\r\n export const Get_CimWin32NetworkAdapter = {\r\n command: 'Get-CimWin32NetworkAdapter',\r\n script: \"##Get-CimWin32NetworkAdapter##:Get-CimWin32NetworkAdapter.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_NetworkAdapter\\n\"\r\n }\r\n export const Get_CimWin32PhysicalMemory = {\r\n command: 'Get-CimWin32PhysicalMemory',\r\n script: \"##Get-CimWin32PhysicalMemory##:Get-CimWin32PhysicalMemory.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_PhysicalMemory\\n\"\r\n }\r\n export const Get_CimWin32Processor = {\r\n command: 'Get-CimWin32Processor',\r\n script: \"##Get-CimWin32Processor##:Get-CimWin32Processor.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_Processor\\n\"\r\n }\r\n export const Get_ClusterInventory = {\r\n command: 'Get-ClusterInventory',\r\n script: \"##Get-ClusterInventory##:Get-ClusterInventory.ps1\\nImport-Module CimCmdlets -ErrorAction SilentlyContinue\\nImport-Module FailoverClusters -ErrorAction SilentlyContinue\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction getComputerName() {\\n$computerSystem = Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object Name, DNSHostName\\nif ($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif ($null -eq $computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn $computerName\\n}\\nreturn $null\\n}\\nfunction getIsClusterCmdletAvailable() {\\n$cmdlet = Get-Command \\\"Get-Cluster\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getClusterCimInstance() {\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Cluster -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object fqdn, S2DEnabled\\n}\\nreturn $null\\n}\\nfunction getClusterPerformanceHistoryPath() {\\nreturn $null -ne (Get-StorageSubSystem clus* | Get-StorageHealthSetting -Name \\\"System.PerformanceHistory.Path\\\")\\n}\\nfunction getClusterInfo() {\\n$returnValues = @{}\\n$returnValues.Fqdn = $null\\n$returnValues.isS2DEnabled = $false\\n$returnValues.isTsdbEnabled = $false\\n$cluster = getClusterCimInstance\\nif ($cluster) {\\n$returnValues.Fqdn = $cluster.fqdn\\n$isS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -eq 1)\\n$returnValues.isS2DEnabled = $isS2dEnabled\\nif ($isS2DEnabled) {\\n$returnValues.isTsdbEnabled = getClusterPerformanceHistoryPath\\n} else {\\n$returnValues.isTsdbEnabled = $false\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getisClusterHealthCmdletAvailable() {\\n$cmdlet = Get-Command -Name \\\"Get-HealthFault\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getIsBritannicaEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualMachineEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualMachine -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualSwitchEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualSwitch -ErrorAction SilentlyContinue)\\n}\\n$clusterInfo = getClusterInfo\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $clusterInfo.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2DEnabled\\u0027 -Value $clusterInfo.isS2DEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsTsdbEnabled\\u0027 -Value $clusterInfo.isTsdbEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterHealthCmdletAvailable\\u0027 -Value (getIsClusterHealthCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value (getIsBritannicaEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualMachineEnabled\\u0027 -Value (getIsBritannicaVirtualMachineEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualSwitchEnabled\\u0027 -Value (getIsBritannicaVirtualSwitchEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterCmdletAvailable\\u0027 -Value (getIsClusterCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027CurrentClusterNode\\u0027 -Value (getComputerName)\\n$result\\n\"\r\n }\r\n export const Get_ClusterNodes = {\r\n command: 'Get-ClusterNodes',\r\n script: \"##Get-ClusterNodes##:Get-ClusterNodes.ps1\\nimport-module CimCmdlets\\nimport-module FailoverClusters -ErrorAction SilentlyContinue\\nSet-Variable -Name LogName -Option Constant -Value \\\"Microsoft-ServerManagementExperience\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name LogSource -Option Constant -Value \\\"SMEScripts\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name ScriptName -Option Constant -Value $MyInvocation.ScriptName -ErrorAction SilentlyContinue\\nfunction getClusterPowerShellSupport() {\\n$cmdletInfo = Get-Command \\u0027Get-ClusterNode\\u0027 -ErrorAction SilentlyContinue\\nreturn $cmdletInfo -and $cmdletInfo.Name -eq \\\"Get-ClusterNode\\\"\\n}\\nfunction getClusterNodeCimInstances() {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Node -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object @{Name=\\\"DrainStatus\\\"; Expression={$_.NodeDrainStatus}}, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodePsInstances() {\\nreturn Get-ClusterNode -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object DrainStatus, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodeFqdn([string]$clusterNodeName) {\\nreturn ([System.Net.Dns]::GetHostEntry($clusterNodeName)).HostName\\n}\\nfunction writeToEventLog([string]$message) {\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Warning `\\n-Message $message -ErrorAction SilentlyContinue\\n}\\nfunction getClusterNodes() {\\n$isClusterCmdletAvailable = getClusterPowerShellSupport\\nif ($isClusterCmdletAvailable) {\\n$clusterNodes = getClusterNodePsInstances\\n} else {\\n$clusterNodes = getClusterNodeCimInstances\\n}\\n$clusterNodeMap = @{}\\nforeach ($clusterNode in $clusterNodes) {\\n$clusterNodeName = $clusterNode.Name.ToLower()\\ntry\\n{\\n$clusterNodeFqdn = getClusterNodeFqdn $clusterNodeName -ErrorAction SilentlyContinue\\n}\\ncatch\\n{\\n$clusterNodeFqdn = $clusterNodeName\\nwriteToEventLog \\\"[$ScriptName]: The fqdn for node \\u0027$clusterNodeName\\u0027 could not be obtained. Defaulting to machine name \\u0027$clusterNodeName\\u0027\\\"\\n}\\n$clusterNodeResult = New-Object PSObject\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FullyQualifiedDomainName\\u0027 -Value $clusterNodeFqdn\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027Name\\u0027 -Value $clusterNodeName\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DynamicWeight\\u0027 -Value $clusterNode.DynamicWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027NodeWeight\\u0027 -Value $clusterNode.NodeWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FaultDomain\\u0027 -Value $clusterNode.FaultDomain\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027State\\u0027 -Value $clusterNode.State\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DrainStatus\\u0027 -Value $clusterNode.DrainStatus\\n$clusterNodeMap.Add($clusterNodeName, $clusterNodeResult)\\n}\\nreturn $clusterNodeMap\\n}\\ngetClusterNodes\\n\"\r\n }\r\n export const Get_ServerInventory = {\r\n command: 'Get-ServerInventory',\r\n script: \"##Get-ServerInventory##:Get-ServerInventory.ps1\\nSet-StrictMode -Version 5.0\\nImport-Module CimCmdlets\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction convertOsVersion([string]$osVersion) {\\n[Ref]$parsedVersion = $null\\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\\nreturn $null\\n}\\n$version = [Version]$parsedVersion.Value\\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\\n}\\nfunction isCredSSPEnabled() {\\nSet-Variable credSSPServicePath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Service\\\\Auth\\\\CredSSP\\\"\\nSet-Variable credSSPClientPath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Client\\\\Auth\\\\CredSSP\\\"\\n$credSSPServerEnabled = $false;\\n$credSSPClientEnabled = $false;\\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\\nif ($credSSPServerService) {\\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\\n}\\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\\nif ($credSSPClientService) {\\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\\n}\\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\\n}\\nfunction isHyperVRoleInstalled() {\\n$vmmsService = Get-Service -Name \\\"VMMS\\\" -ErrorAction SilentlyContinue\\nreturn $vmmsService -and $vmmsService.Name -eq \\\"VMMS\\\"\\n}\\nfunction isHyperVPowerShellSupportInstalled() {\\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\\n}\\nfunction isWMF5Installed([string] $operatingSystemVersion) {\\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \\u002710.0\\u0027) # And Windows 10 client SKUs\\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \\u00276.2\\u0027)\\n$version = convertOsVersion $operatingSystemVersion\\nif (-not $version) {\\nreturn $false\\n}\\nif ($version -ge $Server2016) {\\nreturn $true\\n}\\nelse {\\nif ($version -ge $Server2012) {\\n$registryKey = \\u0027HKLM:\\\\SOFTWARE\\\\Microsoft\\\\PowerShell\\\\3\\\\PowerShellEngine\\u0027\\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\\nif ($installedWmfVersion -ge [Version]\\u00275.0\\u0027) {\\nreturn $true\\n}\\n}\\n}\\n}\\nreturn $false\\n}\\nfunction isUserAnAdministrator() {\\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \\\"Administrator\\\")\\n}\\nfunction getClusterInformation() {\\n$returnValues = @{ }\\n$returnValues.IsS2dEnabled = $false\\n$returnValues.IsCluster = $false\\n$returnValues.ClusterFqdn = $null\\n$returnValues.IsBritannicaEnabled = $false\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\\nif ($cluster) {\\n$returnValues.IsCluster = $true\\n$returnValues.ClusterFqdn = $cluster.Fqdn\\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -gt 0)\\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getComputerFqdnAndAddress($computerName) {\\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\\n$addressList = @()\\nforeach ($item in $hostEntry.AddressList) {\\n$address = New-Object PSObject\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027IpAddress\\u0027 -Value $item.ToString()\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027AddressFamily\\u0027 -Value $item.AddressFamily.ToString()\\n$addressList += $address\\n}\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $hostEntry.HostName\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $addressList\\nreturn $result\\n}\\nfunction getHostFqdnAndAddress($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif (!$computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn getComputerFqdnAndAddress $computerName\\n}\\nfunction getManagementToolsSupportInformation() {\\n$returnValues = @{ }\\n$returnValues.ManagementToolsAvailable = $false\\n$returnValues.ServerManagerAvailable = $false\\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespaces) {\\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ManagementTools\\\" })\\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ServerManager\\\" })\\n}\\nreturn $returnValues\\n}\\nfunction isRemoteAppEnabled() {\\nSet-Variable key -Option Constant -Value \\\"HKLM:\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows NT\\\\\\\\CurrentVersion\\\\\\\\Terminal Server\\\\\\\\TSAppAllowList\\\"\\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\\nif (-not $registryKeyValue) {\\nreturn $false\\n}\\nreturn $registryKeyValue.fDisabledAllowList -eq 1\\n}\\nfunction getOperatingSystemInfo() {\\nreturn Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime\\n}\\nfunction getComputerSystemInfo() {\\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\\n}\\nfunction getSmbiosData($computerSystem) {\\n$ChassisTypes =\\n@{\\n1 = \\u0027Other\\u0027\\n2 = \\u0027Unknown\\u0027\\n3 = \\u0027Desktop\\u0027\\n4 = \\u0027Low Profile Desktop\\u0027\\n5 = \\u0027Pizza Box\\u0027\\n6 = \\u0027Mini Tower\\u0027\\n7 = \\u0027Tower\\u0027\\n8 = \\u0027Portable\\u0027\\n9 = \\u0027Laptop\\u0027\\n10 = \\u0027Notebook\\u0027\\n11 = \\u0027Hand Held\\u0027\\n12 = \\u0027Docking Station\\u0027\\n13 = \\u0027All in One\\u0027\\n14 = \\u0027Sub Notebook\\u0027\\n15 = \\u0027Space-Saving\\u0027\\n16 = \\u0027Lunch Box\\u0027\\n17 = \\u0027Main System Chassis\\u0027\\n18 = \\u0027Expansion Chassis\\u0027\\n19 = \\u0027SubChassis\\u0027\\n20 = \\u0027Bus Expansion Chassis\\u0027\\n21 = \\u0027Peripheral Chassis\\u0027\\n22 = \\u0027Storage Chassis\\u0027\\n23 = \\u0027Rack Mount Chassis\\u0027\\n24 = \\u0027Sealed-Case PC\\u0027\\n25 = \\u0027Multi-system chassis\\u0027\\n26 = \\u0027Compact PCI\\u0027\\n27 = \\u0027Advanced TCA\\u0027\\n28 = \\u0027Blade\\u0027\\n29 = \\u0027Blade Enclosure\\u0027\\n30 = \\u0027Tablet\\u0027\\n31 = \\u0027Convertible\\u0027\\n32 = \\u0027Detachable\\u0027\\n33 = \\u0027IoT Gateway\\u0027\\n34 = \\u0027Embedded PC\\u0027\\n35 = \\u0027Mini PC\\u0027\\n36 = \\u0027Stick PC\\u0027\\n}\\n$list = New-Object System.Collections.ArrayList\\n$win32_Bios = Get-CimInstance -class Win32_Bios\\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\\n$obj.SerialNumber = $win32_Bios.SerialNumber\\n$obj.Manufacturer = $win32_Bios.Manufacturer\\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\\nif ($null -ne $computerSystemProduct) {\\n$obj.UUID = $computerSystemProduct.UUID\\n}\\n$baseboard = Get-CimInstance Win32_BaseBoard\\nif ($null -ne $baseboard) {\\n$obj.BaseBoardProduct = $baseboard.Product\\n}\\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\\nif ($null -ne $systemEnclosure) {\\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\\n}\\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\\\Select-Object -ExpandProperty ChassisTypes\\n$obj.Chassis = New-Object -TypeName \\u0027System.Collections.ArrayList\\u0027\\n$obj.ChassisTypes | ForEach-Object -Process {\\n$obj.Chassis.Add($ChassisTypes[[int]$_])\\n}\\n$obj.SystemFamily = $computerSystem.SystemFamily\\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\\n$list.Add($obj) | Out-Null\\nreturn $list\\n}\\n$operatingSystem = getOperatingSystemInfo\\n$computerSystem = getComputerSystemInfo\\n$isAdministrator = isUserAnAdministrator\\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\\n$hostname = [Environment]::MachineName\\n$netbios = $env:ComputerName\\n$managementToolsInformation = getManagementToolsSupportInformation\\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\\n$isHyperVRoleInstalled = isHyperVRoleInstalled\\n$isCredSSPEnabled = isCredSSPEnabled\\n$isRemoteAppEnabled = isRemoteAppEnabled\\n$smbiosData = getSmbiosData $computerSystem\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsAdministrator\\u0027 -Value $isAdministrator\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027OperatingSystem\\u0027 -Value $operatingSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ComputerSystem\\u0027 -Value $computerSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $fqdnAndAddress.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $fqdnAndAddress.AddressList\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Hostname\\u0027 -Value $hostname\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027NetBios\\u0027 -Value $netbios\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsManagementToolsAvailable\\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsServerManagerAvailable\\u0027 -Value $managementToolsInformation.ServerManagerAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsWmfInstalled\\u0027 -Value $isWmfInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCluster\\u0027 -Value $clusterInformation.IsCluster\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ClusterFqdn\\u0027 -Value $clusterInformation.ClusterFqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2dEnabled\\u0027 -Value $clusterInformation.IsS2dEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value $clusterInformation.IsBritannicaEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVRoleInstalled\\u0027 -Value $isHyperVRoleInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVPowershellInstalled\\u0027 -Value $isHyperVPowershellInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCredSSPEnabled\\u0027 -Value $isCredSSPEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsRemoteAppEnabled\\u0027 -Value $isRemoteAppEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027SmbiosData\\u0027 -Value $smbiosData\\n$result\\n\"\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/generated/powershell-scripts.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;GAGG;AACH,MAAM,KAAQ,iBAAiB,CAkD9B;AAlDD,WAAc,iBAAiB;IAC3B,YAAY,CAAA;IAEC,wBAAM,GAAG,qBAAqB,CAAC;IAC/B,8BAAY,GAAG,cAAc,CAAC;IAC9B,kCAAgB,GAAG,OAAO,CAAC;IAC3B,uCAAqB,GAAG;QACjC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,q/BAAq/B;KAChgC,CAAA;IACY,6BAAW,GAAG;QACvB,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,oGAAoG;KAC/G,CAAA;IACY,2CAAyB,GAAG;QACrC,OAAO,EAAE,2BAA2B;QACpC,MAAM,EAAE,2wBAA2wB;KACtxB,CAAA;IACY,yCAAuB,GAAG;QACnC,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,+5BAA+5B;KAC16B,CAAA;IACY,yCAAuB,GAAG;QACnC,OAAO,EAAE,yBAAyB;QAClC,MAAM,EAAE,yJAAyJ;KACpK,CAAA;IACY,4CAA0B,GAAG;QACtC,OAAO,EAAE,4BAA4B;QACrC,MAAM,EAAE,kKAAkK;KAC7K,CAAA;IACY,4CAA0B,GAAG;QACtC,OAAO,EAAE,4BAA4B;QACrC,MAAM,EAAE,kKAAkK;KAC7K,CAAA;IACY,uCAAqB,GAAG;QACjC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,mJAAmJ;KAC9J,CAAA;IACY,sCAAoB,GAAG;QAChC,OAAO,EAAE,sBAAsB;QAC/B,MAAM,EAAE,+iHAA+iH;KAC1jH,CAAA;IACY,kCAAgB,GAAG;QAC5B,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,krGAAkrG;KAC7rG,CAAA;IACY,qCAAmB,GAAG;QAC/B,OAAO,EAAE,qBAAqB;QAC9B,MAAM,EAAE,g8WAAg8W;KAC38W,CAAA;AACL,CAAC,EAlDa,iBAAiB,KAAjB,iBAAiB,QAkD9B","file":"powershell-scripts.js","sourcesContent":["/* tslint:disable */\r\n/**\r\n * @file Source code generated by gulp-ps-code.\r\n * @version 1.1\r\n */\r\nexport module PowerShellScripts {\r\n 'use strict'\r\n\r\n export const module = 'Microsoft.SME.Shell';\r\n export const resourceName = 'MsftSmeShell';\r\n export const powerShellPrefix = 'WACSH';\r\n export const Start_ScheduledReboot = {\r\n command: 'Start-ScheduledReboot',\r\n script: \"##Start-ScheduledReboot##:Start-ScheduledReboot.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[bool]$restartlater,\\n[Parameter(Mandatory = $false)]\\n[String]$restartTime,\\n[Parameter(Mandatory = $false)]\\n[String]$restartReason,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMajor,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMinor\\n)\\n$waitTime = 5\\nif ($restartlater -and -not($restartTime)) {\\n$waitTime = 30\\n} elseif ($restartTime) {\\n$waitTime = [decimal]::round(((Get-Date $restartTime) - (Get-Date)).TotalSeconds);\\nif ($waitTime -gt (315360000 - 30)) {\\nTHROW \\\"Invalid restart time $restartTime. The valid range is 0-315360000s (10 years), with a default of 30\\\"\\n}\\n}\\nif ($waitTime -lt 5 ) {\\n$waitTime = 5\\n}\\n$command = \\\"Shutdown /r /t $waitTime\\\"\\nif ($restartReason -and ($reasonNumberMajor -ne $null) -and ($reasonNumberMinor -ne $null)) {\\n$command += \\\" /d ${restartReason}:${reasonNumberMajor}:${reasonNumberMinor}\\\"\\n}\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Stop_Reboot = {\r\n command: 'Stop-Reboot',\r\n script: \"##Stop-Reboot##:Stop-Reboot.ps1\\n$command = \\\"Shutdown /a\\\"\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Get_DecryptedDataFromNode = {\r\n command: 'Get-DecryptedDataFromNode',\r\n script: \"##Get-DecryptedDataFromNode##:Get-DecryptedDataFromNode.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[String]\\n$encryptedData\\n)\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction DecryptDataWithJWKOnNode {\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue) {\\n$rsaProvider = (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n$decryptedBytes = $rsaProvider.Decrypt([Convert]::FromBase64String($encryptedData), [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA1)\\nreturn [System.Text.Encoding]::UTF8.GetString($decryptedBytes)\\n}\\nthrow [System.InvalidOperationException] \\\"Password decryption failed. RSACryptoServiceProvider Instance not found\\\"\\n}\\n\"\r\n }\r\n export const Get_EncryptionJWKOnNode = {\r\n command: 'Get-EncryptionJWKOnNode',\r\n script: \"##Get-EncryptionJWKOnNode##:Get-EncryptionJWKOnNode.ps1\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction Get-RSAProvider\\n{\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue)\\n{\\nreturn (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n}\\n$Global:RSA = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 4096\\nreturn $RSA\\n}\\nfunction Get-JsonWebKey\\n{\\n$rsaProvider = Get-RSAProvider\\n$parameters = $rsaProvider.ExportParameters($false)\\nreturn [PSCustomObject]@{\\nkty = \\u0027RSA\\u0027\\nalg = \\u0027RSA-OAEP\\u0027\\ne = [Convert]::ToBase64String($parameters.Exponent)\\nn = [Convert]::ToBase64String($parameters.Modulus).TrimEnd(\\u0027=\\u0027).Replace(\\u0027+\\u0027, \\u0027-\\u0027).Replace(\\u0027/\\u0027, \\u0027_\\u0027)\\n}\\n}\\n$jwk = Get-JsonWebKey\\nConvertTo-Json $jwk -Compress\\n\"\r\n }\r\n export const Get_CimWin32LogicalDisk = {\r\n command: 'Get-CimWin32LogicalDisk',\r\n script: \"##Get-CimWin32LogicalDisk##:Get-CimWin32LogicalDisk.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_LogicalDisk\\n\"\r\n }\r\n export const Get_CimWin32NetworkAdapter = {\r\n command: 'Get-CimWin32NetworkAdapter',\r\n script: \"##Get-CimWin32NetworkAdapter##:Get-CimWin32NetworkAdapter.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_NetworkAdapter\\n\"\r\n }\r\n export const Get_CimWin32PhysicalMemory = {\r\n command: 'Get-CimWin32PhysicalMemory',\r\n script: \"##Get-CimWin32PhysicalMemory##:Get-CimWin32PhysicalMemory.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_PhysicalMemory\\n\"\r\n }\r\n export const Get_CimWin32Processor = {\r\n command: 'Get-CimWin32Processor',\r\n script: \"##Get-CimWin32Processor##:Get-CimWin32Processor.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_Processor\\n\"\r\n }\r\n export const Get_ClusterInventory = {\r\n command: 'Get-ClusterInventory',\r\n script: \"##Get-ClusterInventory##:Get-ClusterInventory.ps1\\nImport-Module CimCmdlets -ErrorAction SilentlyContinue\\nImport-Module FailoverClusters -ErrorAction SilentlyContinue\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction getComputerName() {\\n$computerSystem = Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object Name, DNSHostName\\nif ($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif ($null -eq $computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn $computerName\\n}\\nreturn $null\\n}\\nfunction getIsClusterCmdletAvailable() {\\n$cmdlet = Get-Command \\\"Get-Cluster\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getClusterCimInstance() {\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Cluster -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object fqdn, S2DEnabled\\n}\\nreturn $null\\n}\\nfunction getClusterPerformanceHistoryPath() {\\nreturn $null -ne (Get-StorageSubSystem clus* | Get-StorageHealthSetting -Name \\\"System.PerformanceHistory.Path\\\")\\n}\\nfunction getClusterInfo() {\\n$returnValues = @{}\\n$returnValues.Fqdn = $null\\n$returnValues.isS2DEnabled = $false\\n$returnValues.isTsdbEnabled = $false\\n$cluster = getClusterCimInstance\\nif ($cluster) {\\n$returnValues.Fqdn = $cluster.fqdn\\n$isS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -eq 1)\\n$returnValues.isS2DEnabled = $isS2dEnabled\\nif ($isS2DEnabled) {\\n$returnValues.isTsdbEnabled = getClusterPerformanceHistoryPath\\n} else {\\n$returnValues.isTsdbEnabled = $false\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getisClusterHealthCmdletAvailable() {\\n$cmdlet = Get-Command -Name \\\"Get-HealthFault\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getIsBritannicaEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualMachineEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualMachine -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualSwitchEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualSwitch -ErrorAction SilentlyContinue)\\n}\\n$clusterInfo = getClusterInfo\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $clusterInfo.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2DEnabled\\u0027 -Value $clusterInfo.isS2DEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsTsdbEnabled\\u0027 -Value $clusterInfo.isTsdbEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterHealthCmdletAvailable\\u0027 -Value (getIsClusterHealthCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value (getIsBritannicaEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualMachineEnabled\\u0027 -Value (getIsBritannicaVirtualMachineEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualSwitchEnabled\\u0027 -Value (getIsBritannicaVirtualSwitchEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterCmdletAvailable\\u0027 -Value (getIsClusterCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027CurrentClusterNode\\u0027 -Value (getComputerName)\\n$result\\n\"\r\n }\r\n export const Get_ClusterNodes = {\r\n command: 'Get-ClusterNodes',\r\n script: \"##Get-ClusterNodes##:Get-ClusterNodes.ps1\\nimport-module CimCmdlets\\nimport-module FailoverClusters -ErrorAction SilentlyContinue\\nSet-Variable -Name LogName -Option Constant -Value \\\"Microsoft-ServerManagementExperience\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name LogSource -Option Constant -Value \\\"SMEScripts\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name ScriptName -Option Constant -Value $MyInvocation.ScriptName -ErrorAction SilentlyContinue\\nfunction getClusterPowerShellSupport() {\\n$cmdletInfo = Get-Command \\u0027Get-ClusterNode\\u0027 -ErrorAction SilentlyContinue\\nreturn $cmdletInfo -and $cmdletInfo.Name -eq \\\"Get-ClusterNode\\\"\\n}\\nfunction getClusterNodeCimInstances() {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Node -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object @{Name=\\\"DrainStatus\\\"; Expression={$_.NodeDrainStatus}}, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodePsInstances() {\\nreturn Get-ClusterNode -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object DrainStatus, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodeFqdn([string]$clusterNodeName) {\\nreturn ([System.Net.Dns]::GetHostEntry($clusterNodeName)).HostName\\n}\\nfunction writeToEventLog([string]$message) {\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Warning `\\n-Message $message -ErrorAction SilentlyContinue\\n}\\nfunction getClusterNodes() {\\n$isClusterCmdletAvailable = getClusterPowerShellSupport\\nif ($isClusterCmdletAvailable) {\\n$clusterNodes = getClusterNodePsInstances\\n} else {\\n$clusterNodes = getClusterNodeCimInstances\\n}\\n$clusterNodeMap = @{}\\nforeach ($clusterNode in $clusterNodes) {\\n$clusterNodeName = $clusterNode.Name.ToLower()\\ntry\\n{\\n$clusterNodeFqdn = getClusterNodeFqdn $clusterNodeName -ErrorAction SilentlyContinue\\n}\\ncatch\\n{\\n$clusterNodeFqdn = $clusterNodeName\\nwriteToEventLog \\\"[$ScriptName]: The fqdn for node \\u0027$clusterNodeName\\u0027 could not be obtained. Defaulting to machine name \\u0027$clusterNodeName\\u0027\\\"\\n}\\n$clusterNodeResult = New-Object PSObject\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FullyQualifiedDomainName\\u0027 -Value $clusterNodeFqdn\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027Name\\u0027 -Value $clusterNodeName\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DynamicWeight\\u0027 -Value $clusterNode.DynamicWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027NodeWeight\\u0027 -Value $clusterNode.NodeWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FaultDomain\\u0027 -Value $clusterNode.FaultDomain\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027State\\u0027 -Value $clusterNode.State\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DrainStatus\\u0027 -Value $clusterNode.DrainStatus\\n$clusterNodeMap.Add($clusterNodeName, $clusterNodeResult)\\n}\\nreturn $clusterNodeMap\\n}\\ngetClusterNodes\\n\"\r\n }\r\n export const Get_ServerInventory = {\r\n command: 'Get-ServerInventory',\r\n script: \"##Get-ServerInventory##:Get-ServerInventory.ps1\\nSet-StrictMode -Version 5.0\\nImport-Module CimCmdlets\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction convertOsVersion([string]$osVersion) {\\n[Ref]$parsedVersion = $null\\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\\nreturn $null\\n}\\n$version = [Version]$parsedVersion.Value\\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\\n}\\nfunction isCredSSPEnabled() {\\nSet-Variable credSSPServicePath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Service\\\\Auth\\\\CredSSP\\\"\\nSet-Variable credSSPClientPath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Client\\\\Auth\\\\CredSSP\\\"\\n$credSSPServerEnabled = $false;\\n$credSSPClientEnabled = $false;\\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\\nif ($credSSPServerService) {\\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\\n}\\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\\nif ($credSSPClientService) {\\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\\n}\\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\\n}\\nfunction isHyperVRoleInstalled() {\\n$vmmsService = Get-Service -Name \\\"VMMS\\\" -ErrorAction SilentlyContinue\\nreturn $vmmsService -and $vmmsService.Name -eq \\\"VMMS\\\"\\n}\\nfunction isHyperVPowerShellSupportInstalled() {\\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\\n}\\nfunction isWMF5Installed([string] $operatingSystemVersion) {\\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \\u002710.0\\u0027) # And Windows 10 client SKUs\\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \\u00276.2\\u0027)\\n$version = convertOsVersion $operatingSystemVersion\\nif (-not $version) {\\nreturn $false\\n}\\nif ($version -ge $Server2016) {\\nreturn $true\\n}\\nelse {\\nif ($version -ge $Server2012) {\\n$registryKey = \\u0027HKLM:\\\\SOFTWARE\\\\Microsoft\\\\PowerShell\\\\3\\\\PowerShellEngine\\u0027\\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\\nif ($installedWmfVersion -ge [Version]\\u00275.0\\u0027) {\\nreturn $true\\n}\\n}\\n}\\n}\\nreturn $false\\n}\\nfunction isUserAnAdministrator() {\\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \\\"Administrator\\\")\\n}\\nfunction getClusterInformation() {\\n$returnValues = @{ }\\n$returnValues.IsS2dEnabled = $false\\n$returnValues.IsCluster = $false\\n$returnValues.ClusterFqdn = $null\\n$returnValues.IsBritannicaEnabled = $false\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\\nif ($cluster) {\\n$returnValues.IsCluster = $true\\n$returnValues.ClusterFqdn = $cluster.Fqdn\\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -gt 0)\\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getComputerFqdnAndAddress($computerName) {\\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\\n$addressList = @()\\nforeach ($item in $hostEntry.AddressList) {\\n$address = New-Object PSObject\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027IpAddress\\u0027 -Value $item.ToString()\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027AddressFamily\\u0027 -Value $item.AddressFamily.ToString()\\n$addressList += $address\\n}\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $hostEntry.HostName\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $addressList\\nreturn $result\\n}\\nfunction getHostFqdnAndAddress($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif (!$computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn getComputerFqdnAndAddress $computerName\\n}\\nfunction getManagementToolsSupportInformation() {\\n$returnValues = @{ }\\n$returnValues.ManagementToolsAvailable = $false\\n$returnValues.ServerManagerAvailable = $false\\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespaces) {\\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ManagementTools\\\" })\\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ServerManager\\\" })\\n}\\nreturn $returnValues\\n}\\nfunction isRemoteAppEnabled() {\\nSet-Variable key -Option Constant -Value \\\"HKLM:\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows NT\\\\\\\\CurrentVersion\\\\\\\\Terminal Server\\\\\\\\TSAppAllowList\\\"\\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\\nif (-not $registryKeyValue) {\\nreturn $false\\n}\\nreturn $registryKeyValue.fDisabledAllowList -eq 1\\n}\\nfunction getOperatingSystemInfo() {\\n$operatingSystemInfo = Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime\\n$currentVersion = Get-ItemProperty -Path \\\"HKLM:\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\" | Microsoft.PowerShell.Utility\\\\Select-Object CurrentBuild, UBR, DisplayVersion\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name CurrentBuild -Value $currentVersion.CurrentBuild\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name UpdateBuildRevision -Value $currentVersion.UBR\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name DisplayVersion -Value $currentVersion.DisplayVersion\\nreturn $operatingSystemInfo\\n}\\nfunction getComputerSystemInfo() {\\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\\n}\\nfunction getSmbiosData($computerSystem) {\\n$ChassisTypes =\\n@{\\n1 = \\u0027Other\\u0027\\n2 = \\u0027Unknown\\u0027\\n3 = \\u0027Desktop\\u0027\\n4 = \\u0027Low Profile Desktop\\u0027\\n5 = \\u0027Pizza Box\\u0027\\n6 = \\u0027Mini Tower\\u0027\\n7 = \\u0027Tower\\u0027\\n8 = \\u0027Portable\\u0027\\n9 = \\u0027Laptop\\u0027\\n10 = \\u0027Notebook\\u0027\\n11 = \\u0027Hand Held\\u0027\\n12 = \\u0027Docking Station\\u0027\\n13 = \\u0027All in One\\u0027\\n14 = \\u0027Sub Notebook\\u0027\\n15 = \\u0027Space-Saving\\u0027\\n16 = \\u0027Lunch Box\\u0027\\n17 = \\u0027Main System Chassis\\u0027\\n18 = \\u0027Expansion Chassis\\u0027\\n19 = \\u0027SubChassis\\u0027\\n20 = \\u0027Bus Expansion Chassis\\u0027\\n21 = \\u0027Peripheral Chassis\\u0027\\n22 = \\u0027Storage Chassis\\u0027\\n23 = \\u0027Rack Mount Chassis\\u0027\\n24 = \\u0027Sealed-Case PC\\u0027\\n25 = \\u0027Multi-system chassis\\u0027\\n26 = \\u0027Compact PCI\\u0027\\n27 = \\u0027Advanced TCA\\u0027\\n28 = \\u0027Blade\\u0027\\n29 = \\u0027Blade Enclosure\\u0027\\n30 = \\u0027Tablet\\u0027\\n31 = \\u0027Convertible\\u0027\\n32 = \\u0027Detachable\\u0027\\n33 = \\u0027IoT Gateway\\u0027\\n34 = \\u0027Embedded PC\\u0027\\n35 = \\u0027Mini PC\\u0027\\n36 = \\u0027Stick PC\\u0027\\n}\\n$list = New-Object System.Collections.ArrayList\\n$win32_Bios = Get-CimInstance -class Win32_Bios\\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\\n$obj.SerialNumber = $win32_Bios.SerialNumber\\n$obj.Manufacturer = $win32_Bios.Manufacturer\\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\\nif ($null -ne $computerSystemProduct) {\\n$obj.UUID = $computerSystemProduct.UUID\\n}\\n$baseboard = Get-CimInstance Win32_BaseBoard\\nif ($null -ne $baseboard) {\\n$obj.BaseBoardProduct = $baseboard.Product\\n}\\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\\nif ($null -ne $systemEnclosure) {\\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\\n}\\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\\\Select-Object -ExpandProperty ChassisTypes\\n$obj.Chassis = New-Object -TypeName \\u0027System.Collections.ArrayList\\u0027\\n$obj.ChassisTypes | ForEach-Object -Process {\\n$obj.Chassis.Add($ChassisTypes[[int]$_])\\n}\\n$obj.SystemFamily = $computerSystem.SystemFamily\\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\\n$list.Add($obj) | Out-Null\\nreturn $list\\n}\\n$operatingSystem = getOperatingSystemInfo\\n$computerSystem = getComputerSystemInfo\\n$isAdministrator = isUserAnAdministrator\\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\\n$hostname = [Environment]::MachineName\\n$netbios = $env:ComputerName\\n$managementToolsInformation = getManagementToolsSupportInformation\\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\\n$isHyperVRoleInstalled = isHyperVRoleInstalled\\n$isCredSSPEnabled = isCredSSPEnabled\\n$isRemoteAppEnabled = isRemoteAppEnabled\\n$smbiosData = getSmbiosData $computerSystem\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsAdministrator\\u0027 -Value $isAdministrator\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027OperatingSystem\\u0027 -Value $operatingSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ComputerSystem\\u0027 -Value $computerSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $fqdnAndAddress.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $fqdnAndAddress.AddressList\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Hostname\\u0027 -Value $hostname\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027NetBios\\u0027 -Value $netbios\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsManagementToolsAvailable\\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsServerManagerAvailable\\u0027 -Value $managementToolsInformation.ServerManagerAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsWmfInstalled\\u0027 -Value $isWmfInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCluster\\u0027 -Value $clusterInformation.IsCluster\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ClusterFqdn\\u0027 -Value $clusterInformation.ClusterFqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2dEnabled\\u0027 -Value $clusterInformation.IsS2dEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value $clusterInformation.IsBritannicaEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVRoleInstalled\\u0027 -Value $isHyperVRoleInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVPowershellInstalled\\u0027 -Value $isHyperVPowershellInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCredSSPEnabled\\u0027 -Value $isCredSSPEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsRemoteAppEnabled\\u0027 -Value $isRemoteAppEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027SmbiosData\\u0027 -Value $smbiosData\\n$result\\n\"\r\n }\r\n}\r\n"]}
@@ -350,6 +350,7 @@ export interface Strings {
350
350
  FileNotFound: string;
351
351
  OperationBlocked: string;
352
352
  Unknown: string;
353
+ UnknownNoMessage: string;
353
354
  };
354
355
  };
355
356
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/generated/strings.ts"],"names":[],"mappings":"AAieC,CAAC","file":"strings.js","sourcesContent":["/* tslint:disable */\n/**\n * @file Source code generated by gulp-resjson.\n * @version 1.0\n */\nexport interface Strings {\r\n MsftSmeShell: {\r\n Core: {\r\n Error: {\r\n ArgumentNullError: {\r\n message: string;\r\n };\r\n ArgumentError: {\r\n message: string;\r\n };\r\n UnknownBrowser: {\r\n message: string;\r\n };\r\n GatewayNameRequired: {\r\n message: string;\r\n };\r\n NoResponseError: {\r\n message: string;\r\n };\r\n NoCode: {\r\n message: string;\r\n };\r\n PowerShellUnableSessionClose: {\r\n message: string;\r\n };\r\n PowerShellUnableCancelCommand: {\r\n message: string;\r\n };\r\n QueryCacheFetchOrder: {\r\n message: string;\r\n };\r\n QueryCacheFetchErrorOnce: {\r\n message: string;\r\n };\r\n QueryCacheRefreshOrder: {\r\n message: string;\r\n };\r\n QueryCacheRefreshErrorOnce: {\r\n message: string;\r\n };\r\n QueryCacheRecoverNoCachedResource: {\r\n message: string;\r\n };\r\n QueryCacheRecoverMissingRecoveryOption: {\r\n message: string;\r\n };\r\n ResourceCacheUnableFind: {\r\n message: string;\r\n };\r\n LoggingUnableSubmit: {\r\n message: string;\r\n };\r\n EnvironmentNotInitialized: {\r\n message: string;\r\n };\r\n EnvironmentMissingDefault: {\r\n message: string;\r\n };\r\n NotificationRpcInitialization: {\r\n message: string;\r\n };\r\n NotificationUnsupportedState: {\r\n message: string;\r\n };\r\n NotificationEmptyMessage: {\r\n message: string;\r\n };\r\n NotificationNoWorkItemFound: {\r\n message: string;\r\n };\r\n NotificationUnexpectedReceived: {\r\n message: string;\r\n };\r\n NotificationWebsocketInitialize: {\r\n message: string;\r\n };\r\n NotificationNoIdFound: {\r\n message: string;\r\n };\r\n RpcTypeNoMatch: {\r\n message: string;\r\n };\r\n RpcNotFoundModule: {\r\n message: string;\r\n };\r\n RpcTargetWindowNotConfigured: {\r\n message: string;\r\n };\r\n RpcExpiredRetry: {\r\n message: string;\r\n };\r\n RpcExpired: {\r\n message: string;\r\n };\r\n RpcSignatureError: {\r\n message: string;\r\n };\r\n RpcUnexpectedDestination: {\r\n message: string;\r\n };\r\n RpcUnexpectedEvent: {\r\n message: string;\r\n };\r\n RpcUnexpectedSequence: {\r\n message: string;\r\n };\r\n RpcUnexpectedErrorSequence: {\r\n message: string;\r\n };\r\n RpcNotInitialized: {\r\n message: string;\r\n };\r\n RpcNotFountInbound: {\r\n message: string;\r\n };\r\n RpcTimeout: {\r\n message: string;\r\n };\r\n AddNativeErrorCode: {\r\n message: string;\r\n };\r\n RpcSubjectClosed: {\r\n message: string;\r\n };\r\n RpcNotRegisteredHandler: {\r\n message: string;\r\n };\r\n RpcFailedFindModuleManifest: {\r\n message: string;\r\n };\r\n ForwarderIdConflict: {\r\n message: string;\r\n };\r\n ForwarderIdNotFound: {\r\n message: string;\r\n };\r\n ForwarderUnknownType: {\r\n message: string;\r\n };\r\n InvalidValue: {\r\n message: string;\r\n };\r\n ServerListRetrieve: {\r\n message: string;\r\n };\r\n ServerListFailedSave: {\r\n message: string;\r\n };\r\n ConnectionStream: {\r\n message: string;\r\n };\r\n ExpectedSingleNode: {\r\n message: string;\r\n };\r\n ExpectedClusterNode: {\r\n message: string;\r\n };\r\n BatchConnection: {\r\n message: string;\r\n };\r\n BatchResponseParsing: {\r\n message: string;\r\n };\r\n BatchUnSupportedInvocation: {\r\n message: string;\r\n };\r\n GatewayUrlNotConfigured: {\r\n message: string;\r\n };\r\n GatewayUrlMalformed: {\r\n message: string;\r\n };\r\n ToolValidationResult: {\r\n message: string;\r\n };\r\n ToolValidationUnsupportedOperator: {\r\n message: string;\r\n };\r\n ToolValidationUnsupportedDataType: {\r\n message: string;\r\n };\r\n ToolValidationVersionFormat: {\r\n message: string;\r\n };\r\n ToolValidationInventoryError: {\r\n title: string;\r\n message: string;\r\n };\r\n ToolValidationGatewayInventoryError: {\r\n title: string;\r\n message: string;\r\n };\r\n PowerShellRunCommandFormat: {\r\n message: string;\r\n };\r\n PrefixFormat: {\r\n message: string;\r\n };\r\n };\r\n ErrorCode: {\r\n Code0: {\r\n message: string;\r\n };\r\n Code5: {\r\n message: string;\r\n };\r\n Code50: {\r\n message: string;\r\n };\r\n Code87: {\r\n message: string;\r\n };\r\n Code110: {\r\n message: string;\r\n };\r\n Code1323: {\r\n message: string;\r\n };\r\n Code1326: {\r\n message: string;\r\n };\r\n Code1355: {\r\n message: string;\r\n };\r\n Code2224: {\r\n message: string;\r\n };\r\n Code2691: {\r\n message: string;\r\n };\r\n Code2692: {\r\n message: string;\r\n };\r\n Code8004108: {\r\n message: string;\r\n };\r\n Translated: {\r\n message: string;\r\n };\r\n Generic: {\r\n message: string;\r\n };\r\n };\r\n ErrorFormat: {\r\n Single: {\r\n message: string;\r\n Details: {\r\n message: string;\r\n };\r\n };\r\n Multiple: {\r\n message: string;\r\n Details: {\r\n message: string;\r\n };\r\n };\r\n };\r\n Units: {\r\n MediaConversionFormat: {\r\n message: string;\r\n };\r\n MediaConversionUnknownFormat: {\r\n message: string;\r\n };\r\n MediaConversionB: {\r\n label: string;\r\n };\r\n MediaConversionKB: {\r\n label: string;\r\n };\r\n MediaConversionMB: {\r\n label: string;\r\n };\r\n MediaConversionGB: {\r\n label: string;\r\n };\r\n MediaConversionTB: {\r\n label: string;\r\n };\r\n MediaConversionPT: {\r\n label: string;\r\n };\r\n MediaConversionXB: {\r\n label: string;\r\n };\r\n MediaConversionZB: {\r\n label: string;\r\n };\r\n MediaConversionYB: {\r\n label: string;\r\n };\r\n PercentageConversionPercentFormat: {\r\n message: string;\r\n };\r\n PercentageConversionUnknownFormat: {\r\n message: string;\r\n };\r\n };\r\n Connection: {\r\n NoConnection: {\r\n label: string;\r\n message: string;\r\n };\r\n NoStatusProvider: {\r\n label: string;\r\n message: string;\r\n };\r\n ErrorState: {\r\n label: string;\r\n };\r\n FatalState: {\r\n label: string;\r\n };\r\n OnlineState: {\r\n label: string;\r\n };\r\n fqdn: {\r\n foundFormat: string;\r\n };\r\n NeedsAuthorizationState: {\r\n label: string;\r\n };\r\n UnknownState: {\r\n label: string;\r\n description: string;\r\n };\r\n WarningState: {\r\n label: string;\r\n };\r\n ErrorNodeName: {\r\n message: string;\r\n };\r\n ErrorGatewayUrl: {\r\n message: string;\r\n };\r\n ErrorService: {\r\n message: string;\r\n };\r\n ErrorWorker: {\r\n message: string;\r\n };\r\n };\r\n DirectoryList: {\r\n Upload: {\r\n Error: {\r\n FileNotFound: string;\r\n OperationBlocked: string;\r\n Unknown: string;\r\n };\r\n };\r\n };\r\n WebsocketStream: {\r\n Common: {\r\n ConnectionRetiesError: {\r\n message: string;\r\n };\r\n HandlerRegistrationError: {\r\n message: string;\r\n };\r\n CommunicationError: {\r\n message: string;\r\n };\r\n CommunicationErrorDetail: {\r\n message: string;\r\n };\r\n };\r\n CimStream: {\r\n ResetError: {\r\n message: string;\r\n };\r\n NoContentError: {\r\n message: string;\r\n };\r\n UnexpectedReceivedError: {\r\n message: string;\r\n };\r\n UnexpectedMultipleError: {\r\n message: string;\r\n };\r\n ConnectionError: {\r\n message: string;\r\n };\r\n };\r\n PowerShellStream: {\r\n ResetError: {\r\n message: string;\r\n };\r\n NoContentError: {\r\n message: string;\r\n };\r\n UnexpectedReceivedError: {\r\n message: string;\r\n };\r\n ConnectionError: {\r\n message: string;\r\n };\r\n };\r\n };\r\n Rpc: {\r\n Version: {\r\n message: string;\r\n };\r\n MissingVersion: {\r\n message: string;\r\n };\r\n Azure: {\r\n Unexpected: {\r\n Error: {\r\n message: string;\r\n };\r\n };\r\n };\r\n };\r\n Decorators: {\r\n Deprecated: {\r\n messageFormat: string;\r\n alternateSignatureFormat: string;\r\n CssClass: {\r\n messageFormat: string;\r\n };\r\n };\r\n Obsolete: {\r\n messageFormat: string;\r\n alternateSignatureFormat: string;\r\n };\r\n };\r\n Errors: {\r\n UserProfile: {\r\n Get: {\r\n formatMessage: string;\r\n };\r\n };\r\n };\r\n ScheduleReboot: {\r\n Restart: {\r\n Inprogress: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Success: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Fail: {\r\n Title: string;\r\n Message: string;\r\n };\r\n };\r\n Schedule: {\r\n Success: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Fail: {\r\n Title: string;\r\n Message: string;\r\n };\r\n };\r\n Confirmation: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Error: {\r\n NoRestartOptions: string;\r\n };\r\n Info: {\r\n CancellingReboot: string;\r\n };\r\n };\r\n CredSSPManager: {\r\n TryGatewayLocalPowerShellConfigNotConfirmed: {\r\n error: string;\r\n };\r\n };\r\n };\r\n };\r\n};\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/generated/strings.ts"],"names":[],"mappings":"AAkeC,CAAC","file":"strings.js","sourcesContent":["/* tslint:disable */\n/**\n * @file Source code generated by gulp-resjson.\n * @version 1.0\n */\nexport interface Strings {\r\n MsftSmeShell: {\r\n Core: {\r\n Error: {\r\n ArgumentNullError: {\r\n message: string;\r\n };\r\n ArgumentError: {\r\n message: string;\r\n };\r\n UnknownBrowser: {\r\n message: string;\r\n };\r\n GatewayNameRequired: {\r\n message: string;\r\n };\r\n NoResponseError: {\r\n message: string;\r\n };\r\n NoCode: {\r\n message: string;\r\n };\r\n PowerShellUnableSessionClose: {\r\n message: string;\r\n };\r\n PowerShellUnableCancelCommand: {\r\n message: string;\r\n };\r\n QueryCacheFetchOrder: {\r\n message: string;\r\n };\r\n QueryCacheFetchErrorOnce: {\r\n message: string;\r\n };\r\n QueryCacheRefreshOrder: {\r\n message: string;\r\n };\r\n QueryCacheRefreshErrorOnce: {\r\n message: string;\r\n };\r\n QueryCacheRecoverNoCachedResource: {\r\n message: string;\r\n };\r\n QueryCacheRecoverMissingRecoveryOption: {\r\n message: string;\r\n };\r\n ResourceCacheUnableFind: {\r\n message: string;\r\n };\r\n LoggingUnableSubmit: {\r\n message: string;\r\n };\r\n EnvironmentNotInitialized: {\r\n message: string;\r\n };\r\n EnvironmentMissingDefault: {\r\n message: string;\r\n };\r\n NotificationRpcInitialization: {\r\n message: string;\r\n };\r\n NotificationUnsupportedState: {\r\n message: string;\r\n };\r\n NotificationEmptyMessage: {\r\n message: string;\r\n };\r\n NotificationNoWorkItemFound: {\r\n message: string;\r\n };\r\n NotificationUnexpectedReceived: {\r\n message: string;\r\n };\r\n NotificationWebsocketInitialize: {\r\n message: string;\r\n };\r\n NotificationNoIdFound: {\r\n message: string;\r\n };\r\n RpcTypeNoMatch: {\r\n message: string;\r\n };\r\n RpcNotFoundModule: {\r\n message: string;\r\n };\r\n RpcTargetWindowNotConfigured: {\r\n message: string;\r\n };\r\n RpcExpiredRetry: {\r\n message: string;\r\n };\r\n RpcExpired: {\r\n message: string;\r\n };\r\n RpcSignatureError: {\r\n message: string;\r\n };\r\n RpcUnexpectedDestination: {\r\n message: string;\r\n };\r\n RpcUnexpectedEvent: {\r\n message: string;\r\n };\r\n RpcUnexpectedSequence: {\r\n message: string;\r\n };\r\n RpcUnexpectedErrorSequence: {\r\n message: string;\r\n };\r\n RpcNotInitialized: {\r\n message: string;\r\n };\r\n RpcNotFountInbound: {\r\n message: string;\r\n };\r\n RpcTimeout: {\r\n message: string;\r\n };\r\n AddNativeErrorCode: {\r\n message: string;\r\n };\r\n RpcSubjectClosed: {\r\n message: string;\r\n };\r\n RpcNotRegisteredHandler: {\r\n message: string;\r\n };\r\n RpcFailedFindModuleManifest: {\r\n message: string;\r\n };\r\n ForwarderIdConflict: {\r\n message: string;\r\n };\r\n ForwarderIdNotFound: {\r\n message: string;\r\n };\r\n ForwarderUnknownType: {\r\n message: string;\r\n };\r\n InvalidValue: {\r\n message: string;\r\n };\r\n ServerListRetrieve: {\r\n message: string;\r\n };\r\n ServerListFailedSave: {\r\n message: string;\r\n };\r\n ConnectionStream: {\r\n message: string;\r\n };\r\n ExpectedSingleNode: {\r\n message: string;\r\n };\r\n ExpectedClusterNode: {\r\n message: string;\r\n };\r\n BatchConnection: {\r\n message: string;\r\n };\r\n BatchResponseParsing: {\r\n message: string;\r\n };\r\n BatchUnSupportedInvocation: {\r\n message: string;\r\n };\r\n GatewayUrlNotConfigured: {\r\n message: string;\r\n };\r\n GatewayUrlMalformed: {\r\n message: string;\r\n };\r\n ToolValidationResult: {\r\n message: string;\r\n };\r\n ToolValidationUnsupportedOperator: {\r\n message: string;\r\n };\r\n ToolValidationUnsupportedDataType: {\r\n message: string;\r\n };\r\n ToolValidationVersionFormat: {\r\n message: string;\r\n };\r\n ToolValidationInventoryError: {\r\n title: string;\r\n message: string;\r\n };\r\n ToolValidationGatewayInventoryError: {\r\n title: string;\r\n message: string;\r\n };\r\n PowerShellRunCommandFormat: {\r\n message: string;\r\n };\r\n PrefixFormat: {\r\n message: string;\r\n };\r\n };\r\n ErrorCode: {\r\n Code0: {\r\n message: string;\r\n };\r\n Code5: {\r\n message: string;\r\n };\r\n Code50: {\r\n message: string;\r\n };\r\n Code87: {\r\n message: string;\r\n };\r\n Code110: {\r\n message: string;\r\n };\r\n Code1323: {\r\n message: string;\r\n };\r\n Code1326: {\r\n message: string;\r\n };\r\n Code1355: {\r\n message: string;\r\n };\r\n Code2224: {\r\n message: string;\r\n };\r\n Code2691: {\r\n message: string;\r\n };\r\n Code2692: {\r\n message: string;\r\n };\r\n Code8004108: {\r\n message: string;\r\n };\r\n Translated: {\r\n message: string;\r\n };\r\n Generic: {\r\n message: string;\r\n };\r\n };\r\n ErrorFormat: {\r\n Single: {\r\n message: string;\r\n Details: {\r\n message: string;\r\n };\r\n };\r\n Multiple: {\r\n message: string;\r\n Details: {\r\n message: string;\r\n };\r\n };\r\n };\r\n Units: {\r\n MediaConversionFormat: {\r\n message: string;\r\n };\r\n MediaConversionUnknownFormat: {\r\n message: string;\r\n };\r\n MediaConversionB: {\r\n label: string;\r\n };\r\n MediaConversionKB: {\r\n label: string;\r\n };\r\n MediaConversionMB: {\r\n label: string;\r\n };\r\n MediaConversionGB: {\r\n label: string;\r\n };\r\n MediaConversionTB: {\r\n label: string;\r\n };\r\n MediaConversionPT: {\r\n label: string;\r\n };\r\n MediaConversionXB: {\r\n label: string;\r\n };\r\n MediaConversionZB: {\r\n label: string;\r\n };\r\n MediaConversionYB: {\r\n label: string;\r\n };\r\n PercentageConversionPercentFormat: {\r\n message: string;\r\n };\r\n PercentageConversionUnknownFormat: {\r\n message: string;\r\n };\r\n };\r\n Connection: {\r\n NoConnection: {\r\n label: string;\r\n message: string;\r\n };\r\n NoStatusProvider: {\r\n label: string;\r\n message: string;\r\n };\r\n ErrorState: {\r\n label: string;\r\n };\r\n FatalState: {\r\n label: string;\r\n };\r\n OnlineState: {\r\n label: string;\r\n };\r\n fqdn: {\r\n foundFormat: string;\r\n };\r\n NeedsAuthorizationState: {\r\n label: string;\r\n };\r\n UnknownState: {\r\n label: string;\r\n description: string;\r\n };\r\n WarningState: {\r\n label: string;\r\n };\r\n ErrorNodeName: {\r\n message: string;\r\n };\r\n ErrorGatewayUrl: {\r\n message: string;\r\n };\r\n ErrorService: {\r\n message: string;\r\n };\r\n ErrorWorker: {\r\n message: string;\r\n };\r\n };\r\n DirectoryList: {\r\n Upload: {\r\n Error: {\r\n FileNotFound: string;\r\n OperationBlocked: string;\r\n Unknown: string;\r\n UnknownNoMessage: string;\r\n };\r\n };\r\n };\r\n WebsocketStream: {\r\n Common: {\r\n ConnectionRetiesError: {\r\n message: string;\r\n };\r\n HandlerRegistrationError: {\r\n message: string;\r\n };\r\n CommunicationError: {\r\n message: string;\r\n };\r\n CommunicationErrorDetail: {\r\n message: string;\r\n };\r\n };\r\n CimStream: {\r\n ResetError: {\r\n message: string;\r\n };\r\n NoContentError: {\r\n message: string;\r\n };\r\n UnexpectedReceivedError: {\r\n message: string;\r\n };\r\n UnexpectedMultipleError: {\r\n message: string;\r\n };\r\n ConnectionError: {\r\n message: string;\r\n };\r\n };\r\n PowerShellStream: {\r\n ResetError: {\r\n message: string;\r\n };\r\n NoContentError: {\r\n message: string;\r\n };\r\n UnexpectedReceivedError: {\r\n message: string;\r\n };\r\n ConnectionError: {\r\n message: string;\r\n };\r\n };\r\n };\r\n Rpc: {\r\n Version: {\r\n message: string;\r\n };\r\n MissingVersion: {\r\n message: string;\r\n };\r\n Azure: {\r\n Unexpected: {\r\n Error: {\r\n message: string;\r\n };\r\n };\r\n };\r\n };\r\n Decorators: {\r\n Deprecated: {\r\n messageFormat: string;\r\n alternateSignatureFormat: string;\r\n CssClass: {\r\n messageFormat: string;\r\n };\r\n };\r\n Obsolete: {\r\n messageFormat: string;\r\n alternateSignatureFormat: string;\r\n };\r\n };\r\n Errors: {\r\n UserProfile: {\r\n Get: {\r\n formatMessage: string;\r\n };\r\n };\r\n };\r\n ScheduleReboot: {\r\n Restart: {\r\n Inprogress: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Success: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Fail: {\r\n Title: string;\r\n Message: string;\r\n };\r\n };\r\n Schedule: {\r\n Success: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Fail: {\r\n Title: string;\r\n Message: string;\r\n };\r\n };\r\n Confirmation: {\r\n Title: string;\r\n Message: string;\r\n };\r\n Error: {\r\n NoRestartOptions: string;\r\n };\r\n Info: {\r\n CancellingReboot: string;\r\n };\r\n };\r\n CredSSPManager: {\r\n TryGatewayLocalPowerShellConfigNotConfirmed: {\r\n error: string;\r\n };\r\n };\r\n };\r\n };\r\n};\r\n"]}
@@ -288,15 +288,23 @@ Check the remote app enabled or not.
288
288
  <#
289
289
  c
290
290
  .SYNOPSIS
291
- Get the Win32_OperatingSystem information
291
+ Get the Win32_OperatingSystem information as well as current version information from the registry
292
292
 
293
293
  .DESCRIPTION
294
294
  Get the Win32_OperatingSystem instance and filter the results to just the required properties.
295
- This filtering will make the response payload much smaller.
295
+ This filtering will make the response payload much smaller. Included in the results are current version
296
+ information from the registry
296
297
 
297
298
  #>
298
299
  function getOperatingSystemInfo() {
299
- return Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime
300
+ $operatingSystemInfo = Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime
301
+ $currentVersion = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Microsoft.PowerShell.Utility\Select-Object CurrentBuild, UBR, DisplayVersion
302
+
303
+ $operatingSystemInfo | Add-Member -MemberType NoteProperty -Name CurrentBuild -Value $currentVersion.CurrentBuild
304
+ $operatingSystemInfo | Add-Member -MemberType NoteProperty -Name UpdateBuildRevision -Value $currentVersion.UBR
305
+ $operatingSystemInfo | Add-Member -MemberType NoteProperty -Name DisplayVersion -Value $currentVersion.DisplayVersion
306
+
307
+ return $operatingSystemInfo
300
308
  }
301
309
 
302
310
  <#
@@ -38,6 +38,9 @@ export class ServerInventoryCache extends SharedCache {
38
38
  inventory.productType = operatingSystem.productType;
39
39
  inventory.osType = operatingSystem.osType;
40
40
  inventory.lastBootUpTime = operatingSystem.lastBootUpTime;
41
+ inventory.buildNumber = operatingSystem.currentBuild;
42
+ inventory.updateBuildRevision = operatingSystem.updateBuildRevision;
43
+ inventory.operatingSystemDisplayVersion = operatingSystem.displayVersion;
41
44
  inventory.totalPhysicalMemory = computerSystem.totalPhysicalMemory;
42
45
  inventory.domainRole = computerSystem.domainRole;
43
46
  inventory.computerManufacturer = computerSystem.manufacturer;