Compare commits

..

380 Commits

Author SHA1 Message Date
Przemyslaw Klys f458dd97c7 Update 2020-12-01 23:38:16 +01:00
Przemyslaw Klys d4bf6c45cd Update psd1 2020-12-01 23:37:47 +01:00
Przemyslaw Klys f8fc81e0ad Update readme 2020-12-01 23:34:31 +01:00
Przemyslaw Klys 5e4c453254 Update list 2020-12-01 23:34:22 +01:00
Przemyslaw Klys 52bf5b1595 Improved Get-XMLGPO 2020-12-01 23:29:27 +01:00
Przemyslaw Klys 60eb0fdc56 Small text updates 2020-12-01 23:28:38 +01:00
Przemyslaw Klys 99bc7fc751 Small text updates 2020-12-01 23:28:22 +01:00
Przemyslaw Klys 50146c3d65 Improved Remove-GPOZaurr 2020-12-01 23:28:10 +01:00
Przemyslaw Klys 7fddaec289 Readme update 2020-11-30 12:49:51 +01:00
Przemyslaw Klys b6104c92ab Improve Invoke-GPOZaurrSupport 2020-11-30 12:49:26 +01:00
Przemyslaw Klys e54ea95e4f Improve compatibility with new PSWriteHTML 2020-11-30 12:49:00 +01:00
Przemyslaw Klys 64384a3ee9 Update PSD1 2020-11-30 12:48:46 +01:00
Przemyslaw Klys d2add9ff96 Update PSD1 2020-11-30 12:48:34 +01:00
Przemyslaw Klys b6c145ba49 Update 2020-11-26 18:52:25 +01:00
Przemyslaw Klys a5953f9b32 Update PSD1 2020-11-24 09:57:35 +01:00
Przemyslaw Klys 6d38b1803c improvements 2020-11-24 09:57:09 +01:00
Przemyslaw Klys 16f244592e Readme update 2020-11-24 08:56:31 +01:00
Przemyslaw Klys eb7e98b657 update 2020-11-23 19:41:32 +01:00
Przemyslaw Klys c060fa5d6d Added GPOPermissionsUnknown 2020-11-23 18:52:07 +01:00
Przemyslaw Klys 9ce6a2a400 Update readme 2020-11-23 18:51:52 +01:00
Przemyslaw Klys 823f2095d4 Update 2020-11-23 18:51:46 +01:00
Przemyslaw Klys 49e8ecf6d7 Update PSD1/Readme 2020-11-23 18:51:02 +01:00
Przemyslaw Klys 673927b2b1 Update Remove-GPOZaurrDuplicateObject 2020-11-22 22:28:05 +01:00
Przemyslaw Klys d19be8ce0f Update Remove-GPOZaurrDuplicateObject 2020-11-22 22:27:55 +01:00
Przemyslaw Klys b8845f1f23 Repair-GPOZaurrNetLogonOwner update 2020-11-22 22:27:01 +01:00
Przemyslaw Klys 000f4d59ef Update readme 2020-11-22 22:26:52 +01:00
Przemyslaw Klys 13c88a6d83 Update 2020-11-22 19:50:08 +01:00
Przemyslaw Klys 311ae288b9 Update readme 2020-11-22 19:07:49 +01:00
Przemyslaw Klys 945cccaac8 Update GPOZaurr version 2020-11-22 18:56:59 +01:00
Przemyslaw Klys d8e0548900 Improvement 2020-11-22 18:55:50 +01:00
Przemyslaw Klys 3ab54ec4ad Update example 2 2020-11-22 18:48:30 +01:00
Przemyslaw Klys 51620715fa Update example 1 2020-11-22 18:48:14 +01:00
Przemyslaw Klys 5b6e7b6b0a Update 2020-11-22 15:05:27 +01:00
Przemyslaw Klys 85ef9c2443 Update PSD1 2020-11-18 23:03:15 +01:00
Przemyslaw Klys 68fbc3a6f6 Update readme/fix Add-GPOZaurrPermission 2020-11-18 23:02:45 +01:00
Przemyslaw Klys 2912f20390 Update 2020-11-18 21:38:27 +01:00
Przemyslaw Klys 63ab1b571d Update 2020-11-18 21:37:20 +01:00
Przemyslaw Klys 807ea420b0 Support for Forest/IncludeDomains/ExcludeDomains 2020-11-18 19:43:16 +01:00
Przemyslaw Klys 9cd28b11ea Improve Remove-GPOZaurrBroken 2020-11-18 18:42:43 +01:00
Przemyslaw Klys 5fb48b994b Update readme/PSD1 2020-11-18 18:42:02 +01:00
Przemyslaw Klys 3cfae42cc1 Update 2020-11-17 10:33:51 +01:00
Przemyslaw Klys fb922d7836 Update 2020-11-17 00:06:48 +01:00
Przemyslaw Klys fb7dfdc4b1 Update 2020-11-17 00:06:35 +01:00
Przemyslaw Klys 9d18f4d11a Update Readme/PSD1 2020-11-17 00:06:20 +01:00
Przemyslaw Klys 206a1f41af Update 2020-11-16 13:48:19 +01:00
Przemyslaw Klys bef4744b09 Update 2020-11-16 13:47:41 +01:00
Przemyslaw Klys f990cdfa03 Update 2020-11-14 13:45:03 +01:00
Przemyslaw Klys 34282f79bc Update 2020-11-14 13:44:44 +01:00
Przemyslaw Klys eda72cb1d3 Update 2020-11-14 13:44:08 +01:00
Przemyslaw Klys 8ab9c0ee21 Update 2020-11-14 13:36:46 +01:00
Przemyslaw Klys 8646b07e41 Improved GPOPermissionsRead 2020-11-14 13:35:24 +01:00
Przemyslaw Klys 1fe0b6b37e Update help 2020-11-14 13:35:15 +01:00
Przemyslaw Klys 553de6dc2b Update help 2020-11-14 13:35:04 +01:00
Przemyslaw Klys 24fd00e110 Added example 2020-11-13 23:32:36 +01:00
Przemyslaw Klys 6e5ae262d4 Added Get-GPOZaurrPermissionIssue 2020-11-13 23:32:26 +01:00
Przemyslaw Klys 74192f5d48 Update readme/PSD1 2020-11-13 23:32:16 +01:00
Przemyslaw Klys d0dc7a7052 Disabled verbose 2020-11-13 23:32:05 +01:00
Przemyslaw Klys d465f404c9 Update 2020-11-12 21:16:32 +01:00
Przemyslaw Klys 64bd95d85c Update 2020-11-12 19:40:26 +01:00
Przemyslaw Klys 569c7ed910 Update example 2020-11-12 15:33:28 +01:00
Przemyslaw Klys 6fec1a264f Update readme 2020-11-12 13:41:49 +01:00
Przemyslaw Klys 7eefe96ee7 Update 2020-11-12 13:38:51 +01:00
Przemyslaw Klys a54f183ed3 Update 2020-11-12 12:18:35 +01:00
Przemyslaw Klys f5b73918bb Update 2020-11-11 22:36:53 +01:00
Przemyslaw Klys 25a59572dd Update 2020-11-11 22:34:29 +01:00
Przemyslaw Klys a6a847d720 Update 2020-11-11 21:27:04 +01:00
Przemyslaw Klys 20d005f600 Update 2020-11-11 21:24:07 +01:00
Przemyslaw Klys 7b2f2c69be Update 2020-11-11 17:12:22 +01:00
Przemyslaw Klys 1126071fc4 Examples update 2020-11-11 17:06:29 +01:00
Przemyslaw Klys 70fbc2d5f8 More improvements to Add-GPOZaurrPermission 2020-11-11 17:06:06 +01:00
Przemyslaw Klys fd844fd7a2 Add-GPOZaurrPermission improvements 2020-11-11 17:05:51 +01:00
Przemyslaw Klys a258689880 Added support for -All 2020-11-11 12:58:40 +01:00
Przemyslaw Klys 268b2f76f5 Update PSD1 2020-11-10 22:23:03 +01:00
Przemyslaw Klys ec90f38ad9 Update 2020-11-10 22:21:36 +01:00
Przemyslaw Klys aaf83b68de Update 2020-11-10 22:11:40 +01:00
Przemyslaw Klys 7ba8891b26 Update readme 2020-11-10 09:38:20 +01:00
Przemyslaw Klys 2df56e72b5 Update 2020-11-10 09:31:38 +01:00
Przemyslaw Klys 1bc966c409 Tests 2020-11-10 09:30:46 +01:00
Przemyslaw Klys 887608b7b8 Update Example 2020-11-09 23:36:41 +01:00
Przemyslaw Klys f8b3be0f68 Update 2020-11-09 23:35:21 +01:00
Przemyslaw Klys 826460f739 readme update 2020-11-09 09:45:28 +01:00
Przemyslaw Klys 9e34f4297c Update 2020-11-09 09:45:04 +01:00
Przemyslaw Klys 0da051a53b PSD1 update 2020-11-08 17:40:55 +01:00
Przemyslaw Klys f5fb9e2dee Update 2020-11-08 17:40:36 +01:00
Przemyslaw Klys 9784370c77 PSD1 update 2020-11-08 17:11:23 +01:00
Przemyslaw Klys 83363bb843 Update 2020-11-08 17:11:17 +01:00
Przemyslaw Klys 6c2e774b10 Update readme 2020-11-08 15:25:53 +01:00
Przemyslaw Klys b70cccf0db Update 2020-11-08 15:25:26 +01:00
Przemyslaw Klys 1788615711 Update 2020-11-07 23:06:02 +01:00
Przemyslaw Klys 0a863de36b Update readme/psd1 2020-11-07 22:50:08 +01:00
Przemyslaw Klys 31dd7e31a6 Update 2020-11-07 22:35:08 +01:00
Przemyslaw Klys 46a927b92d Update 2020-11-07 17:00:45 +01:00
Przemyslaw Klys 3e5c5fd6fb Update 2020-11-07 16:13:02 +01:00
Przemyslaw Klys 2a92c90b0c Update 2020-11-07 16:07:00 +01:00
Przemyslaw Klys 0f8fbb1220 Update 2020-11-07 10:35:55 +01:00
Przemyslaw Klys c37dd91403 Update 2020-11-07 10:23:16 +01:00
Przemyslaw Klys bc55cd09c5 Update 2020-11-06 13:30:05 +01:00
Przemyslaw Klys 2331e449b1 Update 2020-11-06 13:28:57 +01:00
Przemyslaw Klys d27760931e Update 2020-11-06 13:08:38 +01:00
Przemyslaw Klys 64bc1ff092 Update readme 2020-11-06 11:17:56 +01:00
Przemyslaw Klys 6f92043c3a Update 2020-11-06 11:17:01 +01:00
Przemyslaw Klys 7ce5027abd Update 2020-11-06 10:35:11 +01:00
Przemyslaw Klys 0c8e23f6af Update 2020-11-05 23:36:24 +01:00
Przemyslaw Klys 731ba420b9 Update 2020-11-05 22:46:10 +01:00
Przemyslaw Klys 8790be18bb Update 2020-11-05 21:32:31 +01:00
Przemyslaw Klys e495411714 Update 2020-11-05 19:44:48 +01:00
Przemyslaw Klys fab33b8d14 Update 2020-11-05 19:21:00 +01:00
Przemyslaw Klys e00c93b798 Update 2020-11-05 18:28:51 +01:00
Przemyslaw Klys ee5e03d666 Update 2020-11-05 18:06:49 +01:00
Przemyslaw Klys ad2067c714 Update 2020-11-05 16:36:48 +01:00
Przemyslaw Klys b5e4fd07dc Update 2020-11-05 11:28:58 +01:00
Przemyslaw Klys 981e71483a Update 2020-11-04 20:55:47 +01:00
Przemyslaw Klys 26e9486894 Update psd1 2020-11-03 09:06:15 +01:00
Przemyslaw Klys 2f874b8dc8 Update 2020-10-29 20:24:26 +01:00
Przemyslaw Klys f1e211e560 Update readme 2020-10-29 18:48:43 +01:00
Przemyslaw Klys 4d82b51577 Update 2020-10-29 18:47:13 +01:00
Przemyslaw Klys ee9effa4f1 Update examples 2020-10-29 11:35:33 +01:00
Przemyslaw Klys af673cef1c Update readme 2020-10-29 11:34:16 +01:00
Przemyslaw Klys 38bf93fef3 Update 2020-10-29 11:32:25 +01:00
Przemyslaw Klys 3811bf68ad Update 2020-10-28 18:25:39 +01:00
Przemyslaw Klys e5d897d354 Update 2020-10-28 18:25:21 +01:00
Przemyslaw Klys 901be9fc66 Update PSD1 2020-10-28 11:40:35 +01:00
Przemyslaw Klys 57f9d02635 Update 2020-10-28 11:40:22 +01:00
Przemyslaw Klys d7e1ccd2f2 Update 2020-10-28 11:37:38 +01:00
Przemyslaw Klys 8d7ef2512d Update 2020-10-27 11:09:06 +01:00
Przemyslaw Klys ed417e7d9e Update 2020-10-24 20:30:35 +02:00
Przemyslaw Klys df07cc5a6b Update 2020-10-24 20:29:34 +02:00
Przemyslaw Klys 68f7a9292c Update 2020-10-23 18:53:47 +02:00
Przemyslaw Klys dc53cb36e0 Update readme 2020-10-22 14:55:25 +02:00
Przemyslaw Klys 7ff834fbfa Update 2020-10-22 14:55:04 +02:00
Przemyslaw Klys f5cf5dac4d Update 2020-10-22 14:00:46 +02:00
Przemyslaw Klys 5ffe89dec3 Update 2020-10-22 14:00:15 +02:00
Przemyslaw Klys 191b709ccf Update 2020-10-22 13:42:27 +02:00
Przemyslaw Klys b3e15d66ea Update 2020-10-22 10:51:37 +02:00
Przemyslaw Klys b3751d1dcc Update 2020-10-22 09:17:01 +02:00
Przemyslaw Klys 928d66eb9d Update 2020-10-22 09:16:07 +02:00
Przemyslaw Klys 72ecf97497 new release 2020-10-21 13:17:37 +02:00
Przemyslaw Klys aa8773ce73 Update 2020-10-21 12:48:37 +02:00
Przemyslaw Klys 6f11155914 Update 2020-10-20 22:49:22 +02:00
Przemyslaw Klys fd5413164a Update 2020-10-20 21:02:54 +02:00
Przemyslaw Klys 295f2e0a48 Update 2020-10-19 10:41:39 +02:00
Przemyslaw Klys 13e5672b3f Update 2020-10-19 10:38:55 +02:00
Przemyslaw Klys a0723227c0 Update share permissions 2020-10-19 00:06:02 +02:00
Przemyslaw Klys 72b2d2482b update functions 2020-10-19 00:05:50 +02:00
Przemyslaw Klys 0c12761601 Update 2020-10-18 20:17:06 +02:00
Przemyslaw Klys 4ca5c8f1e7 Update 2020-10-17 09:28:58 +02:00
Przemyslaw Klys 53cdbdded7 Update 2020-10-14 13:23:29 +02:00
Przemyslaw Klys bed9da4367 Update 2020-10-14 09:53:01 +02:00
Przemyslaw Klys 1226c2758d Update 2020-10-13 15:29:55 +02:00
Przemyslaw Klys 8b2e655723 Update Invoke-GPOZaurr 2020-10-13 15:29:38 +02:00
Przemyslaw Klys 1061484247 Update 2020-10-13 00:14:14 +02:00
Przemyslaw Klys b4f014855b Update 2020-10-13 00:13:57 +02:00
Przemyslaw Klys 8b1bdfd39b update 2020-10-09 11:26:31 +02:00
Przemyslaw Klys 1f43ec4d66 Updated Get-GPOZaurrFiles for lack of access 2020-10-08 20:16:30 +02:00
Przemyslaw Klys f3f5b22090 Update 2020-10-04 21:30:27 +02:00
Przemyslaw Klys eb47bcd4b0 Update 2020-10-04 21:20:23 +02:00
Przemyslaw Klys 87a91bd632 Update 2020-10-04 20:58:58 +02:00
Przemyslaw Klys d0bd7b1cdc Update 2020-10-01 22:52:28 +02:00
Przemyslaw Klys dfff00d4cf Update 2020-10-01 21:35:10 +02:00
Przemyslaw Klys ba5a7e1549 Update 2020-10-01 21:35:00 +02:00
Przemyslaw Klys b126f397f7 Update 2020-10-01 21:34:42 +02:00
Przemyslaw Klys afd8e052de Update 2020-09-29 12:17:59 +02:00
Przemyslaw Klys 52edd47532 Update 2020-09-29 12:13:14 +02:00
Przemyslaw Klys da5fbf8341 Update 2020-09-29 09:47:02 +02:00
Przemyslaw Klys 6129aa6818 Update 2020-09-20 19:45:45 +02:00
Przemyslaw Klys 041639f430 Update 2020-09-20 19:45:33 +02:00
Przemyslaw Klys 12f79247dd Improvement to PSD1 2020-09-20 19:16:11 +02:00
Przemyslaw Klys a957bc6450 Update 2020-09-20 17:05:11 +02:00
Przemyslaw Klys fb5b9c5024 Update 2020-09-20 17:03:59 +02:00
Przemyslaw Klys cb2dfe0a0f Adresses issue with Get-GPOZaurrPermissionConsistency
if sysvol doesn't exists
2020-09-20 17:01:50 +02:00
Przemyslaw Klys e2950af1b6 Update 2020-08-31 08:33:53 +02:00
Przemyslaw Klys 1b70d39984 Update 2020-08-28 09:49:26 +02:00
Przemyslaw Klys 91d3776403 Update to Find-CSExtension 2020-08-28 09:30:09 +02:00
Przemyslaw Klys b4748918f5 Update to ConvertFrom-CSExtension 2020-08-28 09:29:42 +02:00
Przemyslaw Klys a1d8393060 Updated examples 2020-08-28 08:28:53 +02:00
Przemyslaw Klys 4a519004f5 Update 2020-08-26 13:24:00 +02:00
Przemyslaw Klys 8234c6cf50 Update 2020-08-26 13:22:23 +02:00
Przemyslaw Klys f50a495690 Update 2020-08-26 12:55:56 +02:00
Przemyslaw Klys 6c2e29122e Update 2020-08-26 12:55:06 +02:00
Przemyslaw Klys 250683e830 Update 2020-08-26 09:55:43 +02:00
Przemyslaw Klys 0f04582b42 Improvement to Get-GPOZaurrPermissionSummary 2020-08-26 09:55:16 +02:00
Przemyslaw Klys d9de90718d update readme 2020-08-26 08:41:12 +02:00
Przemyslaw Klys e8651b71fd PSD1 update 2020-08-26 08:40:52 +02:00
Przemyslaw Klys ecdd6fb8ec Update Summary 2020-08-26 08:40:13 +02:00
Przemyslaw Klys 945e993843 Update 2020-08-25 12:37:40 +02:00
Przemyslaw Klys fdf78ecadb Added Get-GPOZaurrPermissionSummary report 2020-08-25 12:37:03 +02:00
Przemyslaw Klys fc9b191578 Update 2020-08-17 13:12:00 +02:00
Przemyslaw Klys 04e5eaf63c Fix for Inheritance 2020-08-17 13:11:18 +02:00
Przemyslaw Klys 494b1582ca Update 2020-08-17 10:00:47 +02:00
Przemyslaw Klys c33b820e36 Update 2020-08-16 22:28:08 +02:00
Przemyslaw Klys cfeb0098a6 Update 2020-08-16 22:17:08 +02:00
Przemyslaw Klys e2bba32a57 Update 2020-08-15 11:22:37 +02:00
Przemyslaw Klys 1ca6673ee4 Update RSOP 2020-08-15 11:20:31 +02:00
Przemyslaw Klys cb9326e8b6 Update README/PSD1 2020-08-15 11:20:18 +02:00
Przemyslaw Klys 10be16ad53 Reports updated 2020-08-15 11:20:05 +02:00
Przemyslaw Klys 0c26642a72 Update example 2020-08-14 23:00:54 +02:00
Przemyslaw Klys 5d76f9125d Fixes to Invoke-GPOZaurr 2020-08-14 22:56:15 +02:00
Przemyslaw Klys 5b930f4536 Added Get-GPOZaurInheritance 2020-08-14 22:56:02 +02:00
Przemyslaw Klys b118000672 Update PSD1, README 2020-08-14 22:55:33 +02:00
Przemyslaw Klys 603de5a42e Update 2020-08-13 22:02:48 +02:00
Przemyslaw Klys 9fe0157293 Update 2020-08-13 13:34:03 +02:00
Przemyslaw Klys b3d5df8188 Update 2020-08-13 13:33:38 +02:00
Przemyslaw Klys 00ce6f42d7 Update 2020-08-13 10:17:47 +02:00
Przemyslaw Klys ec30c54577 Update CSE 2020-08-13 09:40:35 +02:00
Przemyslaw Klys 1974eb2a39 Update 2020-08-13 09:04:17 +02:00
Przemyslaw Klys 03a09809ab Update 2020-08-13 00:04:11 +02:00
Przemyslaw Klys 825f9fda42 Update 2020-08-13 00:01:19 +02:00
Przemyslaw Klys a41fb8473b Update 2020-08-11 16:56:43 +02:00
Przemyslaw Klys d2f02e46e0 Update 2020-08-09 23:54:08 +02:00
Przemyslaw Klys dcff4516b4 Update 2020-08-09 22:37:40 +02:00
Przemyslaw Klys 651ee3f6c9 Update 2020-08-09 22:37:35 +02:00
Przemyslaw Klys 7aefc6047b Update 2020-08-09 22:37:28 +02:00
Przemyslaw Klys 2bca54fd06 Add Invoke-GPOZaurrSupport (WIP) 2020-08-09 22:36:53 +02:00
Przemyslaw Klys 3fd8872e5c WIP 2020-08-05 13:59:48 +02:00
Przemyslaw Klys 57efc58c2f Updated examples 2020-08-05 13:59:04 +02:00
Przemyslaw Klys 40e422682b New command Get-GPOZaurrDictionary 2020-08-05 13:58:56 +02:00
Przemyslaw Klys d2b9fc0960 Updated XMLGenericPolicy 2020-08-05 13:58:45 +02:00
Przemyslaw Klys f8fdf1ff98 Updated dictionary 2020-08-05 13:58:25 +02:00
Przemyslaw Klys 1d198dbd7c Fix for AUtologon 2020-08-05 13:58:18 +02:00
Przemyslaw Klys 2dd780910a Update PSD1 2020-08-05 13:58:03 +02:00
Przemyslaw Klys ed22b56716 Missing disabled property for registry 2020-08-05 12:44:14 +02:00
Przemyslaw Klys 7bcef67820 Added InternetExplorerZones 2020-08-05 12:44:03 +02:00
Przemyslaw Klys 1941577b24 Update DFSR 2020-08-02 16:54:16 +02:00
Przemyslaw Klys 97a189eda5 Added Example for cleanup dfsr 2020-08-02 14:01:28 +02:00
Przemyslaw Klys 0759d1cb85 Update readme 2020-08-02 14:01:18 +02:00
Przemyslaw Klys 424e9d2f5c Update PSD1 2020-08-02 14:01:11 +02:00
Przemyslaw Klys 794f6997b8 Some updates to Get-GPOZaurrSysvolDFSR 2020-08-02 14:01:05 +02:00
Przemyslaw Klys 175b6dede2 added Clear-GPOZaurrSysvolDFSR 2020-08-02 14:00:49 +02:00
Przemyslaw Klys 91bace0a05 Added Get-GPOZaurrSysvolDFSR 2020-08-02 13:46:36 +02:00
Przemyslaw Klys 7d829ac78d Update Example 2020-08-02 00:54:28 +02:00
Przemyslaw Klys caa9585906 removed dead code 2020-08-02 00:50:41 +02:00
Przemyslaw Klys d0d6427b38 removed dead code 2020-08-02 00:50:32 +02:00
Przemyslaw Klys 7c5622f682 Removed dead code 2020-08-02 00:50:25 +02:00
Przemyslaw Klys 12e183b45c Removed dead code 2020-08-02 00:50:11 +02:00
Przemyslaw Klys e52dc71857 Update PSD1 2020-08-02 00:50:02 +02:00
Przemyslaw Klys 9041f4cdbc Removed dead code 2020-08-02 00:43:43 +02:00
Przemyslaw Klys 6f503f735f Why was it even here? 2020-08-02 00:43:36 +02:00
Przemyslaw Klys 27830e9f8a Removing dead code 2020-08-02 00:41:43 +02:00
Przemyslaw Klys d8c63ce949 Uploading just to have backup 2020-08-02 00:41:21 +02:00
Przemyslaw Klys 33b2854d63 Cleaning up dead code 2020-08-02 00:41:05 +02:00
Przemyslaw Klys acb51d4444 Update Invoke-GPOZaurr 2020-08-02 00:32:30 +02:00
Przemyslaw Klys 3bc9bb5f9c A lot more policy types supported 2020-08-02 00:32:18 +02:00
Przemyslaw Klys 58d94edac0 Great policy, with update for ListBox 2020-08-02 00:32:04 +02:00
Przemyslaw Klys d76ae5cd1d Lithnet update, but most likely to remove 2020-08-02 00:31:52 +02:00
Przemyslaw Klys a11d563704 Bitlocker update, but most likely to remove 2020-08-02 00:31:41 +02:00
Przemyslaw Klys 34c55c8482 Example update 2020-08-02 00:31:20 +02:00
Przemyslaw Klys c6fdfccc61 Update PSD1 2020-08-02 00:31:10 +02:00
Przemyslaw Klys e512c0b0de Update - but maybe we should remove this 2020-08-01 00:12:03 +02:00
Przemyslaw Klys 7afd104b7b Update psd1 2020-07-31 15:26:56 +02:00
Przemyslaw Klys 60511fa602 Removed dead examples 2020-07-31 15:26:48 +02:00
Przemyslaw Klys 9b3924cc00 Added Lithnet filter 2020-07-31 15:24:03 +02:00
Przemyslaw Klys 0bf093351f Added LAPS support 2020-07-31 11:00:57 +02:00
Przemyslaw Klys 2d164750f1 Update 2020-07-30 22:56:17 +02:00
Przemyslaw Klys b8d440f547 Better audit report 2020-07-30 22:56:09 +02:00
Przemyslaw Klys f25ace130c Audit update to to advanced events 2020-07-30 22:55:58 +02:00
Przemyslaw Klys 8b17f9e3a2 Updated policies to use int instead of strings 2020-07-30 22:55:01 +02:00
Przemyslaw Klys b97cf1fd9d Update 2020-07-30 22:04:13 +02:00
Przemyslaw Klys 416b3f0273 Update 2020-07-30 22:03:51 +02:00
Przemyslaw Klys d3c31e9651 Update example 2020-07-30 21:58:41 +02:00
Przemyslaw Klys 8b963c6b82 Rewritten Autologon using Reports on Reports 2020-07-30 21:58:28 +02:00
Przemyslaw Klys 989d3ba9f0 Added functionality reports based on reports 2020-07-30 21:58:15 +02:00
Przemyslaw Klys f3e2d3cc11 Removed verbose messages 2020-07-30 21:57:54 +02:00
Przemyslaw Klys a7b8b5f6ea Update 2020-07-30 13:41:58 +02:00
Przemyslaw Klys 7f2adbbb13 Update 2020-07-30 12:23:52 +02:00
Przemyslaw Klys a82e460406 Update 2020-07-30 12:23:38 +02:00
Przemyslaw Klys a0e990bf2a Update to example 2020-07-30 11:28:56 +02:00
Przemyslaw Klys ddc5630244 Small update 2020-07-30 11:28:47 +02:00
Przemyslaw Klys d377e92fb5 Fixed reading Registry XML 2020-07-30 11:26:47 +02:00
Przemyslaw Klys b8c3f1e8f8 Updates to Printer XML 2020-07-30 11:26:37 +02:00
Przemyslaw Klys a827afab39 Fix for argument completer 2020-07-29 23:20:27 +02:00
Przemyslaw Klys 61bb568c94 Fix for nested XML, still collection name is wrong 2020-07-29 23:20:07 +02:00
Przemyslaw Klys 3f4d8c9907 Better assesment of empty and linked gpos 2020-07-29 22:13:11 +02:00
Przemyslaw Klys f6466c2ca7 Update PSD1 2020-07-29 22:12:36 +02:00
Przemyslaw Klys 609d93118b Fix for lack of value 2020-07-29 22:12:30 +02:00
Przemyslaw Klys 193ddd6ff9 Update 2020-07-29 14:36:17 +02:00
Przemyslaw Klys 889ce5f9ab Update 2020-07-23 12:31:18 +02:00
Przemyslaw Klys ac224b41b7 Update 2020-07-22 09:48:29 +02:00
Przemyslaw Klys caaf541e91 Update 2020-07-22 09:06:04 +02:00
Przemyslaw Klys c856484932 Update 2020-07-21 20:31:40 +02:00
Przemyslaw Klys 9c3ea2bbe7 Update 2020-07-21 13:00:27 +02:00
Przemyslaw Klys 5071c0da07 Updates 2020-07-21 12:59:25 +02:00
Przemyslaw Klys fd7c7e1b30 Renamed lots of functions, cleanup 2020-07-18 21:43:42 +02:00
Przemyslaw Klys 1e3a7a78c8 Update 2020-07-18 15:54:19 +02:00
Przemyslaw Klys d3f0e04f35 Support for bundling types 2020-07-17 15:36:04 +02:00
Przemyslaw Klys fe080aece9 Small fix for a crash 2020-07-17 10:04:36 +02:00
Przemyslaw Klys 95b814f2f9 Added printers 2020-07-17 10:04:26 +02:00
Przemyslaw Klys 59dfa34ba9 Added Printers 2020-07-17 10:04:19 +02:00
Przemyslaw Klys 9ecf092bd5 Small fixes 2020-07-17 00:22:03 +02:00
Przemyslaw Klys e917092ac9 Added DriveMapping 2020-07-17 00:21:58 +02:00
Przemyslaw Klys 047576ff70 Updates 2020-07-16 23:11:11 +02:00
Przemyslaw Klys 5d3370d546 Update 2020-07-16 22:34:32 +02:00
Przemyslaw Klys e514deca08 Update 2020-07-16 00:03:54 +02:00
Przemyslaw Klys c99c33d0fa Update 2020-07-16 00:03:28 +02:00
Przemyslaw Klys f841f41de0 Updates 2020-07-14 23:54:22 +02:00
Przemyslaw Klys fb6931c5e1 Update 2020-07-13 15:14:21 +02:00
Przemyslaw Klys 9a43c466b7 WIP 2020-07-13 15:04:17 +02:00
Przemyslaw Klys afd99d8e67 FIx for GPOPermission 2020-07-13 14:09:20 +02:00
Przemyslaw Klys edd6dbdfa5 Update 2020-06-29 22:33:51 +02:00
Przemyslaw Klys 9e837d2218 Update WIP 2020-06-29 20:52:38 +02:00
Przemyslaw Klys 9030233e18 Removed dead code 2020-06-28 23:49:07 +02:00
Przemyslaw Klys d02396f591 update 2020-06-28 23:03:36 +02:00
Przemyslaw Klys efb1ddf056 Update 2020-06-28 23:03:00 +02:00
Przemyslaw Klys f6c5cbe901 Readme update 2020-06-28 22:48:29 +02:00
Przemyslaw Klys a7583508f5 Update 2020-06-28 22:47:51 +02:00
Przemyslaw Klys f73c445385 Update 2020-06-28 22:20:33 +02:00
Przemyslaw Klys de4ff8ff07 Update 2020-06-28 22:00:27 +02:00
Przemyslaw Klys 7501693276 Invoke-GPOZaurr WIP 2020-06-28 18:42:06 +02:00
Przemyslaw Klys e76c4d9094 Update 2020-06-28 15:47:37 +02:00
Przemyslaw Klys 2f25064090 Update 2020-06-28 10:32:02 +02:00
Przemyslaw Klys 97ffc8bfd5 Update 2020-06-28 10:08:09 +02:00
Przemyslaw Klys 27bd83eaba Update 2020-06-27 20:57:06 +02:00
Przemyslaw Klys 7cff95cc81 Updates to Find-GPO 2020-06-27 18:19:45 +02:00
Przemyslaw Klys 99d489290d More work on Find-GPO 2020-06-27 17:44:25 +02:00
Przemyslaw Klys d94bf27669 Improvements to Find-GPO 2020-06-27 17:04:19 +02:00
Przemyslaw Klys 570b1cbc83 Added Find-GPO WIP 2020-06-27 12:45:23 +02:00
Przemyslaw Klys 2286f0cb0b XML parsing improvements 2020-06-27 10:26:06 +02:00
Przemyslaw Klys e253bb39e0 Update to Save-GPOZaurrFiles 2020-06-27 10:25:30 +02:00
Przemyslaw Klys 1054d8a38b Update 2020-06-27 10:24:59 +02:00
Przemyslaw Klys 3874098738 Additional protection against CNF duplicates 2020-06-27 10:24:12 +02:00
Przemyslaw Klys 5d81539ba6 Update 2020-06-26 10:08:25 +02:00
Przemyslaw Klys 15b467b1ff Update 2020-06-24 20:22:37 +02:00
Przemyslaw Klys 75be102588 Updated PSD1 before release 2020-06-21 15:16:21 +02:00
Przemyslaw Klys dff222dbb4 Added Get-GPOZaurrFiles 2020-06-21 15:15:02 +02:00
Przemyslaw Klys 428776afd7 Update PSD1 2020-06-19 19:29:06 +02:00
Przemyslaw Klys 2c078d3b2d Update 2020-06-19 19:28:33 +02:00
Przemyslaw Klys b8ed284648 Fix for CanonicalName 2020-06-19 19:27:53 +02:00
Przemyslaw Klys 8de9c32fd1 Updae examples 2020-06-19 19:17:20 +02:00
Przemyslaw Klys 3cd490937b Update readme 2020-06-19 19:17:07 +02:00
Przemyslaw Klys 3557ecefc2 Fix for Get-GPOZaurrLink and SearchBase parameter
Added some error logging
2020-06-19 19:16:57 +02:00
Przemyslaw Klys 4b57f4bec0 Update 2020-06-18 16:45:40 +02:00
Przemyslaw Klys 28d941ec26 Update 2020-06-18 16:36:35 +02:00
Przemyslaw Klys d6ae5bfc7b Update 2020-06-18 14:53:36 +02:00
Przemyslaw Klys 9cb4392140 update 2020-06-17 23:22:50 +02:00
Przemyslaw Klys c036634ac6 Update 2020-06-17 18:59:09 +02:00
Przemyslaw Klys 6a3049bc5c Update to Invoke-GPOZaurrPermission 2020-06-17 18:57:43 +02:00
Przemyslaw Klys 672c881927 Update 2020-06-17 14:04:08 +02:00
Przemyslaw Klys 6ffa7585c1 Update 2020-06-16 20:27:51 +02:00
Przemyslaw Klys 996621ab5c update readme 2020-06-15 16:01:50 +02:00
Przemyslaw Klys de890e5c12 Added new command Get-GPOZaurrLinkSummary 2020-06-15 16:01:11 +02:00
Przemyslaw Klys 3611028f5b Small display fix for canonical links 2020-06-15 16:00:54 +02:00
Przemyslaw Klys 1eb4f79cd8 Update 2020-06-08 08:40:43 +02:00
Przemyslaw Klys 576d70703a Update 2020-06-07 21:49:39 +02:00
Przemyslaw Klys 99cf500817 Updates 2020-06-07 21:48:41 +02:00
Przemyslaw Klys 7285dc7c9b Update version 2020-06-06 16:03:01 +02:00
Przemyslaw Klys e9a534d498 Updates 2020-06-06 15:44:25 +02:00
Przemyslaw Klys 2a31694ac3 Update 2020-05-31 16:04:54 +02:00
Przemyslaw Klys 33693a4880 Update 2020-05-31 16:03:53 +02:00
Przemyslaw Klys 261f38177f Update 2020-05-31 16:03:35 +02:00
Przemyslaw Klys 4e2ff76661 Example 2020-05-29 13:07:41 +02:00
Przemyslaw Klys 2370b95b69 Fix default parameter set 2020-05-29 13:07:06 +02:00
Przemyslaw Klys f7375bd537 Update 2020-05-28 15:36:57 +02:00
Przemyslaw Klys b57f131730 Replaced Owner, Added PerminType 2020-05-26 22:59:05 +02:00
Przemyslaw Klys 4acf509e2b Update 2020-05-26 19:16:32 +02:00
Przemyslaw Klys 4c0647b81f Remove Orphaned Sysvol Folders 2020-05-26 19:03:21 +02:00
Przemyslaw Klys 7415386a13 Update WMI filter 2020-05-26 18:32:06 +02:00
Przemyslaw Klys db7838fc18 Update SYSVOL/WMI 2020-05-26 18:31:57 +02:00
Przemyslaw Klys 19e6d514a1 Update psd1 2020-05-25 18:34:10 +02:00
Przemyslaw Klys 3375c10ee7 Update 2020-05-25 18:33:49 +02:00
Przemyslaw Klys ca030b5fee Improved function 2020-05-25 18:03:44 +02:00
Przemyslaw Klys 30660a9097 Update PSD1 2020-05-25 14:42:16 +02:00
Przemyslaw Klys 3e9848e705 Updates to functions 2020-05-25 14:40:59 +02:00
Przemyslaw Klys e04f5514f8 Cleanup dead code 2020-05-15 13:31:13 +02:00
Przemyslaw Klys 02dbe6c02c Small cleanup 2020-05-15 12:18:46 +02:00
Przemyslaw Klys 5959f31607 PSD1 update 2020-05-15 11:20:42 +02:00
Przemyslaw Klys 971f5a18e3 Update GPOZaurrAD 2020-05-15 11:20:03 +02:00
Przemyslaw Klys 6e81f6f80f More work 2020-05-14 22:27:48 +02:00
Przemyslaw Klys 6c607b28f3 Update PSD1 2020-05-14 17:43:12 +02:00
Przemyslaw Klys 288306228c Update 2020-05-14 17:28:14 +02:00
Przemyslaw Klys fb2285437a Update psd1 2020-05-14 13:42:16 +02:00
Przemyslaw Klys 3ff20afe30 Updated examples 2020-05-14 13:26:27 +02:00
Przemyslaw Klys ff6ad6735d Upgraded check for consistency of permissions 2020-05-14 13:26:16 +02:00
Przemyslaw Klys fe97c15741 Update small formatting 2020-05-14 13:21:15 +02:00
Przemyslaw Klys 66b60fdbfa PSD1 2020-05-14 00:12:11 +02:00
Przemyslaw Klys ba9f741a8d Repair inconsistency ACL 2020-05-14 00:11:32 +02:00
Przemyslaw Klys fc2ab5de2f Update to example 2020-05-13 22:59:48 +02:00
Przemyslaw Klys 131b92b2a1 PSD1 update 2020-05-13 22:59:40 +02:00
Przemyslaw Klys 3a4bf7ab56 Update Get-GPOZaurrOwner 2020-05-13 22:59:35 +02:00
Przemyslaw Klys 106a10d37b Updates to Get-GPOZaurrOwner to support Sysvol 2020-05-13 21:04:59 +02:00
Przemyslaw Klys b22d6ada7f Small formatting issues 2020-05-13 21:04:40 +02:00
Przemyslaw Klys cad485cd20 small formatting issues 2020-05-13 21:04:32 +02:00
178 changed files with 12195 additions and 1258 deletions
-3
View File
@@ -1,7 +1,4 @@
# These are supported funding model platforms
github: PrzemyslawKlys
patreon: przemyslawklys
ko_fi: przemyslawklys
open_collective: evotec
custom: https://paypal.me/PrzemyslawKlys
+2 -3
View File
@@ -1,9 +1,8 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Backup GPOs
$BackupPath = "$Env:UserProfile\Desktop\GPO"
$GPOSummary = Backup-GPOZaurr -BackupPath $BackupPath -Verbose -Type Unlinked -BackupDated #-LimitProcessing 1
$GPOSummary = Backup-GPOZaurr -BackupPath "$Env:UserProfile\Desktop\GPO" -Verbose -Type All -IncludeDomains 'ad.evotec.pl' #-BackupDated #-LimitProcessing 1
$GPOSummary | Format-Table -AutoSize
# Confirm GPOs are backed up properly
## Confirm GPOs are backed up properly
Get-GPOZaurrBackupInformation -BackupFolder $GPOSummary[0].BackupDirectory | Format-Table -a
@@ -1,5 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Remove GPOS
$BackupPath = "$Env:UserProfile\Desktop\GPO"
Remove-GPOZaurr -Type Empty, Unlinked -BackupPath $BackupPath -BackupDated -LimitProcessing 2 -Verbose
Remove-GPOZaurr -Type Empty, Unlinked -BackupPath "$Env:UserProfile\Desktop\GPO" -BackupDated -LimitProcessing 2 -Verbose -WhatIf
+7
View File
@@ -0,0 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#$GPOS = Get-GPOZaurr -GPOName 'TEST | Office Configuration'
#$GPOS | Format-Table -AutoSize *
$GPOS = Get-GPOZaurr -GPOName 'New Group Policy Object3'
$GPOS | Format-Table -AutoSize *
+1 -1
View File
@@ -1,7 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$GPOS = Get-GPOZaurr
$GPOS | Format-Table -AutoSize
$GPOS | Format-Table -AutoSize *
$GPOS[0] | Format-List
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrWMI -Name 'Test - Dual Filter' | Format-Table -AutoSize *
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Issues = Get-GPOZaurrPermissionIssue
$Issues | Format-Table
@@ -1,4 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$T = Get-GPOZaurrPermission -GPOName 'Default Domain Policy' -Type 'All'
$T = Get-GPOZaurrPermission -GPOName 'Default Domain Policy' -Type 'All' -IncludeOwner
$T | Format-Table *
@@ -1,4 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$T = Get-GPOZaurrPermission -Type Unknown -Verbose
$T | Format-Table *
$T | Out-HtmlView -ScrollX -Filtering -DisablePaging -ScrollY -Online
@@ -0,0 +1,19 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Step 1 - Create report
$Report = Get-GPOZaurrPermission -Type All
$Report | ConvertTo-Excel -FilePath $Env:UserProfile\Desktop\GPOOutput.xlsx -ExcelWorkSheetName 'GPO Permissions Before' -AutoFilter -AutoFit
# Step 2 - Verify couple of GPOS returned with whatif
#Remove-GPOZaurrPermission -Verbose -Type Unknown -LimitProcessing 4 -WhatIf
# Step 3 - Confirm the change without whatif
#Remove-GPOZaurrPermission -Verbose -Type Unknown -LimitProcessing 4
# Step 4 - Analyze GPO manually to confirm only unknown sids were removed
# Step 5 - if everything went ok, continue process without whatif
# Step-6 - Generate new report
#$Report = Get-GPOZaurrPermission -Type All
#$Report | ConvertTo-Excel -FilePath $Env:UserProfile\Desktop\GPOOutput.xlsx -ExcelWorkSheetName 'GPO Permissions After' -AutoFilter -AutoFit
@@ -1,15 +1,21 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# This Example shows how to deal with GPOs that have owner that doesn't exists anymore (deleted userr or diff domain) - EmptyOrUnknown
# This Example shows how to deal with GPOs that have owner that doesn't exists anymore (deleted userr or diff domain) - Unknown
# And also can fix at the same time NotAdministrative - this basically looks for users/groups that are not Domain Admins or Enterprise Admins
# regardless if current user is still Domain Admin or not
$GPOs = Get-GPOZaurrOwner -IncludeSysvol #-GPOName
$GPOs = Get-GPOZaurrOwner -IncludeSysvol
$GPOs | Format-Table DisplayName, Owner, OwnerSID, OwnerType, SysvolOwner, SysvolSID, SysvolType
Set-GPOZaurrOwner -Type NotAdministrative -Verbose -WhatIf #-LimitProcessing 12
Set-GPOZaurrOwner -Type Unknown -Verbose -WhatIf #-LimitProcessing 2
Set-GPOZaurrOwner -Type All -Verbose -LimitProcessing 2 -WhatIf -IncludeDomains 'ad.evotec.pl'
Set-GPOZaurrOwner -Type NotMatching -Verbose -LimitProcessing 2 -WhatIf
#Set-GPOZaurrOwner -GPOName 'New Group Policy Object' -Verbose -Principal 'przemyslaw.klys' -IncludeSysVol
# This will only set it to przemyslaw klys if the owner is not Domain Admins / Enterprise Admins
# it's not working currently for any other object
# You can enforce -Force to set it to any other principal
Set-GPOZaurrOwner -GPOName 'COMPUTERS | Enable Sets' -Verbose -Principal 'przemyslaw.klys' -WhatIf:$false -Force #-SkipSysvol
Set-GPOZaurrOwner -GPOName 'New Group Policy Object' -Verbose -WhatIf #-SkipSysvol
#$GPOs = Get-GPOZaurrOwner -IncludeSysvol #-GPOName 'New Group Policy Object'
#$GPOs | Format-Table DisplayName, Owner, OwnerSID
$GPOs = Get-GPOZaurrOwner -IncludeSysvol #-GPOName 'New Group Policy Object'
$GPOs | Format-Table DisplayName, Owner, OwnerSID
@@ -9,7 +9,7 @@ $GPOs | Format-Table DisplayName, Owner, OwnerSID, OwnerType
Set-GPOZaurrOwner -GPOName 'ALL | Enable RDP' -WhatIf
# If principal is given it is set (of course if it exits). Otherwise warning is returned.
Set-GPOZaurrOwner -GPOName 'ALL | Enable RDP' -Principal 'przemyslaw.klys' #-WhatIf
Set-GPOZaurrOwner -GPOName 'ALL | Enable RDP' -Principal 'przemyslaw.klys' -WhatIf
$GPOs = Get-GPOZaurr #-GPOName 'New Group Policy Object'
$GPOs | Format-Table DisplayName, Owner, OwnerSID, OwnerType
+12
View File
@@ -0,0 +1,12 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Step 1 - Create report
$Report = Get-GPOZaurrOwner -IncludeSysvol
$Report | ConvertTo-Excel -FilePath $Env:UserProfile\Desktop\GPOOwners.xlsx -ExcelWorkSheetName 'GPO Owners Before' -AutoFilter -AutoFit
# Step 2 - Fix owners / use WhatIf and LimitProcessing / verify changes before/after
Set-GPOZaurrOwner -Type All -Verbose:$true -WhatIf # -LimitProcessing 2
# Step 3
$Report = Get-GPOZaurrOwner -IncludeSysvol
$Report | ConvertTo-Excel -FilePath $Env:UserProfile\Desktop\GPOOwners.xlsx -ExcelWorkSheetName 'GPO Owners After' -AutoFilter -AutoFit
@@ -1,5 +1,6 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-ADOrganizationalUnit -Filter * -Properties distinguishedName, LinkedGroupPolicyObjects | Get-GPOZaurrLink | Format-Table
Get-ADOrganizationalUnit -Filter * -Properties canonicalname, distinguishedName, LinkedGroupPolicyObjects | Get-GPOZaurrLink | Format-Table
Get-ADObject -Filter * -Properties distinguishedName, gplink -Server 'ad.evotec.pl' | Get-GPOZaurrLink | Format-Table -AutoSize
Get-GPOZaurrLink | Format-Table -AutoSize
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrLink -Linked 'Root' -IncludeDomains 'ad.evotec.pl' | Format-Table
@@ -0,0 +1,5 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrLink -SearchBase "OU=ITR01,DC=ad,DC=evotec,DC=xyz" -Verbose | Format-Table -a *
Get-GPOZaurrLink -SearchBase "OU=ITR01,DC=ad,DC=evotec,DC=xyz" -SkipDuplicates | Format-Table -a *
+5
View File
@@ -0,0 +1,5 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Add-GPOZaurrPermission -Type AuthenticatedUsers -PermissionType GpoRead -LimitProcessing 3 -All -WhatIf -Verbose #-IncludeDomains 'ad.evotec.pl'
Add-GPOZaurrPermission -Type Administrative -PermissionType GpoEditDeleteModifySecurity -LimitProcessing 100 -All -WhatIf -Verbose #-IncludeDomains 'ad.evotec.pl'
+10
View File
@@ -0,0 +1,10 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Change per one GPO
Add-GPOZaurrPermission -GPOName 'New Group Policy Object' -Type AuthenticatedUsers -PermissionType GpoRead -Verbose -WhatIf
# Add to ALL GPOs that need it
Add-GPOZaurrPermission -Type AuthenticatedUsers -PermissionType GpoRead -All -WhatIf -Verbose
# Add Domain Admins/Enterprise Admins to all that need it
Add-GPOZaurrPermission -Type Administrative -PermissionType GpoEditDeleteModifySecurity -All -WhatIf -Verbose
+3
View File
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrPermission -IncludePermissionType GpoRead -Type AuthenticatedUsers -ReturnSecurityWhenNoData | Format-Table
@@ -1,17 +1,23 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Clear-Host
$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-IncludeGPOObject #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
$T | Format-Table -AutoSize *
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'przemyslaw.klys' -Verbose
#Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'CN=Przemysław Kłys,OU=Users,OU=Accounts,OU=Production,DC=ad,DC=evotec,DC=xyz' -PrincipalType DistinguishedName -Verbose #-WhatIf
#Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'CN=Administrator,OU=Special,OU=Accounts,OU=Production,DC=ad,DC=evotec,DC=xyz' -PrincipalType DistinguishedName -Verbose #-WhatIf
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose #-WhatIf
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'S-1-5-21-853615985-2870445339-3163598659-1105' -PrincipalType Sid -Verbose #-WhatIf
$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
$T | Format-Table -AutoSize *
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEditDeleteModifySecurity -Principal 'Domain Admins' -Verbose
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEditDeleteModifySecurity -Principal 'Domain Admins' -PrincipalType Name -Verbose #-WhatIf
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose #-WhatIf
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'EVOTEC\przemyslaw.klys' -PrincipalType NetbiosName -Verbose #-WhatIf
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'CN=Przemysław Kłys,OU=Users,OU=Accounts,OU=Production,DC=ad,DC=evotec,DC=xyz' -PrincipalType DistinguishedName -Verbose #-WhatIf
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Type NotAdministrative -Verbose
Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEditDeleteModifySecurity -PrincipalType DistinguishedName -Principal 'CN=Domain Admins,CN=Users,DC=ad,DC=evotec,DC=pl' -Verbose
$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
$T | Format-Table -AutoSize *
@@ -2,18 +2,37 @@
Clear-Host
$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-IncludeGPOObject #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
$T | Format-Table -AutoSize *
$GPOName = 'ALL | Enable RDP'
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEditDeleteModifySecurity -Principal 'Domain Admins' -Verbose
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoApply -Principal 'przemyslaw.klys' -Verbose
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEditDeleteModifySecurity -Principal 'przemyslaw.klys' -Verbose
Add-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoEdit -Principal 'przemyslaw.klys' -Verbose
$T = Get-GPOZaurrPermission -GPOName $GPOName -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow -Principal 'Domain Admins' -PrincipalType 'Name'
$T | Format-Table *
$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
$T | Format-Table -AutoSize *
<#
# this will go and check for both Domain Admins / Enterprise Admins - if found won't do anything
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Type Administrative -Verbose
# this will go thru, because PrincipalType is not set to look by Name. Be precise with what you ask for
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Principal 'Domain Admins' -Verbose
# this will be detected as already existing
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Principal 'Domain Admins' -PrincipalType Name -Verbose
# this will be added only if it doesn't exists - assuming that przemyslaw.klys is displayed in Get-GPOZaurrPermissions
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoApply -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose
# this will be added only if it doesn't exists - assuming that przemyslaw.klys is displayed in Get-GPOZaurrPermissions
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose
# this will ADD system if it doesn't eists
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Type WellKnownAdministrative -Verbose
#Remove-GPOZaurrPermission -GPOName 'ALL | Enable RDP' -PermissionType GpoApply -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoApply -Principal 'przemyslaw.klys' -Verbose
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEditDeleteModifySecurity -Principal 'przemyslaw.klys' -Verbose
# this will not work because we already have GPOEditDeleteModifySecurity which is higher than GpoEDIT
Add-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoEdit -Principal 'przemyslaw.klys' -Verbose
#>
Add-GPOZaurrPermission -GPOName $GPOName -Type AuthenticatedUsers -PermissionType GpoRead -Verbose #-WhatIf
#$T = Get-GPOZaurrPermission -GPOName 'ALL | Enable RDP' #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
#$T = Get-GPOZaurrPermission -GPOName $GPOName #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
#$T | Format-Table -AutoSize *
#Remove-GPOZaurrPermission -GPOName $GPOName -PermissionType GpoApply -Principal 'przemyslaw.klys' -PrincipalType Name -Verbose
#$T = Get-GPOZaurrPermission -GPOName $GPOName #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
#$T = Get-GPOZaurrPermission -GPOName $GPOName #-ExcludePermissionType GpoApply,GpoRead -IncludeGPOObject
#$T | Format-Table -AutoSize *
@@ -1,14 +1,6 @@
#Clear-Host
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$ApprovedGroups = @(
'GDS-TestGroup10'
)
$RootGroups = @(
#'przemyslaw.klys'
)
Invoke-GPOZaurrPermission -Linked Root -Verbose {
Set-GPOOwner -Type Administrative
#Set-GPOOwner -Principal 'EVOTEC\Enterprise Admins'
@@ -8,4 +8,4 @@ Invoke-GPOZaurrPermission -Verbose -SearchBase 'OU=Computers,OU=Production,DC=ad
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity
#Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity
#Add-GPOPermission -Type WellKnownAdministrative -IncludePermissionType GpoEditDeleteModifySecurity
} #-WhatIf #| Format-Table *
} -WhatIf #| Format-Table *
+42
View File
@@ -0,0 +1,42 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Apply permissions for ROOT
Invoke-GPOZaurrPermission -Verbose -Linked Root -IncludeDomains 'ad.evotec.xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf
# Apply perrmissions for Domain Controllers
Invoke-GPOZaurrPermission -Verbose -Linked DomainControllers -IncludeDomains 'ad.evotec.xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf
# Apply permissions for Regions, with exclusions for those 4 groups
$Exclude = @(
'CN=ITR01_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
)
Invoke-GPOZaurrPermission -Verbose -SearchBase 'OU=ITR01,DC=ad,DC=evotec,DC=xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow -ExcludePrincipal $Exclude -ExcludePrincipalType DistinguishedName
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf
$Exclude = @(
'CN=ITR02_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
#'CN=ITR03_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
#'CN=ITR04_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
)
Invoke-GPOZaurrPermission -Verbose -SearchBase 'OU=ITR02,DC=ad,DC=evotec,DC=xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow -ExcludePrincipal $Exclude -ExcludePrincipalType DistinguishedName
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf
+44
View File
@@ -0,0 +1,44 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Apply permissions for ROOT
Invoke-GPOZaurrPermission -Verbose -Linked Root -IncludeDomains 'ad.evotec.pl' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf -SkipDuplicates
# Apply perrmissions for Domain Controllers
Invoke-GPOZaurrPermission -Verbose -Linked DomainControllers -IncludeDomains 'ad.evotec.xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf -SkipDuplicates
# Apply permissions for Regions, with exclusions for those 4 groups
$Exclude = @(
'CN=ITR01_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
)
Invoke-GPOZaurrPermission -Verbose -SearchBase 'OU=ITR01,DC=ad,DC=evotec,DC=xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow -ExcludePrincipal $Exclude -ExcludePrincipalType DistinguishedName
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf -SkipDuplicates
$Exclude = @(
'CN=ITR02_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
#'CN=ITR03_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
#'CN=ITR04_AD Admins,OU=Security,OU=Groups,OU=Production,DC=ad,DC=evotec,DC=xyz'
)
Invoke-GPOZaurrPermission -Verbose -SearchBase 'OU=ITR02,DC=ad,DC=evotec,DC=xyz' {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow -ExcludePrincipal $Exclude -ExcludePrincipalType DistinguishedName
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf -SkipDuplicates
@@ -0,0 +1,9 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# This is a bit special - I would read blog post before running this
Invoke-GPOZaurrPermission -Verbose -Level 1 -Limit 1 {
Set-GPOOwner -Type Administrative
Remove-GPOPermission -Type NotAdministrative, NotWellKnownAdministrative -IncludePermissionType GpoEdit, GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type Administrative -IncludePermissionType GpoEditDeleteModifySecurity -PermitType Allow
Add-GPOPermission -Type AuthenticatedUsers -IncludePermissionType GpoRead -PermitType Allow
} -WhatIf
@@ -1,10 +0,0 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#Get-GPOZaurrPermissionConsistency -Type All -Forest 'test.evotec.pl' | Format-Table
Get-GPOZaurrPermissionConsistency -Type Inconsistent | ForEach-Object {
$G = Get-GPOZaurrAD -GPOGuid $_.ID.GUID -IncludeDomains $_.DomainName
$P = Get-GPOZaurrPermission -GPOGuid $_.ID.GUID
$F = Get-WinADShare -Path $G.Path
$P | Format-Table
$F | Format-Table
}
@@ -0,0 +1,5 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrPermissionConsistency -GPOName 'Default Domain Controllers Policy' -IncludeDomains 'ad.evotec.xyz'
Repair-GPOZaurrPermissionConsistency -GPOName 'Default Domain Controllers Policy' -IncludeDomains 'ad.evotec.xyz' -Verbose -WhatIf
@@ -0,0 +1,5 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrPermissionConsistency -Type All -VerifyInheritance | Format-Table
Repair-GPOZaurrPermissionConsistency -LimitProcessing 2 -WhatIf -Verbose
@@ -0,0 +1,9 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#Get-GPOZaurrPermissionConsistency -Type All -Forest 'test.evotec.pl' | Format-Table
$Output = Get-GPOZaurrPermissionConsistency -GPOName 'Default Domain Controllers Policy' -IncludeDomains 'ad.evotec.xyz' -VerifyInheritance
$Output | Format-Table DisplayName, DomainName, ACLConsistent, ACLConsistentInside
$Output.ACLConsistentInsideDetails | Format-Table
$Output = Get-GPOZaurrPermissionConsistency -VerifyInheritance -Type 'All'
$Output | Format-Table
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrSysvol -Verbose | Format-Table
#Get-GPOZaurrSysvol | Out-HtmlView -ScrollX
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrSysvol -VerifyDomainControllers -Verbose | Format-Table *
@@ -0,0 +1,10 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Find broken GPOs
Get-GPOZaurrBroken -Verbose -IncludeDomains 'ad.evotec.pl' | Format-Table
# this allows you to process X amount of orphaned folders/files (good for testing)
Remove-GPOZaurrBroken -Verbose -WhatIf #-IncludeDomains 'ad.evotec.pl' #-LimitProcessing 2
# this runs for whole SYSVOL and checks things against GPOS
Remove-GPOZaurrBroken -Verbose -IncludeDomains 'ad.evotec.xyz' -BackupPath $Env:UserProfile\Desktop\MyBackup1 -WhatIf
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrLegacyFiles | Format-Table -AutoSize
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Remove-GPOZaurrLegacyFiles -Verbose -BackupPath $Env:USERPROFILE\Desktop\BackupADM1 -BackupDated -RemoveEmptyFolders -WhatIf -LimitProcessing 2
+14
View File
@@ -0,0 +1,14 @@
Clear-Host
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#Get-GPOZaurrLinkSummary | Format-Table *
#Get-GPOZaurrLinkSummary -UnlimitedProperties | Format-Table *
#Get-GPOZaurrLinkSummary -Report 'MultipleLinks' -UnlimitedProperties | Format-Table *
#Get-GPOZaurrLinkSummary -Report 'OneLink' -UnlimitedProperties | Format-Table *
#Get-GPOZaurrLinkSummary -Report 'LinksSummary' -UnlimitedProperties | Format-Table *
$Report = Get-GPOZaurrLinkSummary #-UnlimitedProperties
$Report | Format-Table *
$Report.MultipleLinks | Format-Table *
$Report.OneLink | Format-Table *
$Report.LinksSummary | Format-Table *
+12
View File
@@ -0,0 +1,12 @@
Clear-Host
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Report = Get-GPOZaurrLinkSummary -Report OneLink
$Report | Format-Table
$AffectedGPOs = foreach ($GPO in $Report) {
if ($GPO.Level1 -gt 1) {
$GPO
}
}
$AffectedGPOs | Format-Table *
+6
View File
@@ -0,0 +1,6 @@
Clear-Host
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrFiles -Type All | Out-HtmlView -ScrollX -Filtering -AllProperties
Get-GPOZaurrFiles -HashAlgorithm MD5 | Select-Object -First 2 | ConvertTo-Excel -FilePath $Env:USERPROFILE\Desktop\GPOListFiles.xlsx -AllProperties -ExcelWorkSheetName 'Files Just 2' -AutoFilter -AutoFit #-OpenWorkBook
Get-GPOZaurrFiles -Type All -HashAlgorithm SHA256 | ConvertTo-Excel -FilePath $Env:USERPROFILE\Desktop\GPOListFiles.xlsx -AllProperties -ExcelWorkSheetName 'Files All' -AutoFilter -AutoFit #-OpenWorkBook
@@ -0,0 +1,6 @@
Clear-Host
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Dictionary = Get-GPOZaurrDictionary #-Splitter '; '
$Dictionary | Format-Table
$Dictionary | Out-HtmlView
+3
View File
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Save-GPOZaurrFiles -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExportEvotec' -DeleteExisting -Verbose
+22
View File
@@ -0,0 +1,22 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#$Output = Invoke-GPOZaurrContent -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPODefender'
$Output = Invoke-GPOZaurrContent -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExport' -Type WindowsHelloForBusiness
$Output | Format-Table
$Output.WindowsDefenderExploitGuard | Format-Table
$Output.Reports.RegistrySetting | Format-Table
# Report to Excel of translated reports
foreach ($Key in $Output.Keys) {
$Output[$Key] | ConvertTo-Excel -FilePath $Env:USERPROFILE\Desktop\GPOAnalysis.xlsx -ExcelWorkSheetName $Key -AutoFilter -AutoFit -FreezeTopRowFirstColumn
}
# Report to HTML of translated reports
New-HTML {
New-HTMLTableOption -DataStore JavaScript
foreach ($Key in $Output.Keys) {
New-HTMLTab -Name $Key {
New-HTMLTable -DataTable $Output[$Key] -Filtering -Title $Key
}
}
} -FilePath $Env:USERPROFILE\Desktop\GPOAnalysis.html -ShowHTML -Online
+8
View File
@@ -0,0 +1,8 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# This gets the same thing as earlier examples
# with a difference where one entry per gpo and all settings for that GPO is stored under settings property.
$Output = Invoke-GPOZaurrContent -SingleObject -Verbose
$Output | Format-Table
$Output.Reports.RegistrySettings | Format-Table *
$Output.Reports.RegistrySettings[0].Settings | Format-Table *
+15
View File
@@ -0,0 +1,15 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Use Save-GPOZaurrFiles -GPOPath $ENV:USERPROFILE\Desktop\GPOExportAudit
# This will allow you to process offline data more than once
# It's useful for when you want to request different types
$Output = Invoke-GPOZaurrContent -GPOPath $ENV:USERPROFILE\Desktop\GPOExportAudit -Extended -Verbose
$Output | Format-Table *
$Output.Reports | Format-Table
# Export to Excel
foreach ($Key in $Output.Reports.Keys) {
$Output.Reports[$Key] | ConvertTo-Excel -FilePath $Env:USERPROFILE\Desktop\GPOAnalysis.xlsx -ExcelWorkSheetName $Key -AutoFilter -AutoFit -FreezeTopRowFirstColumn
}
Start-Process "$Env:USERPROFILE\Desktop\GPOAnalysis.xlsx"
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Output = Invoke-GPOZaurrContent -Verbose -OutputType HTML, Object -Open
$Output | Format-Table
+23
View File
@@ -0,0 +1,23 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Asses GPO based on exported data
$Output = Invoke-GPOZaurrContent -GPOPath $Env:USERPROFILE\Desktop\GPOExport_2020.10.12 -Verbose -Type RegistrySetting
$Output | Format-Table *
# Export to Excel
foreach ($Key in $Output.Keys) {
$Output[$Key] | ConvertTo-Excel -FilePath $Env:USERPROFILE\Desktop\EFGPOAnalysis.xlsx -ExcelWorkSheetName $Key -AutoFilter -AutoFit -FreezeTopRowFirstColumn
}
# Show the Excel
Start-Process "$Env:USERPROFILE\Desktop\EFGPOAnalysis.xlsx"
# Show HTML
New-HTML {
New-HTMLTableOption -DataStore JavaScript
foreach ($Key in $Output.Keys) {
New-HTMLTab -Name $Key {
New-HTMLTable -DataTable $Output[$Key] -Filtering -Title $Key
}
}
} -FilePath $Env:USERPROFILE\Desktop\EFGPOAnalysis.html -ShowHTML -Online
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Output = Invoke-GPOZaurrContent -GPOPath $ENV:USERPROFILE\Desktop\GPOTestingUserAccess -Verbose
$Output | Format-Table *
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Files = Get-GPOZaurrFiles -Limited -Signature
$Files | ConvertTo-Excel -OpenWorkBook -FilePath $Env:USERPROFILE\Desktop\GPOTesting.xlsx -ExcelWorkSheetName 'GPO Output' -AutoFilter -AutoFit -FreezeTopRowFirstColumn
@@ -0,0 +1,6 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Policies = Get-GPOZaurrFilesPolicyDefinition -Signature
$Policies | Format-Table
#$Policies.FilesToDelete | Format-Table *
$Policies['ad.evotec.xyz'] | Format-Table *
@@ -0,0 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Report on empty folders
Get-GPOZaurrFolders -FolderType Empty | Format-Table *
# ! NOT READY FOR EMPTY
#Remove-GPOZaurrFolders -FolderType Empty -Verbose -BackupPath $Env:USERPROFILE\Desktop\SomeBackup1 -WhatIf
@@ -0,0 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Report on NTFRS folders
Get-GPOZaurrFolders -FolderType NTFRS | Format-Table *
# Remove NTFRS (broken replication folders)
Remove-GPOZaurrFolders -FolderType NTFRS -Verbose -BackupPath $Env:USERPROFILE\Desktop\SomeBackup -WhatIf
@@ -0,0 +1,10 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Cleanup based on https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/manually-clearing-the-conflictanddeleted-folder-in-dfsr/ba-p/395711
# Get dfsr information
$DFSR = Get-GPOZaurrSysvolDFSR
$DFSR | Format-Table *
# Cleanup DFSR Conflict Path
Clear-GPOZaurrSysvolDFSR -WhatIf
+81
View File
@@ -0,0 +1,81 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Invoke-GPOZaurrSupport -ComputerName 'ad1.ad.evotec.xyz' -UserName 'EVOTEC\przemyslaw.klys' -Type NativeHTML -ForceGPResult -Verbose
return
#$Support1 = Invoke-GPOZaurrSupport -ComputerName 'AD1' -UserName 'przemyslaw.klys' -Type Object
#$Support = Invoke-GPOZaurrSupport -ComputerName 'AD1' -UserName 'EVOTEC\Administrator' -Type Object
#$Support.ComputerResults.ExtensionData
foreach ($GpoType in @('UserResults', 'ComputerResults')) {
if ($Support.$GpoType.ExtensionData) {
foreach ($Extension in $Support.$GpoType.ExtensionData) {
$GPOSettingTypeSplit = ($Extension.type -split ':')
#$Extension
#$Extension | Get-Member -MemberType Properties -ErrorAction Stop
$KeysToLoop = $Extension | Get-Member -MemberType Properties -ErrorAction Stop | Where-Object { $_.Name -notin @($GPOSettingTypeSplit[0], 'xmlns', 'blocked', 'type') }
foreach ($GpoSettings in $KeysToLoop.Name) {
$Extension.$GpoSettings | Format-Table
}
}
}
}
# $env:LOGONSERVER
# if($env:LOGONSERVER -match "MicrosoftAccount") {"Logged on with Windows account"}
# If it reports \\MicrosoftAccount, they are using their Windows account to sign in instead of domain credentials.
#You can check this by using the IF statement as shown here:
#[System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name
#[System.DirectoryServices.ActiveDirectory.DomainController]::
# https://concurrency.com/blog/may-2018/domain-controller-selection
#echo %logonserver% - This shows the DC that was used to authenticate and log in the current user
#nltest /dsgetsite - This shows the AD site that the current server has detected that it's in
#nltest /dclist: (include the colon at the end) - This shows the list of DCs in the current domain, including which site each is in.
# nslookup -type=srv _ldap._tcp.mydomain.local. - This will query the primary DNS server for all domain controller SRV records. This should return all of the DCs in the domain. In this example, MGLABDC4 and MGLABDC5 are returned.
# nslookup -type=srv _ldap._tcp.mysitename._sites.dc._msdcs.mydomain.local. - This will query the primary DNS server for domain controllers that are registered in "mysitename". In this example, only MGLABDC4 is in the site that was queried, which matches the information we found with nltest /dclist: previously.
# Windows 10
#Add-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0'
#Add-WindowsCapability -Online -Name 'Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0'
#Remove-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0'
Write-Output %logonserver%
nltest /dsgetsite
nltest /dclist:
$env:LOGONSERVER
[System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name
nslookup -type=srv _ldap._tcp.ad.colmore.com.
nslookup -type=srv _ldap._tcp.birmingham._sites.dc._msdcs.ad.colmore.com.
function Get-PreData {
param(
)
[PSCustomObject] @{
Site = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name
}
}
function Get-ComputerDataInformation {
[cmdletBinding()]
param(
[string] $ComputerName = $Env:COMPUTERNAME
)
[PSCustomObject] @{
Bios = Get-ComputerBios -ComputerName $ComputerName
Network = Get-ComputerNetwork -ComputerName $ComputerName
NetworkCard = Get-ComputerNetworkCard -ComputerName $ComputerName
}
}
Get-ComputerDataInformation -ComputerName 'AD1.AD.EVOTEC.XYZ'
#Get-ComputerNetwork -ComputerName 'AD1.AD.EVOTEC.XYZ' #| Format-Table
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
ConvertFrom-CSExtension -CSE '{FC715823-C5FB-11D1-9EEF-00A0C90347FF}'
ConvertFrom-CSExtension -CSE '{A2E30F80-D7DE-11d2-BBDE-00C04F86AE3B}'
+21
View File
@@ -0,0 +1,21 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Extracts CSE from registry
$AllRegistryExtensions = Find-CSExtension
$AllRegistryExtensions | Format-Table
# Uses Hashtable - similar to above but much faster
$AllRegistryExtensionsFaster = foreach ($CSE in $AllRegistryExtensions) {
ConvertFrom-CSExtension -CSE $CSE.CSE
}
$AllRegistryExtensionsFaster | Format-Table
# With this we can find out if we're missing anything in hashtable so we can update code if nessecary
$MissingEntries = foreach ($CSE in $AllRegistryExtensions) {
$Output = ConvertFrom-CSExtension -CSE $CSE.CSE
if ($Output.CSE -eq $Output.Description) {
# THis means the value in hashtable is missing this entry and we should add it
$CSE
}
}
$MissingEntries | Format-Table
@@ -0,0 +1,10 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Get basic output DN, CanonicalName, BlockInheritance (True/False)
#$Objects = Get-GPOZaurrInheritance
#$Objects | Format-Table
# Get same output DN, CanonicalName, BlockInheritance (True/False) + Users/Computers + UsersCount/ComputerCount for those with Blocked Inhertiance
# This is so you can have a list what machines are affected
$Objects = Get-GPOZaurrInheritance -IncludeBlockedObjects -OnlyBlockedInheritance
$Objects | Format-Table
@@ -0,0 +1,10 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Default Permissions:
# 'GpoApply', 'GpoEdit', 'GPOCustom', 'GpoEditDeleteModifySecurity', 'GPORead'
# If you want to see also owners
# 'GpoOwner'
# If you want to include Root Level Permissions
# 'GpoRootCreate', 'GpoRootOwner'
$SummaryPermission = Get-GPOZaurrPermissionSummary -IncludePermissionType 'GpoCustom', 'GpoEdit', 'GpoEditDeleteModifySecurity', 'GpoOwner', 'GpoRootCreate', 'GpoRootOwner'
$SummaryPermission | Sort-Object -Property Permission | Format-Table
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrPermissionRoot -Verbose | Format-Table *
+4
View File
@@ -0,0 +1,4 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$FilesAll = Get-GPOZaurrNetlogon
$FilesAll | Format-Table -a *
+7
View File
@@ -0,0 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Output = Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -Type GPOOrphans -PassThru
$Output
Write-Color -Text 'Output of nested report' -Color DarkYellow -LinesBefore 1 -LinesAfter 1
$Output.GPOOrphans
+3
View File
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -Type NetLogonPermissions, GPOOrphans, GPOList, GPOConsistency, GPOOwners, GPODuplicates
+15
View File
@@ -0,0 +1,15 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Types = @(
@{ Name = 'GPOOwners'; Path = "$PSScriptRoot\Reports\GPOOwners.html" }
@{ Name = 'GPOConsistency'; Path = "$PSScriptRoot\Reports\GPOConsistency.html" }
@{ Name = 'GPODuplicates'; Path = "$PSScriptRoot\Reports\GPODuplicates.html" }
@{ Name = 'GPOList'; Path = "$PSScriptRoot\Reports\GPOList.html" }
@{ Name = 'GPOOrphans'; Path = "$PSScriptRoot\Reports\GPOOrphans.html" }
@{ Name = 'GPOPassword'; Path = "$PSScriptRoot\Reports\GPOPassword.html" }
@{ Name = 'NetLogonPermissions'; Path = "$PSScriptRoot\Reports\NetLogonPermissions.html" }
)
foreach ($Type in $Types) {
Invoke-GPOZaurr -FilePath $Type.Path -Type $Type.Name -HideHTML
}
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Repair-GPOZaurrNetLogonOwner -WhatIf:$true -Verbose -IncludeDomains ad.evotec.pl
+3
View File
@@ -0,0 +1,3 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
Get-GPOZaurrPassword -GPOPath 'C:\Users\przemyslaw.klys\Desktop\GPOExport_2020.10.12'
+2
View File
@@ -0,0 +1,2 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
+59
View File
@@ -0,0 +1,59 @@
$ModuleName = (Get-ChildItem $PSScriptRoot\*.psd1).BaseName
$PrimaryModule = Get-ChildItem -Path $PSScriptRoot -Filter '*.psd1' -Recurse -ErrorAction SilentlyContinue -Depth 1
if (-not $PrimaryModule) {
throw "Path $PSScriptRoot doesn't contain PSD1 files. Failing tests."
}
if ($PrimaryModule.Count -ne 1) {
throw 'More than one PSD1 files detected. Failing tests.'
}
$PSDInformation = Import-PowerShellDataFile -Path $PrimaryModule.FullName
$RequiredModules = @(
'Pester'
'PSWriteColor'
'PSParseHTML'
if ($PSDInformation.RequiredModules) {
$PSDInformation.RequiredModules
}
)
foreach ($Module in $RequiredModules) {
if ($Module -is [System.Collections.IDictionary]) {
$Exists = Get-Module -ListAvailable -Name $Module.ModuleName
if (-not $Exists) {
Write-Warning "$ModuleName - Downloading $($Module.ModuleName) from PSGallery"
Install-Module -Name $Module.ModuleName -Force -SkipPublisherCheck
}
} else {
$Exists = Get-Module -ListAvailable $Module -ErrorAction SilentlyContinue
if (-not $Exists) {
Install-Module -Name $Module -Force -SkipPublisherCheck
}
}
}
Write-Color 'ModuleName: ', $ModuleName, ' Version: ', $PSDInformation.ModuleVersion -Color Yellow, Green, Yellow, Green -LinesBefore 2
Write-Color 'PowerShell Version: ', $PSVersionTable.PSVersion -Color Yellow, Green
Write-Color 'PowerShell Edition: ', $PSVersionTable.PSEdition -Color Yellow, Green
Write-Color 'Required modules: ' -Color Yellow
foreach ($Module in $PSDInformation.RequiredModules) {
if ($Module -is [System.Collections.IDictionary]) {
Write-Color ' [>] ', $Module.ModuleName, ' Version: ', $Module.ModuleVersion -Color Yellow, Green, Yellow, Green
} else {
Write-Color ' [>] ', $Module -Color Yellow, Green
}
}
Write-Color
Import-Module $PSScriptRoot\*.psd1 -Force
Import-Module Pester -Force
$Configuration = [PesterConfiguration]::Default
$Configuration.Run.Path = "$PSScriptRoot\Tests"
$Configuration.Run.Exit = $true
$Configuration.Should.ErrorAction = 'Continue'
$Configuration.CodeCoverage.Enabled = $false
$Configuration.Output.Verbosity = 'Detailed'
$Result = Invoke-Pester -Configuration $Configuration
#$result = Invoke-Pester -Script $PSScriptRoot\Tests -Verbose -Output Detailed #-EnableExit
if ($Result.FailedCount -gt 0) {
throw "$($Result.FailedCount) tests failed."
}
+21 -16
View File
@@ -1,29 +1,34 @@
@{
AliasesToExport = ''
AliasesToExport = @('Get-GPOZaurrSysvol', 'Get-GPOZaurrFilesPolicyDefinitions', 'Show-GPOZaurr', 'Show-GPO', 'Find-GPO', 'Remove-GPOZaurrOrphaned')
Author = 'Przemyslaw Klys'
CmdletsToExport = @()
CompanyName = 'Evotec'
CompatiblePSEditions = 'Desktop'
CompatiblePSEditions = @('Desktop')
Copyright = '(c) 2011 - 2020 Przemyslaw Klys @ Evotec. All rights reserved.'
Description = 'Group Policy Eater'
FunctionsToExport = 'Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrLink', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurrPermission', 'New-GPOZaurrWMI', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner'
Description = 'Group Policy Eater is a PowerShell module that aims to gather information about Group Policies but also allows fixing issues that you may find in them.'
FunctionsToExport = @('Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Clear-GPOZaurrSysvolDFSR', 'ConvertFrom-CSExtension', 'Find-CSExtension', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrBroken', 'Get-GPOZaurrDictionary', 'Get-GPOZaurrDuplicateObject', 'Get-GPOZaurrFiles', 'Get-GPOZaurrFilesPolicyDefinition', 'Get-GPOZaurrFolders', 'Get-GPOZaurrInheritance', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrNetLogon', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrPermissionIssue', 'Get-GPOZaurrPermissionRoot', 'Get-GPOZaurrPermissionSummary', 'Get-GPOZaurrSysvolDFSR', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurr', 'Invoke-GPOZaurrContent', 'Invoke-GPOZaurrPermission', 'Invoke-GPOZaurrSupport', 'New-GPOZaurrWMI', 'Optimize-GPOZaurr', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrBroken', 'Remove-GPOZaurrDuplicateObject', 'Remove-GPOZaurrFolders', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrNetLogonOwner', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner')
GUID = 'f7d4c9e4-0298-4f51-ad77-e8e3febebbde'
ModuleVersion = '0.0.21'
ModuleVersion = '0.0.92'
PowerShellVersion = '5.1'
PrivateData = @{
PSData = @{
Tags = 'Windows', 'ActiveDirectory', 'GPO'
Tags = @('Windows', 'ActiveDirectory', 'GPO', 'GroupPolicy')
ProjectUri = 'https://github.com/EvotecIT/GPOZaurr'
ExternalModuleDependencies = 'ActiveDirectory', 'GroupPolicy', 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility'
ExternalModuleDependencies = @('CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
}
}
RequiredModules = @{
ModuleVersion = '0.0.140'
ModuleName = 'PSSharedGoods'
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
}, @{
ModuleVersion = '0.0.55'
ModuleName = 'ADEssentials'
Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
}, 'ActiveDirectory', 'GroupPolicy', 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility'
RequiredModules = @(@{
ModuleVersion = '0.0.189'
ModuleName = 'PSSharedGoods'
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
}, @{
ModuleVersion = '0.0.102'
ModuleName = 'ADEssentials'
Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
}, @{
ModuleVersion = '0.0.122'
ModuleName = 'PSWriteHTML'
Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c'
}, 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
RootModule = 'GPOZaurr.psm1'
}
+243
View File
@@ -0,0 +1,243 @@
function ConvertFrom-XMLRSOP {
[cmdletBinding()]
param(
[System.Xml.XmlElement]$Content,
[string] $ResultsType,
[Microsoft.GroupPolicy.GPRsop] $ResultantSetPolicy,
[string] $Splitter = [System.Environment]::NewLine
)
$GPOPrimary = [ordered] @{
Summary = $null
SummaryDetails = [System.Collections.Generic.List[PSCustomObject]]::new()
SummaryDownload = $null
ResultantSetPolicy = $ResultantSetPolicy
GroupPolicies = $null
GroupPoliciesLinks = $null
GroupPoliciesApplied = $null
GroupPoliciesDenied = $null
Results = [ordered]@{}
}
$Object = [ordered] @{
ReadTime = [DateTime] $Content.ReadTime
ComputerName = $Content.$ResultsType.Name
DomainName = $Content.$ResultsType.Domain
OrganizationalUnit = $Content.$ResultsType.SOM
Site = $Content.$ResultsType.Site
GPOTypes = $Content.$ResultsType.ExtensionData.Name.'#text' -join $Splitter
SlowLink = if ($Content.$ResultsType.SlowLink -eq 'true') { $true } else { $false };
}
$GPOPrimary['Summary'] = $Object
[Array] $GPOPrimary['SecurityGroups'] = foreach ($Group in $Content.$ResultsType.SecurityGroup) {
[PSCustomObject] @{
Name = $Group.Name.'#Text'
SID = $Group.SID.'#Text'
}
}
[Array] $GPOPrimary['GroupPolicies'] = foreach ($GPO in $Content.$ResultsType.GPO) {
<#
$EventsReason = @{
'NOTAPPLIED-EMPTY' = 'Not Applied (Empty)'
'DENIED-WMIFILTER' = 'Denied (WMI Filter)'
'DENIED-SECURITY' = 'Denied (Security)'
}
#>
# Lets translate CSE extensions as some didn't translate automatically
$ExtensionName = $GPO.ExtensionName | ForEach-Object {
ConvertFrom-CSExtension -CSE $_ -Limited
}
$GPOObject = [PSCustomObject] @{
Name = $GPO.Name
#Path = $GPO.Path
GUID = $GPO.Path.Identifier.'#text'
DomainName = if ($GPO.Path.Domain.'#text') { $GPO.Path.Domain.'#text' } else { 'Local Policy' };
#VersionDirectory = $GPO.VersionDirectory
#VersionSysvol = $GPO.VersionSysvol
Revision = -join ('AD (', $GPO.VersionDirectory, '), SYSVOL (', $GPO.VersionSysvol, ')')
IsValid = if ($GPO.IsValid -eq 'true') { $true } else { $false };
Status = if ($GPO.FilterAllowed -eq 'true' -and $GPO.AccessDenied -eq 'false') { 'Applied' } else { 'Denied' };
FilterAllowed = if ($GPO.FilterAllowed -eq 'true') { $true } else { $false };
AccessAllowed = if ($GPO.AccessDenied -eq 'true') { $false } else { $true };
FilterName = $GPO.FilterName # : Test
ExtensionName = ($ExtensionName | Sort-Object -Unique) -join '; '
# This isn't really pretty for large amount of links but can be useful for assesing things
SOMOrder = $GPO.Link.SOMOrder -join '; '
AppliedOrder = $GPO.Link.AppliedOrder -join '; '
LinkOrder = $GPO.Link.LinkOrder -join '; '
Enabled = ($GPO.Link.Enabled | ForEach-Object { if ($_ -eq 'true') { $true } else { $false }; }) -join '; '
Enforced = ($GPO.Link.NoOverride | ForEach-Object { if ($_ -eq 'true') { $true } else { $false }; }) -join '; ' # : true
SecurityFilter = $GPO.SecurityFilter -join '; ' # SecurityFilter : {NT AUTHORITY\Authenticated Users, EVOTEC\GDS-TestGroup3}
FilterId = $GPO.FilterID # : MSFT_SomFilter.ID="{ff08bc72-dae6-4890-b4cf-85a9c3b00056}",Domain="ad.evotec.xyz"
Links = $GPO.Link.SOMPath -join '; '
}
$GPOObject
}
[Array] $GPOPrimary['GroupPoliciesLinks'] = foreach ($GPO in $Content.$ResultsType.GPO) {
foreach ($Link in $GPO.Link) {
[PSCustomObject] @{
DisplayName = $GPO.Name
DomainName = $GPO.Path.Domain.'#text'
GUID = $GPO.Path.Identifier.'#text'
SOMPath = $Link.SOMPath # : ad.evotec.xyz
SOMOrder = $Link.SOMOrder # : 2
AppliedOrder = $Link.AppliedOrder # : 0
LinkOrder = $Link.LinkOrder # : 4
Enabled = if ($Link.Enabled -eq 'true') { $true } else { $false }; # : true
Enforced = if ($Link.NoOverride -eq 'true') { $true } else { $false }; # : true
}
}
}
[Array] $GPOPrimary['ScopeOfManagement'] = foreach ($SOM in $Content.$ResultsType.SearchedSOM) {
[PSCustomObject] @{
Path = $SOM.Path
Type = $SOM.Type
Order = $SOM.Order
BlocksInheritance = if ($SOM.BlocksInheritance -eq 'true') { $true } else { $false };
Blocked = if ($SOM.Blocked -eq 'true') { $true } else { $false };
Reason = if ($SOM.Reason -eq 'true') { $true } else { $false };
}
}
[Array] $GPOPrimary['ExtensionStatus'] = foreach ($Details in $Content.$ResultsType.ExtensionStatus) {
[PSCustomObject] @{
Name = $Details.Name # : Registry
Identifier = $Details.Identifier # : {35378EAC-683F-11D2-A89A-00C04FBBCFA2}
BeginTime = $Details.BeginTime # : 2020-04-02T12:05:10
EndTime = $Details.EndTime # : 2020-04-02T12:05:10
LoggingStatus = $Details.LoggingStatus # : Complete
Error = $Details.Error # : 0
}
}
[Array] $GPOPrimary['ExtensionData'] = $Content.$ResultsType.ExtensionData.Extension
foreach ($Single in $Content.$ResultsType.EventsDetails.SinglePassEventsDetails) {
$GPOPrimary['Results']["$($Single.ActivityId)"] = [ordered] @{}
$GPOPrimary['Results']["$($Single.ActivityId)"]['SummaryDetails'] = [Ordered] @{
ActivityId = $Single.ActivityId # : {6400d0bf-ac88-4ee6-b2c2-ca2cbbab0695}
ProcessingTrigger = $Single.ProcessingTrigger # : Periodic
ProcessingAppMode = $Single.ProcessingAppMode # : Background
LinkSpeedInKbps = $Single.LinkSpeedInKbps # : 0
SlowLinkThresholdInKbps = $Single.SlowLinkThresholdInKbps # : 500
DomainControllerName = $Single.DomainControllerName # : AD1.ad.evotec.xyz
DomainControllerIPAddress = $Single.DomainControllerIPAddress # : 192.168.240.189
PolicyProcessingMode = $Single.PolicyProcessingMode # : None
PolicyElapsedTimeInMilliseconds = $Single.PolicyElapsedTimeInMilliseconds # : 1202
ErrorCount = $Single.ErrorCount # : 0
WarningCount = $Single.WarningCount # : 0
}
$GPOPrimary['SummaryDetails'].Add([PSCustomObject] $GPOPrimary['Results']["$($Single.ActivityId)"]['SummaryDetails'])
[Array] $GPOPrimary['Results']["$($Single.ActivityId)"]['ProcessingTime'] = foreach ($Details in $Single.ExtensionProcessingTime) {
[PSCustomObject] @{
ExtensionName = $Details.ExtensionName
ExtensionGuid = $Details.ExtensionGuid
ElapsedTimeInMilliseconds = $Details.ElapsedTimeInMilliseconds
ProcessedTimeStamp = $Details.ProcessedTimeStamp
}
}
$EventsLevel = @{
'5' = 'Verbose'
'4' = 'Informational'
'3' = 'Warning'
'2' = 'Error'
'1' = 'Critical'
'0' = 'LogAlways'
}
$EventsReason = @{
'NOTAPPLIED-EMPTY' = 'Not Applied (Empty)'
'DENIED-WMIFILTER' = 'Denied (WMI Filter)'
'DENIED-SECURITY' = 'Denied (Security)'
}
[Array] $GPOPrimary['Results']["$($Single.ActivityId)"]['Events'] = foreach ($Event in $Single.EventRecord) {
[xml] $EventDetails = $Event.EventXML
$EventInformation = [ordered] @{
Description = $Event.EventDescription
Provider = $EventDetails.Event.System.Provider.Name # : Provider
ProviderGUID = $EventDetails.Event.System.Provider.Guid
EventID = $EventDetails.Event.System.EventID # : 4006
Version = $EventDetails.Event.System.Version # : 1
Level = $EventsLevel[$EventDetails.Event.System.Level] # : 4
Task = $EventDetails.Event.System.Task # : 0
Opcode = $EventDetails.Event.System.Opcode # : 1
Keywords = $EventDetails.Event.System.Keywords # : 0x4000000000000000
TimeCreated = [DateTime] $EventDetails.Event.System.TimeCreated.SystemTime # : TimeCreated, 2020-08-09T20:16:44.5668052Z
EventRecordID = $EventDetails.Event.System.EventRecordID # : 10641325
Correlation = $EventDetails.Event.System.Correlation.ActivityID # : Correlation
Execution = -join ("ProcessID: ", $EventDetails.Event.System.Execution.ProcessID, " ThreadID: ", $EventDetails.Event.System.Execution.ThreadID) # : Execution
Channel = $EventDetails.Event.System.Channel # : Microsoft-Windows-GroupPolicy / Operational
Computer = $EventDetails.Event.System.Computer # : AD1.ad.evotec.xyz
Security = $EventDetails.Event.System.Security.UserID # : Security
}
foreach ($Entry in $EventDetails.Event.EventData.Data) {
$EventInformation["$($Entry.Name)"] = $Entry.'#text'
}
[PSCustomObject] $EventInformation
}
# Lets build events by ID, this will be useful for better/easier processing
$GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID'] = [ordered] @{}
$GroupedEvents = $GPOPrimary['Results']["$($Single.ActivityId)"]['Events'] | Group-Object -Property EventId
foreach ($Events in $GroupedEvents) {
$GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID'][$Events.Name] = $Events.Group
}
$GPOPrimary['Results']["$($Single.ActivityId)"]['GroupPoliciesApplied'] = & {
if ($GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5312']) {
[xml] $GPODetailsApplied = -join ('<Details>', $GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5312'].GPOinfoList, '</Details>')
foreach ($GPO in $GPODetailsApplied.Details.GPO) {
$ReturnObject = [ordered] @{
GUID = $GPO.ID # : { 4E1F9C70-1DDB-4AB6-BBA3-14A8E07F0B4B }
DisplayName = $GPO.Name # : DC | Event Log Settings
Version = $GPO.Version # : 851981
Link = $GPO.SOM # : LDAP: / / OU = Domain Controllers, DC = ad, DC = evotec, DC = xyz
SysvolPath = $GPO.FSPath # : \\ad.evotec.xyz\SysVol\ad.evotec.xyz\Policies\ { 4E1F9C70-1DDB-4AB6-BBA3-14A8E07F0B4B }\Machine
#GPOTypes = $GPO.Extensions -join '; ' # : [ { 35378EAC-683F-11D2-A89A-00C04FBBCFA2 } { D02B1F72 - 3407 - 48AE-BA88-E8213C6761F1 }]
}
$TranslatedExtensions = foreach ($Extension in $GPO.Extensions) {
ConvertFrom-CSExtension -CSE $Extension -Limited
}
$ReturnObject['GPOTypes'] = $TranslatedExtensions -join '; '
[PSCustomObject] $ReturnObject
}
}
}
$GPOPrimary['Results']["$($Single.ActivityId)"]['GroupPoliciesDenied'] = & {
if ($GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5312']) {
[xml] $GPODetailsDenied = -join ('<Details>', $GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5313'].GPOinfoList, '</Details>')
foreach ($GPO in $GPODetailsDenied.Details.GPO) {
[PSCustomObject] @{
GUID = $GPO.ID #: { 6AC1786C-016F-11D2-945F-00C04fB984F9 }
DisplayName = $GPO.Name #: Default Domain Controllers Policy
Version = $GPO.Version #: 131074
Link = $GPO.SOM #: LDAP: / / OU = Domain Controllers, DC = ad, DC = evotec, DC = xyz
SysvolPath = $GPO.FSPath #: \\ad.evotec.xyz\sysvol\ad.evotec.xyz\Policies\ { 6AC1786C-016F-11D2-945F-00C04fB984F9 }\Machine
Reason = $EventsReason["$($GPO.Reason)"] #: DENIED-WMIFILTER
}
}
}
}
$GPOPrimary['Results']["$($Single.ActivityId)"]['SummaryDownload'] = & {
if ($GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126']) {
[PSCustomObject] @{
IsBackgroundProcessing = if ($GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126'].IsBackgroundProcessing -eq 'true') { $true } else { $false }; # : true
IsAsyncProcessing = if ($GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126'].IsAsyncProcessing -eq 'true') { $true } else { $false }; # : false
Downloaded = $GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126'].NumberOfGPOsDownloaded # : 7
Applicable = $GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126'].NumberOfGPOsApplicable # : 6
DownloadTimeMiliseconds = $GPOPrimary['Results']["$($Single.ActivityId)"]['EventsByID']['5126'].GPODownloadTimeElapsedInMilliseconds # : 375
}
}
}
}
$GPOPrimary
}
+95
View File
@@ -0,0 +1,95 @@
function ConvertTo-XMLAccountPolicy {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = @(
$Settings = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
ClearTextPassword = 'Not Set'
LockoutBadCount = 'Not Set'
LockoutDuration = 'Not Set'
MaximumPasswordAge = 'Not Set'
MinimumPasswordAge = 'Not Set'
MinimumPasswordLength = 'Not Set'
PasswordComplexity = 'Not Set'
PasswordHistorySize = 'Not Set'
ResetLockoutCount = 'Not Set'
MaxClockSkew = 'Not Set'
MaxRenewAge = 'Not Set'
MaxServiceAge = 'Not Set'
MaxTicketAge = 'Not Set'
TicketValidateClient = 'Not Set'
}
foreach ($GPOEntry in $GPO.DataSet) {
if ($GPOEntry.SettingBoolean) {
$Settings[$($GPOEntry.Name)] = if ($GPOEntry.SettingBoolean -eq 'true') { 'Enabled' } elseif ($GPOEntry.SettingBoolean -eq 'false') { 'Disabled' } else { 'Not set' };
} elseif ($GPOEntry.SettingNumber) {
$Settings[$($GPOEntry.Name)] = [int] $GPOEntry.SettingNumber
}
}
[PSCustomObject] $Settings
)
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
ClearTextPassword = 'Not Set'
LockoutBadCount = 'Not Set'
LockoutDuration = 'Not Set'
MaximumPasswordAge = 'Not Set'
MinimumPasswordAge = 'Not Set'
MinimumPasswordLength = 'Not Set'
PasswordComplexity = 'Not Set'
PasswordHistorySize = 'Not Set'
ResetLockoutCount = 'Not Set'
MaxClockSkew = 'Not Set'
MaxRenewAge = 'Not Set'
MaxServiceAge = 'Not Set'
MaxTicketAge = 'Not Set'
TicketValidateClient = 'Not Set'
}
foreach ($GPOEntry in $GPO.DataSet) {
if ($GPOEntry.SettingBoolean) {
$CreateGPO[$($GPOEntry.Name)] = if ($GPOEntry.SettingBoolean -eq 'true') { 'Enabled' } elseif ($GPOEntry.SettingBoolean -eq 'false') { 'Disabled' } else { 'Not set' };
} elseif ($GPOEntry.SettingNumber) {
$CreateGPO[$($GPOEntry.Name)] = [int] $GPOEntry.SettingNumber
}
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
+231
View File
@@ -0,0 +1,231 @@
function ConvertTo-XMLAudit {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
$SettingType = @{
'0' = 'No Auditing'
'1' = 'Success'
'2' = 'Failure'
'3' = 'Success, Failure'
}
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = @(
$Settings = [ordered]@{
AuditAccountLogon = 'Not configured'
AuditAccountManage = 'Not configured'
AuditDSAccess = 'Not configured'
AuditLogonEvents = 'Not configured'
AuditObjectAccess = 'Not configured'
AuditPolicyChange = 'Not configured'
AuditPrivilegeUse = 'Not configured'
AuditProcessTracking = 'Not configured'
AuditSystemEvents = 'Not configured'
# Advanced Policies
AuditAccountLockout = 'Not configured'
AuditApplicationGenerated = 'Not configured'
AuditApplicationGroupManagement = 'Not configured'
AuditAuditPolicyChange = 'Not configured'
AuditAuthenticationPolicyChange = 'Not configured'
AuditAuthorizationPolicyChange = 'Not configured'
AuditCentralAccessPolicyStaging = 'Not configured'
AuditCertificationServices = 'Not configured'
AuditComputerAccountManagement = 'Not configured'
AuditCredentialValidation = 'Not configured'
AuditDetailedDirectoryServiceReplication = 'Not configured'
AuditDetailedFileShare = 'Not configured'
AuditDirectoryServiceAccess = 'Not configured'
AuditDirectoryServiceChanges = 'Not configured'
AuditDirectoryServiceReplication = 'Not configured'
AuditDistributionGroupManagement = 'Not configured'
AuditDPAPIActivity = 'Not configured'
AuditFileShare = 'Not configured'
AuditFileSystem = 'Not configured'
AuditFilteringPlatformConnection = 'Not configured'
AuditFilteringPlatformPacketDrop = 'Not configured'
AuditFilteringPlatformPolicyChange = 'Not configured'
AuditGroupMembership = 'Not configured'
AuditHandleManipulation = 'Not configured'
AuditIPsecDriver = 'Not configured'
AuditIPsecExtendedMode = 'Not configured'
AuditIPsecMainMode = 'Not configured'
AuditIPsecQuickMode = 'Not configured'
AuditKerberosAuthenticationService = 'Not configured'
AuditKerberosServiceTicketOperations = 'Not configured'
AuditKernelObject = 'Not configured'
AuditLogoff = 'Not configured'
AuditLogon = 'Not configured'
AuditMPSSVCRuleLevelPolicyChange = 'Not configured'
AuditNetworkPolicyServer = 'Not configured'
AuditNonSensitivePrivilegeUse = 'Not configured'
AuditOtherAccountLogonEvents = 'Not configured'
AuditOtherAccountManagementEvents = 'Not configured'
AuditOtherLogonLogoffEvents = 'Not configured'
AuditOtherObjectAccessEvents = 'Not configured'
AuditOtherPolicyChangeEvents = 'Not configured'
AuditOtherPrivilegeUseEvents = 'Not configured'
AuditOtherSystemEvents = 'Not configured'
AuditPNPActivity = 'Not configured'
AuditProcessCreation = 'Not configured'
AuditProcessTermination = 'Not configured'
AuditRegistry = 'Not configured'
AuditRemovableStorage = 'Not configured'
AuditRPCEvents = 'Not configured'
AuditSAM = 'Not configured'
AuditSecurityGroupManagement = 'Not configured'
AuditSecurityStateChange = 'Not configured'
AuditSecuritySystemExtension = 'Not configured'
AuditSensitivePrivilegeUse = 'Not configured'
AuditSpecialLogon = 'Not configured'
AuditSystemIntegrity = 'Not configured'
AuditUserDeviceClaims = 'Not configured'
AuditUserAccountManagement = 'Not configured'
}
foreach ($GPOEntry in $GPO.DataSet) {
if ($GPOEntry.PolicyTarget) {
# Category = 'AuditSettings', Settings = 'AuditSetting'
$Category = $GPOEntry.SubcategoryName -replace ' ', '' -replace '-', '' -replace '/', ''
if ($Settings["$($Category)"]) {
$Settings["$($Category)"] = $SettingType["$($GPOEntry.SettingValue)"]
}
} else {
# Category = 'SecuritySettings', Settings = 'Audit'
$SuccessAttempts = try { [bool]::Parse($GPOEntry.SuccessAttempts) } catch { $null };
$FailureAttempts = try { [bool]::Parse($GPOEntry.FailureAttempts) } catch { $null };
if ($SuccessAttempts -and $FailureAttempts) {
$Setting = 'Success, Failure'
} elseif ($SuccessAttempts) {
$Setting = 'Success'
} elseif ($FailureAttempts) {
$Setting = 'Failure'
} else {
$Setting = 'Not configured'
}
$Settings["$($GPOEntry.Name)"] = $Setting
}
}
[PSCustomObject] $Settings
)
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
AuditAccountLogon = 'Not configured'
AuditAccountManage = 'Not configured'
AuditDSAccess = 'Not configured'
AuditLogonEvents = 'Not configured'
AuditObjectAccess = 'Not configured'
AuditPolicyChange = 'Not configured'
AuditPrivilegeUse = 'Not configured'
AuditProcessTracking = 'Not configured'
AuditSystemEvents = 'Not configured'
# Advanced Policies
AuditAccountLockout = 'Not configured'
AuditApplicationGenerated = 'Not configured'
AuditApplicationGroupManagement = 'Not configured'
AuditAuditPolicyChange = 'Not configured'
AuditAuthenticationPolicyChange = 'Not configured'
AuditAuthorizationPolicyChange = 'Not configured'
AuditCentralAccessPolicyStaging = 'Not configured'
AuditCertificationServices = 'Not configured'
AuditComputerAccountManagement = 'Not configured'
AuditCredentialValidation = 'Not configured'
AuditDetailedDirectoryServiceReplication = 'Not configured'
AuditDetailedFileShare = 'Not configured'
AuditDirectoryServiceAccess = 'Not configured'
AuditDirectoryServiceChanges = 'Not configured'
AuditDirectoryServiceReplication = 'Not configured'
AuditDistributionGroupManagement = 'Not configured'
AuditDPAPIActivity = 'Not configured'
AuditFileShare = 'Not configured'
AuditFileSystem = 'Not configured'
AuditFilteringPlatformConnection = 'Not configured'
AuditFilteringPlatformPacketDrop = 'Not configured'
AuditFilteringPlatformPolicyChange = 'Not configured'
AuditGroupMembership = 'Not configured'
AuditHandleManipulation = 'Not configured'
AuditIPsecDriver = 'Not configured'
AuditIPsecExtendedMode = 'Not configured'
AuditIPsecMainMode = 'Not configured'
AuditIPsecQuickMode = 'Not configured'
AuditKerberosAuthenticationService = 'Not configured'
AuditKerberosServiceTicketOperations = 'Not configured'
AuditKernelObject = 'Not configured'
AuditLogoff = 'Not configured'
AuditLogon = 'Not configured'
AuditMPSSVCRuleLevelPolicyChange = 'Not configured'
AuditNetworkPolicyServer = 'Not configured'
AuditNonSensitivePrivilegeUse = 'Not configured'
AuditOtherAccountLogonEvents = 'Not configured'
AuditOtherAccountManagementEvents = 'Not configured'
AuditOtherLogonLogoffEvents = 'Not configured'
AuditOtherObjectAccessEvents = 'Not configured'
AuditOtherPolicyChangeEvents = 'Not configured'
AuditOtherPrivilegeUseEvents = 'Not configured'
AuditOtherSystemEvents = 'Not configured'
AuditPNPActivity = 'Not configured'
AuditProcessCreation = 'Not configured'
AuditProcessTermination = 'Not configured'
AuditRegistry = 'Not configured'
AuditRemovableStorage = 'Not configured'
AuditRPCEvents = 'Not configured'
AuditSAM = 'Not configured'
AuditSecurityGroupManagement = 'Not configured'
AuditSecurityStateChange = 'Not configured'
AuditSecuritySystemExtension = 'Not configured'
AuditSensitivePrivilegeUse = 'Not configured'
AuditSpecialLogon = 'Not configured'
AuditSystemIntegrity = 'Not configured'
AuditUserDeviceClaims = 'Not configured'
AuditUserAccountManagement = 'Not configured'
}
foreach ($GPOEntry in $GPO.DataSet) {
if ($GPOEntry.PolicyTarget) {
# Category = 'AuditSettings', Settings = 'AuditSetting'
$Category = $GPOEntry.SubcategoryName -replace ' ', '' -replace '-', '' -replace '/', ''
if ($CreateGPO["$($Category)"]) {
$CreateGPO["$($Category)"] = $SettingType["$($GPOEntry.SettingValue)"]
}
} else {
# Category = 'SecuritySettings', Settings = 'Audit'
$SuccessAttempts = try { [bool]::Parse($GPOEntry.SuccessAttempts) } catch { $null };
$FailureAttempts = try { [bool]::Parse($GPOEntry.FailureAttempts) } catch { $null };
if ($SuccessAttempts -and $FailureAttempts) {
$Setting = 'Success, Failure'
} elseif ($SuccessAttempts) {
$Setting = 'Success'
} elseif ($FailureAttempts) {
$Setting = 'Failure'
} else {
$Setting = 'Not configured'
}
$CreateGPO["$($GPOEntry.Name)"] = $Setting
}
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
+75
View File
@@ -0,0 +1,75 @@
function ConvertTo-XMLDriveMapSettings {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Entry in $GPO.DataSet.Drive) {
[PSCustomObject] @{
Changed = [DateTime] $Entry.changed
#uid = $Entry.uid
GPOSettingOrder = $Entry.GPOSettingOrder
Filter = $Entry.Filter
Name = $Entry.Name
Status = $Entry.status
Action = $Script:Actions["$($Entry.Properties.action)"]
ThisDrive = $Entry.Properties.thisDrive
AllDrives = $Entry.Properties.allDrives
UserName = $Entry.Properties.userName
Path = $Entry.Properties.path
Label = $Entry.Properties.label
Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
UseLetter = if ($Entry.Properties.useLetter -eq '1') { $true } elseif ($Entry.Properties.useLetter -eq '0') { $false } else { $Entry.Properties.useLetter };
Letter = $Entry.Properties.letter
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Entry in $GPO.DataSet.Drive) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Changed = [DateTime] $Entry.changed
#uid = $Entry.uid
GPOSettingOrder = $Entry.GPOSettingOrder
Filter = $Entry.Filter
Name = $Entry.Name
Status = $Entry.status
Action = $Script:Actions["$($Entry.Properties.action)"]
ThisDrive = $Entry.Properties.thisDrive
AllDrives = $Entry.Properties.allDrives
UserName = $Entry.Properties.userName
Path = $Entry.Properties.path
Label = $Entry.Properties.label
Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
UseLetter = if ($Entry.Properties.useLetter -eq '1') { $true } elseif ($Entry.Properties.useLetter -eq '0') { $false } else { $Entry.Properties.useLetter };
Letter = $Entry.Properties.letter
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+51
View File
@@ -0,0 +1,51 @@
function ConvertTo-XMLEventLog {
[cmdletBinding()]
param(
[PSCustomObject] $GPO
)
$RetionPeriod = @{
'0' = 'Overwrite events as needed'
'1' = 'Overwrite events by days'
'2' = 'Do not overwrite events (Clear logs manually)'
}
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
ApplicationAuditLogRetentionPeriod = $null
ApplicationMaximumLogSize = $null
ApplicationRestrictGuestAccess = $null
ApplicationRetentionDays = $null
SystemAuditLogRetentionPeriod = $null
SystemMaximumLogSize = $null
SystemRestrictGuestAccess = $null
SystemRetentionDays = $null
SecurityAuditLogRetentionPeriod = $null
SecurityMaximumLogSize = $null
SecurityRestrictGuestAccess = $null
SecurityRetentionDays = $null
}
foreach ($GPOEntry in $GPO.DataSet) {
if ($GPOEntry.SettingBoolean) {
$CreateGPO["$($GPOEntry.Log)$($GPOEntry.Name)"] = if ($GPOEntry.SettingBoolean -eq 'true') { 'Enabled' } elseif ($GPOEntry.SettingBoolean -eq 'false') { 'Disabled' } else { 'Not set' };
} elseif ($GPOEntry.SettingNumber) {
if ($GPOEntry.Name -eq 'AuditLogRetentionPeriod') {
if ($GPOEntry.SettingNumber) {
$CreateGPO["$($GPOEntry.Log)$($GPOEntry.Name)"] = $RetionPeriod[$($GPOEntry.SettingNumber)]
} else {
# Won't happen?
$CreateGPO["$($GPOEntry.Log)$($GPOEntry.Name)"] = $GPOEntry.SettingNumber
}
} else {
$CreateGPO["$($GPOEntry.Log)$($GPOEntry.Name)"] = $GPOEntry.SettingNumber
}
}
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
+179
View File
@@ -0,0 +1,179 @@
function ConvertTo-XMLGenericPolicy {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[string[]] $Category,
[switch] $SingleObject
)
$UsedNames = [System.Collections.Generic.List[string]]::new()
[Array] $Policies = foreach ($Cat in $Category) {
$GPO.DataSet | Where-Object { $_.Category -like $Cat }
}
if ($Policies.Count -gt 0) {
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = @(
$Settings = [ordered] @{}
foreach ($Policy in $Policies) {
#if ($Policy.Category -notlike $Category) {
# We check again for Category because one GPO can have multiple categories
# First check checks GPO globally,
# continue
#}
$Name = Format-ToTitleCase -Text $Policy.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$Settings[$Name] = $Policy.State
foreach ($Setting in @('DropDownList', 'Numeric', 'EditText', 'Text', 'CheckBox', 'ListBox')) {
if ($Policy.$Setting) {
foreach ($Value in $Policy.$Setting) {
if ($Value.Name) {
$SubName = Format-ToTitleCase -Text $Value.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$SubName = -join ($Name, $SubName)
if ($SubName -notin $UsedNames) {
$UsedNames.Add($SubName)
} else {
$TimesUsed = $UsedNames | Group-Object | Where-Object { $_.Name -eq $SubName }
$NumberToUse = $TimesUsed.Count + 1
# We add same name 2nd and 3rd time to make sure we count properly
$UsedNames.Add($SubName)
# We now build property name based on amnount of times
$SubName = -join ($SubName, "$NumberToUse")
}
if ($Value.Value -is [string]) {
$Settings["$SubName"] = $Value.Value
} elseif ($Value.Value -is [System.Xml.XmlElement]) {
<#
if ($null -eq $Value.Value.Name) {
# Shouldn't happen but lets see
Write-Verbose $Value
} else {
$CreateGPO["$SubName"] = $Value.Value.Name
}
#>
if ($Value.Value.Element) {
$Settings["$SubName"] = $Value.Value.Element.Data -join '; '
} elseif ($null -eq $Value.Value.Name) {
# Shouldn't happen but lets see
Write-Verbose "Tracking $Value"
} else {
$Settings["$SubName"] = $Value.Value.Name
}
} elseif ($Value.State) {
$Settings["$SubName"] = $Value.State
} elseif ($null -eq $Value.Value) {
# This is most likely Setting 'Text
# Do nothing, usually it's just a text to display
#Write-Verbose "Skipping value for display because it's empty. Name: $($Value.Name)"
} else {
# shouldn't happen
Write-Verbose $Value
}
}
}
}
}
}
[PSCustomObject] $Settings
)
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
foreach ($Policy in $Policies) {
#if ($Policy.Category -notlike $Category) {
# We check again for Category because one GPO can have multiple categories
# First check checks GPO globally,
# continue
#}
$Name = Format-ToTitleCase -Text $Policy.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$CreateGPO[$Name] = $Policy.State
foreach ($Setting in @('DropDownList', 'Numeric', 'EditText', 'Text', 'CheckBox', 'ListBox')) {
if ($Policy.$Setting) {
foreach ($Value in $Policy.$Setting) {
if ($Value.Name) {
$SubName = Format-ToTitleCase -Text $Value.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$SubName = -join ($Name, $SubName)
if ($SubName -notin $UsedNames) {
$UsedNames.Add($SubName)
} else {
$TimesUsed = $UsedNames | Group-Object | Where-Object { $_.Name -eq $SubName }
$NumberToUse = $TimesUsed.Count + 1
# We add same name 2nd and 3rd time to make sure we count properly
$UsedNames.Add($SubName)
# We now build property name based on amnount of times
$SubName = -join ($SubName, "$NumberToUse")
}
if ($Value.Value -is [string]) {
$CreateGPO["$SubName"] = $Value.Value
} elseif ($Value.Value -is [System.Xml.XmlElement]) {
<#
if ($null -eq $Value.Value.Name) {
# Shouldn't happen but lets see
Write-Verbose $Value
} else {
$CreateGPO["$SubName"] = $Value.Value.Name
}
#>
if ($Value.Value.Element) {
$CreateGPO["$SubName"] = $Value.Value.Element.Data -join '; '
} elseif ($null -eq $Value.Value.Name) {
# Shouldn't happen but lets see
Write-Verbose "Tracking $Value"
} else {
$CreateGPO["$SubName"] = $Value.Value.Name
}
} elseif ($Value.State) {
$CreateGPO["$SubName"] = $Value.State
} elseif ($null -eq $Value.Value) {
# This is most likely Setting 'Text
# Do nothing, usually it's just a text to display
#Write-Verbose "Skipping value for display because it's empty. Name: $($Value.Name)"
} else {
# shouldn't happen
Write-Verbose $Value
}
}
}
}
}
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
#}
}
}
}
+106
View File
@@ -0,0 +1,106 @@
function ConvertTo-XMLGenericPublicKey {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[string[]] $Category,
[switch] $SingleObject
)
$SkipNames = ('Name', 'LocalName', 'NamespaceURI', 'Prefix', 'NodeType', 'ParentNode', 'OwnerDocument', 'IsEmpty', 'Attributes', 'HasAttributes', 'SchemaInfo', 'InnerXml', 'InnerText', 'NextSibling', 'PreviousSibling', 'ChildNodes', 'FirstChild', 'LastChild', 'HasChildNodes', 'IsReadOnly', 'OuterXml', 'BaseURI', 'PreviousText')
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Setting in $GPO.DataSet) {
$SettingName = $Setting.Name -split ":"
$MySettings = [ordered] @{
CreatedTime = $GPO.CreatedTime # : 06.06.2020 18:03:36
ModifiedTime = $GPO.ModifiedTime # : 17.06.2020 16:08:10
ReadTime = $GPO.ReadTime # : 13.08.2020 10:15:37
SecurityDescriptor = $GPO.SecurityDescriptor # : SecurityDescriptor
FilterDataAvailable = $GPO.FilterDataAvailable # : True
}
$Name = $SettingName[1]
#$Name = Format-ToTitleCase -Text $Setting.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$MySettings['Name'] = $Name # $Setting.Name
ConvertTo-XMLNested -CreateGPO $MySettings -Setting $Setting -SkipNames $SkipNames #-Name $Name
[PSCustomObject] $MySettings
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Setting in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
$SettingName = $Setting.Name -split ":"
$CreateGPO['CreatedTime'] = $GPO.CreatedTime # : 06.06.2020 18:03:36
$CreateGPO['ModifiedTime'] = $GPO.ModifiedTime # : 17.06.2020 16:08:10
$CreateGPO['ReadTime'] = $GPO.ReadTime # : 13.08.2020 10:15:37
$CreateGPO['SecurityDescriptor'] = $GPO.SecurityDescriptor # : SecurityDescriptor
$CreateGPO['FilterDataAvailable'] = $GPO.FilterDataAvailable # : True
$Name = $SettingName[1]
#$Name = Format-ToTitleCase -Text $Setting.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$CreateGPO['Name'] = $Name # $Setting.Name
#$CreateGPO['GPOSettingOrder'] = $Setting.GPOSettingOrder
#foreach ($Property in ($Setting.Properties | Get-Member -MemberType Properties).Name) {
ConvertTo-XMLNested -CreateGPO $CreateGPO -Setting $Setting -SkipNames $SkipNames #-Name $Name
<#
$Properties = $Setting.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames }
foreach ($Property in $Properties) {
If ($Property -eq 'Value') {
if ($Setting.$Property) {
#$SubProperties = $Setting.$Property.PSObject.Properties.Name
if ($Setting.$Property.Name) {
$Name = $Setting.$Property.Name
} else {
$Name = 'Value'
}
if ($Setting.$Property.Number) {
$CreateGPO[$Name] = $Setting.$Property.Number
} elseif ($Setting.$Property.String) {
$CreateGPO[$Name] = $Setting.$Property.String
} else {
throw
}
}
} else {
$Name = Format-CamelCaseToDisplayName -Text $Property #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
if ($Setting.$Property -is [System.Xml.XmlElement]) {
$SubPropeties = $Setting.$Property.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames }
} else {
$CreateGPO[$Name] = $Setting.$Property
}
}
}
#>
$CreateGPO['Filters'] = $Setting.Filters
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
@@ -0,0 +1,45 @@
function ConvertTo-XMLGenericSecuritySettings {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[string[]] $Category
)
$SkipNames = ('Name', 'LocalName', 'NamespaceURI', 'Prefix', 'NodeType', 'ParentNode', 'OwnerDocument', 'IsEmpty', 'Attributes', 'HasAttributes', 'SchemaInfo', 'InnerXml', 'InnerText', 'NextSibling', 'PreviousSibling', 'Value', 'ChildNodes', 'FirstChild', 'LastChild', 'HasChildNodes', 'IsReadOnly', 'OuterXml', 'BaseURI', 'PreviousText')
#$UsedNames = [System.Collections.Generic.List[string]]::new()
[Array] $Settings = foreach ($Cat in $Category) {
$GPO.DataSet | Where-Object { $null -ne $_.$Cat }
}
if ($Settings.Count -gt 0) {
foreach ($Cat in $Category) {
foreach ($Setting in $Settings.$Cat) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
#$Name = Format-ToTitleCase -Text $Setting.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$CreateGPO['Name'] = $Setting.Name
$CreateGPO['GPOSettingOrder'] = $Setting.GPOSettingOrder
#foreach ($Property in ($Setting.Properties | Get-Member -MemberType Properties).Name) {
$Properties = $Setting.Properties.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames }
foreach ($Property in $Properties) {
$Name = Format-CamelCaseToDisplayName -Text $Property #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
$CreateGPO[$Name] = $Setting.Properties.$Property
}
$CreateGPO['Filters'] = $Setting.Filters
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
}
+126
View File
@@ -0,0 +1,126 @@
function ConvertTo-XMLLocalGroups {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
if (-not $GPO.DataSet.Group) {
continue
}
[Array] $CreateGPO['Settings'] = foreach ($Group in $GPO.DataSet.Group) {
# We're mostly interested in Members
[Array] $Members = foreach ($Member in $Group.Properties.Members.Member) {
[ordered] @{
MemberName = $Member.Name
MemberAction = $Member.Action
MemberSID = $Member.SID
}
}
# if we have no members we create dummy object to make sure we can use foreach below
if ($Members.Count -eq 0) {
$Members = @(
[ordered] @{
MemberName = $null
MemberAction = $null
MemberSID = $null
}
)
}
foreach ($Member in $Members) {
$GroupObject = [ordered]@{
Changed = [DateTime] $Group.Changed
GPOSettingOrder = $Group.GPOSettingOrder
Name = $Group.name
Action = $Script:Actions["$($Group.Properties.action)"]
GroupName = $Group.Properties.groupName #: Administrators (built -in )
NewName = $Group.Properties.newName #:
Description = $Group.Properties.description #:
DeleteAllUsers = if ($Group.Properties.deleteAllUsers -eq '1') { 'Enabled' } elseif ($Group.Properties.deleteAllUsers -eq '0') { 'Disabled' } else { $Group.Properties.deleteAllUsers };
DeleteAllGroups = if ($Group.Properties.deleteAllGroups -eq '1') { 'Enabled' } elseif ($Group.Properties.deleteAllGroups -eq '0') { 'Disabled' } else { $Group.Properties.deleteAllGroups };
RemoveAccounts = if ($Group.Properties.removeAccounts -eq '1') { 'Enabled' } elseif ($Group.Properties.removeAccounts -eq '0') { 'Disabled' } else { $Group.Properties.removeAccounts };
GroupSid = $Group.Properties.groupSid #: S - 1 - 5 - 32 - 544
}
$Last = [ordered] @{
#Uid = $Group.uid #: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}
RunInLoggedOnUserSecurityContext = if ($Group.userContext -eq '1') { 'Enabled' } elseif ($Group.userContext -eq '0') { 'Disabled' } else { $Group.userContext };
RemoveThisItemWhenItIsNoLongerApplied = if ($Group.removePolicy -eq '1') { 'Enabled' } elseif ($Group.removePolicy -eq '0') { 'Disabled' } else { $Group.removePolicy };
Filters = $Group.Filters #::
}
# Merging GPO with Member
$GroupObject = $GroupObject + $Member + $Last
[PSCustomObject] $GroupObject
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Group in $GPO.DataSet.Group) {
# We're mostly interested in Members
[Array] $Members = foreach ($Member in $Group.Properties.Members.Member) {
[ordered] @{
MemberName = $Member.Name
MemberAction = $Member.Action
MemberSID = $Member.SID
}
}
# if we have no members we create dummy object to make sure we can use foreach below
if ($Members.Count -eq 0) {
$Members = @(
[ordered] @{
MemberName = $null
MemberAction = $null
MemberSID = $null
}
)
}
foreach ($Member in $Members) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPO.GpoCategory #: SecuritySettings
#GpoSettings = $GPO.GpoSettings #: SecurityOptions
Changed = [DateTime] $Group.Changed
GPOSettingOrder = $Group.GPOSettingOrder
Name = $Group.name
Action = $Script:Actions["$($Group.Properties.action)"]
GroupName = $Group.Properties.groupName #: Administrators (built -in )
NewName = $Group.Properties.newName #:
Description = $Group.Properties.description #:
DeleteAllUsers = if ($Group.Properties.deleteAllUsers -eq '1') { 'Enabled' } elseif ($Group.Properties.deleteAllUsers -eq '0') { 'Disabled' } else { $Group.Properties.deleteAllUsers };
DeleteAllGroups = if ($Group.Properties.deleteAllGroups -eq '1') { 'Enabled' } elseif ($Group.Properties.deleteAllGroups -eq '0') { 'Disabled' } else { $Group.Properties.deleteAllGroups };
RemoveAccounts = if ($Group.Properties.removeAccounts -eq '1') { 'Enabled' } elseif ($Group.Properties.removeAccounts -eq '0') { 'Disabled' } else { $Group.Properties.removeAccounts };
GroupSid = $Group.Properties.groupSid #: S - 1 - 5 - 32 - 544
}
$Last = [ordered] @{
# Uid = $Group.uid #: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}
RunInLoggedOnUserSecurityContext = if ($Group.userContext -eq '1') { 'Enabled' } elseif ($Group.userContext -eq '0') { 'Disabled' } else { $Group.userContext };
RemoveThisItemWhenItIsNoLongerApplied = if ($Group.removePolicy -eq '1') { 'Enabled' } elseif ($Group.removePolicy -eq '0') { 'Disabled' } else { $Group.removePolicy };
Filters = $Group.Filters #::
}
# Merging GPO with Member
$CreateGPO = $CreateGPO + $Member + $Last
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
}
+74
View File
@@ -0,0 +1,74 @@
function ConvertTo-XMLLocalUser {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
if (-not $GPO.DataSet.User) {
continue
}
[Array] $CreateGPO['Settings'] = foreach ($User in $GPO.DataSet.User) {
[PSCustomObject] @{
Changed = [DateTime] $User.Changed
GPOSettingOrder = $User.GPOSettingOrder
Action = $Script:Actions["$($User.Properties.action)"]
UserName = $User.Properties.userName
NewName = $User.Properties.newName
FullName = $User.Properties.fullName
Description = $User.Properties.description
Password = $User.Properties.cpassword
MustChangePasswordAtNextLogon = if ($User.Properties.changeLogon -eq '1') { $true } elseif ($User.Properties.changeLogon -eq '0') { $false } else { $User.Properties.changeLogon };
CannotChangePassword = if ($User.Properties.noChange -eq '1') { $true } elseif ($User.Properties.noChange -eq '0') { $false } else { $User.Properties.noChange };
PasswordNeverExpires = if ($User.Properties.neverExpires -eq '1') { $true } elseif ($User.Properties.neverExpires -eq '0') { $false } else { $User.Properties.neverExpires };
AccountIsDisabled = if ($User.Properties.acctDisabled -eq '1') { $true } elseif ($User.Properties.acctDisabled -eq '0') { $false } else { $User.Properties.acctDisabled };
AccountExpires = try { [DateTime] $User.Properties.expires } catch { $User.Properties.expires };
SubAuthority = $User.Properties.subAuthority
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($User in $GPO.DataSet.User) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPO.GpoCategory #: SecuritySettings
#GpoSettings = $GPO.GpoSettings #: SecurityOptions
Changed = [DateTime] $User.Changed
GPOSettingOrder = $User.GPOSettingOrder
Action = $Script:Actions["$($User.Properties.action)"]
UserName = $User.Properties.userName
NewName = $User.Properties.newName
FullName = $User.Properties.fullName
Description = $User.Properties.description
Password = $User.Properties.cpassword
MustChangePasswordAtNextLogon = if ($User.Properties.changeLogon -eq '1') { $true } elseif ($User.Properties.changeLogon -eq '0') { $false } else { $User.Properties.changeLogon };
CannotChangePassword = if ($User.Properties.noChange -eq '1') { $true } elseif ($User.Properties.noChange -eq '0') { $false } else { $User.Properties.noChange };
PasswordNeverExpires = if ($User.Properties.neverExpires -eq '1') { $true } elseif ($User.Properties.neverExpires -eq '0') { $false } else { $User.Properties.neverExpires };
AccountIsDisabled = if ($User.Properties.acctDisabled -eq '1') { $true } elseif ($User.Properties.acctDisabled -eq '0') { $false } else { $User.Properties.acctDisabled };
AccountExpires = try { [DateTime] $User.Properties.expires } catch { $User.Properties.expires };
SubAuthority = $User.Properties.subAuthority
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+49
View File
@@ -0,0 +1,49 @@
function ConvertTo-XMLNested {
[cmdletBinding()]
param(
[System.Collections.IDictionary] $CreateGPO,
[System.Xml.XmlElement] $Setting,
[string[]] $SkipNames,
[string] $Name
)
$Properties = $Setting.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames }
$TempName = $Name
foreach ($Property in $Properties) {
If ($Property -eq 'Value') {
if ($Setting.$Property) {
#$SubProperties = $Setting.$Property.PSObject.Properties.Name
if ($Setting.$Property.Name) {
$Name = $Setting.$Property.Name
} else {
if (-not $Name) {
$Name = 'Value'
}
}
if ($Setting.$Property.Number) {
$CreateGPO[$Name] = $Setting.$Property.Number
} elseif ($Setting.$Property.String) {
$CreateGPO[$Name] = $Setting.$Property.String
} else {
$CreateGPO[$Name] = $Setting.$Property
#throw
}
}
} else {
$Name = -join ($Name, $Property)
$Name = Format-CamelCaseToDisplayName -Text $Name #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
if ($Setting.$Property -is [System.Xml.XmlElement]) {
#$SubPropeties = $Setting.$Property.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames }
ConvertTo-XMLNested -Setting $Setting.$Property -CreateGPO $CreateGPO -Name $Name -SkipNames $SkipNames
} else {
$CreateGPO[$Name] = $Setting.$Property
}
}
$Name = $TempName
}
}
+61
View File
@@ -0,0 +1,61 @@
function ConvertTo-XMLPolicies {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Policy in $GPO.DataSet) {
[PSCustomObject] @{
PolicyName = $Policy.Name
PolicyState = $Policy.State
PolicyCategory = $Policy.Category
PolicySupported = $Policy.Supported
PolicyExplain = $Policy.Explain
PolicyText = $Policy.Text
PolicyCheckBox = $Policy.CheckBox
PolicyDropDownList = $Policy.DropDownList
PolicyEditText = $Policy.EditText
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Policy in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
PolicyName = $Policy.Name
PolicyState = $Policy.State
PolicyCategory = $Policy.Category
PolicySupported = $Policy.Supported
PolicyExplain = $Policy.Explain
PolicyText = $Policy.Text
PolicyCheckBox = $Policy.CheckBox
PolicyDropDownList = $Policy.DropDownList
PolicyEditText = $Policy.EditText
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+51
View File
@@ -0,0 +1,51 @@
function ConvertTo-XMLPrinter {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = @(
foreach ($Type in @('SharedPrinter', 'PortPrinter', 'LocalPrinter')) {
foreach ($Entry in $GPO.DataSet.$Type) {
if ($Entry) {
ConvertTo-XMLPrinterInternal -GPO $GPO -Entry $Entry -Type $Type -Limited
}
}
}
if ($GPO.GpoCategory -eq 'PrinterConnectionSettings') {
foreach ($Entry in $GPO.DataSet) {
ConvertTo-XMLPrinterInternal -GPO $GPO -Entry $Entry -Type 'PrinterConnections' -Limited
}
}
)
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Type in @('SharedPrinter', 'PortPrinter', 'LocalPrinter')) {
foreach ($Entry in $GPO.DataSet.$Type) {
if ($Entry) {
ConvertTo-XMLPrinterInternal -GPO $GPO -Entry $Entry -Type $Type
}
}
}
if ($GPO.GpoCategory -eq 'PrinterConnectionSettings') {
foreach ($Entry in $GPO.DataSet) {
ConvertTo-XMLPrinterInternal -GPO $GPO -Entry $Entry -Type 'PrinterConnections'
}
}
}
}
+95
View File
@@ -0,0 +1,95 @@
function ConvertTo-XMLPrinterInternal {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
$Entry,
$Type,
[switch] $Limited
)
if ($Limited) {
$CreateGPO = [ordered]@{
Changed = try { [DateTime] $Entry.changed } catch { $Entry.Changed };
#uid = $Entry.uid
BypassErrors = if ($Entry.bypassErrors -eq '1') { $true } else { $false };
GPOSettingOrder = $Entry.GPOSettingOrder
Filter = $Entry.Filter
type = $Type
Action = $null #$Script:Actions["$($Entry.Properties.action)"]
Comment = $Entry.Properties.comment
Path = if ($Entry.Properties.path) { $Entry.Properties.Path } elseif ($Entry.Path) { $Entry.Path } else { '' }
Location = $Entry.Properties.location
HostName = $Entry.Properties.ipAddress #: 10.42.20.204
LocalName = $Entry.Properties.localName #: CZ02PRT00017
UseDNS = if ($Entry.Properties.useDNS -eq '1') { $true } elseif ($Entry.Properties.useDNS -eq '0') { $false } else { $Entry.Properties.useDNS };
UseIPv6 = if ($Entry.Properties.useIPv6 -eq '1') { $true } elseif ($Entry.Properties.useIPv6 -eq '0') { $false } else { $Entry.Properties.useIPv6 };
Default = if ($Entry.Properties.default -eq '1') { $true } elseif ($Entry.Properties.default -eq '0') { $false } else { $Entry.Properties.default };
SkipLocal = if ($Entry.Properties.skipLocal -eq '1') { $true } elseif ($Entry.Properties.skipLocal -eq '0') { $false } else { $Entry.Properties.skipLocal };
DeleteAllShared = if ($Entry.Properties.deleteAll -eq '1') { $true } elseif ($Entry.Properties.deleteAll -eq '0') { $false } else { $Entry.Properties.deleteAll };
Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
DeleteMaps = if ($Entry.Properties.deleteMaps -eq '1') { $true } elseif ($Entry.Properties.deleteMaps -eq '0') { $false } else { $Entry.Properties.deleteMaps };
LPRSettingsQueueName = $Entry.Properties.lprQueue #:
Protocol = $Entry.Properties.protocol #: PROTOCOL_RAWTCP_TYPE
PortNumber = if ($Entry.Properties.portNumber) { $Entry.Properties.portNumber } else { $Entry.Properties.port }
DoubleSpool = if ($Entry.Properties.doubleSpool -eq '1') { $true } elseif ($Entry.Properties.doubleSpool -eq '0') { $false } else { $Entry.Properties.doubleSpool };
SNMPEnabled = if ($Entry.Properties.snmpEnabled -eq '1') { $true } elseif ($Entry.Properties.snmpEnabled -eq '0') { $false } else { $Entry.Properties.snmpEnabled };
SNMPCommunityName = $Entry.Properties.snmpCommunity #: public
SNMPDeviceIndex = $Entry.Properties.snmpDevIndex #: 1
}
if ($Entry.Properties.Action) {
$CreateGPO['Action'] = $Script:Actions["$($Entry.Properties.action)"]
} else {
$CreateGPO['Action'] = 'Deploy'
}
[PSCustomObject] $CreateGPO
} else {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
GpoCategory = $GPO.GpoCategory
GpoSettings = $GPO.GpoSettings
Changed = try { [DateTime] $Entry.changed } catch { $Entry.Changed };
#uid = $Entry.uid
BypassErrors = if ($Entry.bypassErrors -eq '1') { $true } else { $false };
GPOSettingOrder = $Entry.GPOSettingOrder
Filter = $Entry.Filter
type = $Type
Action = $null #$Script:Actions["$($Entry.Properties.action)"]
Comment = $Entry.Properties.comment
Path = if ($Entry.Properties.path) { $Entry.Properties.Path } elseif ($Entry.Path) { $Entry.Path } else { '' }
Location = $Entry.Properties.location
HostName = $Entry.Properties.ipAddress #: 10.42.20.204
LocalName = $Entry.Properties.localName #: CZ02PRT00017
UseDNS = if ($Entry.Properties.useDNS -eq '1') { $true } elseif ($Entry.Properties.useDNS -eq '0') { $false } else { $Entry.Properties.useDNS };
UseIPv6 = if ($Entry.Properties.useIPv6 -eq '1') { $true } elseif ($Entry.Properties.useIPv6 -eq '0') { $false } else { $Entry.Properties.useIPv6 };
Default = if ($Entry.Properties.default -eq '1') { $true } elseif ($Entry.Properties.default -eq '0') { $false } else { $Entry.Properties.default };
SkipLocal = if ($Entry.Properties.skipLocal -eq '1') { $true } elseif ($Entry.Properties.skipLocal -eq '0') { $false } else { $Entry.Properties.skipLocal };
DeleteAllShared = if ($Entry.Properties.deleteAll -eq '1') { $true } elseif ($Entry.Properties.deleteAll -eq '0') { $false } else { $Entry.Properties.deleteAll };
Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
DeleteMaps = if ($Entry.Properties.deleteMaps -eq '1') { $true } elseif ($Entry.Properties.deleteMaps -eq '0') { $false } else { $Entry.Properties.deleteMaps };
LPRSettingsQueueName = $Entry.Properties.lprQueue #:
Protocol = $Entry.Properties.protocol #: PROTOCOL_RAWTCP_TYPE
PortNumber = if ($Entry.Properties.portNumber) { $Entry.Properties.portNumber } else { $Entry.Properties.port }
DoubleSpool = if ($Entry.Properties.doubleSpool -eq '1') { $true } elseif ($Entry.Properties.doubleSpool -eq '0') { $false } else { $Entry.Properties.doubleSpool };
SNMPEnabled = if ($Entry.Properties.snmpEnabled -eq '1') { $true } elseif ($Entry.Properties.snmpEnabled -eq '0') { $false } else { $Entry.Properties.snmpEnabled };
SNMPCommunityName = $Entry.Properties.snmpCommunity #: public
SNMPDeviceIndex = $Entry.Properties.snmpDevIndex #: 1
}
if ($Entry.Properties.Action) {
$CreateGPO['Action'] = $Script:Actions["$($Entry.Properties.action)"]
} else {
$CreateGPO['Action'] = 'Deploy'
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
@@ -0,0 +1,49 @@
function ConvertTo-XMLRegistryAutologon {
[cmdletBinding()]
param(
[PSCustomObject] $GPO
)
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
AutoAdminLogon = $null
DefaultDomainName = $null
DefaultUserName = $null
DefaultPassword = $null
DateChangedAutoAdminLogon = $null
DateChangedDefaultDomainName = $null
DateChangedDefaultUserName = $null
DateChangedDefaultPassword = $null
}
foreach ($Registry in $GPO.DataSet.Registry) {
if ($Registry.Properties.Key -eq 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon') {
if ($Registry.Properties.Name -eq 'AutoAdminLogon') {
$CreateGPO['AutoAdminLogon'] = [bool] $Registry.Properties.value
$CreateGPO['DateChangedAutoAdminLogon'] = [DateTime] $Registry.changed
} elseif ($Registry.Properties.Name -eq 'DefaultDomainName') {
$CreateGPO['DefaultDomainName'] = $Registry.Properties.value
$CreateGPO['DateChangedDefaultDomainName'] = [DateTime] $Registry.changed
} elseif ($Registry.Properties.Name -eq 'DefaultUserName') {
$CreateGPO['DefaultUserName'] = $Registry.Properties.value
$CreateGPO['DateChangedDefaultUserName'] = [DateTime] $Registry.changed
} elseif ($Registry.Properties.Name -eq 'DefaultPassword') {
$CreateGPO['DefaultPassword'] = $Registry.Properties.value
$CreateGPO['DateChangedDefaultPassword'] = [DateTime] $Registry.changed
}
}
}
if ($null -ne $CreateGPO['AutoAdminLogon'] -or
$null -ne $CreateGPO['DefaultDomainName'] -or
$null -ne $CreateGPO['DefaultUserName'] -or
$null -ne $CreateGPO['DefaultPassword']
) {
$CreateGPO['Linked'] = $GPOEntry.Linked
$CreateGPO['LinksCount'] = $GPOEntry.LinksCount
$CreateGPO['Links'] = $GPOEntry.Links
[PSCustomObject] $CreateGPO
}
}
@@ -0,0 +1,49 @@
function ConvertTo-XMLRegistryAutologonOnReport {
[cmdletBinding()]
param(
[PSCustomObject] $GPO
)
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
AutoAdminLogon = $null
DefaultDomainName = $null
DefaultUserName = $null
DefaultPassword = $null
DateChangedAutoAdminLogon = $null
DateChangedDefaultDomainName = $null
DateChangedDefaultUserName = $null
DateChangedDefaultPassword = $null
}
foreach ($Registry in $GPO.Settings) {
if ($Registry.Key -eq 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon') {
if ($Registry.Name -eq 'AutoAdminLogon') {
$CreateGPO['AutoAdminLogon'] = [bool] $Registry.value
$CreateGPO['DateChangedAutoAdminLogon'] = [DateTime] $Registry.changed
} elseif ($Registry.Name -eq 'DefaultDomainName') {
$CreateGPO['DefaultDomainName'] = $Registry.value
$CreateGPO['DateChangedDefaultDomainName'] = [DateTime] $Registry.changed
} elseif ($Registry.Name -eq 'DefaultUserName') {
$CreateGPO['DefaultUserName'] = $Registry.value
$CreateGPO['DateChangedDefaultUserName'] = [DateTime] $Registry.changed
} elseif ($Registry.Name -eq 'DefaultPassword') {
$CreateGPO['DefaultPassword'] = $Registry.value
$CreateGPO['DateChangedDefaultPassword'] = [DateTime] $Registry.changed
}
}
}
if ($null -ne $CreateGPO['AutoAdminLogon'] -or
$null -ne $CreateGPO['DefaultDomainName'] -or
$null -ne $CreateGPO['DefaultUserName'] -or
$null -ne $CreateGPO['DefaultPassword']
) {
$CreateGPO['Linked'] = $GPO.Linked #: True
$CreateGPO['LinksCount'] = $GPO.LinksCount #: 1
$CreateGPO['Links'] = $GPO.Links #: area1.local
[PSCustomObject] $CreateGPO
}
}
@@ -0,0 +1,76 @@
function ConvertTo-XMLRegistryInternetExplorerZones {
[cmdletBinding()]
param(
[PSCustomObject] $GPO
)
foreach ($Registry in $GPO.Settings) {
$Keys = @(
'Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\'
'Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains\'
)
$Found = $false
foreach ($Key in $Keys) {
if ($Registry.Key -like "$Key*") {
$Found = $true
}
}
if ($Found -eq $false) {
continue
}
# https://support.microsoft.com/en-us/help/182569/internet-explorer-security-zones-registry-entries-for-advanced-users
if ($Registry.Key -like 'Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\*') {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
$CreateGPO['Disabled'] = $Registry.Disabled
if ($Registry.Key -like '*EscDomains*') {
$CreateGPO['Configuration'] = 'Enhanced Security Configuration (ESC)'
} else {
$CreateGPO['Configuration'] = 'Domains'
}
if ($Registry.Hive -eq 'HKEY_CURRENT_USER') {
$CreateGPO['Type'] = 'User Policy'
} elseif ($Registry.Hive -eq 'HKEY_LOCAL_MACHINE') {
$CreateGPO['Type'] = 'Computer Policy'
} else {
$CreateGPO['Type'] = $Registry.Hive
}
if ($Registry.Value -eq '00000000') {
$CreateGPO['Zone'] = 'My Computer (0)'
} elseif ($Registry.Value -eq '00000001') {
$CreateGPO['Zone'] = 'Local Intranet Zone (1)'
} elseif ($Registry.Value -eq '00000002') {
$CreateGPO['Zone'] = 'Trusted Sites Zone (2)'
} elseif ($Registry.Value -eq '00000003') {
$CreateGPO['Zone'] = 'Internet Zone (3)'
} elseif ($Registry.Value -eq '00000004') {
$CreateGPO['Zone'] = 'Restricted Sites Zone (4)'
} else {
$CreateGPO['Zone'] = $Registry.Value
}
[string] $FullKey = foreach ($Key in $Keys) {
if ($Registry.Key -like "$Key*") {
$Registry.Key.Replace($Key, '')
}
}
$DomainSplit = $FullKey.Split('\')
$Reversed = for ($i = $DomainSplit.Count - 1; $i -ge 0; $i--) {
$DomainSplit[$i]
}
if ($Registry.Name -eq '*') {
$CreateGPO['DomainZone'] = $Reversed -join '.'
} else {
$CreateGPO['DomainZone'] = -join ($Registry.Name, '://', ($Reversed -join '.'))
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+28
View File
@@ -0,0 +1,28 @@
function ConvertTo-XMLRegistrySettings {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = Get-XMLNestedRegistry -GPO $GPO -DataSet $GPO.DataSet
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
Get-XMLNestedRegistry -GPO $GPO -DataSet $GPO.DataSet
}
}
+53
View File
@@ -0,0 +1,53 @@
function ConvertTo-XMLScripts {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Script in $GPO.DataSet) {
[PSCustomObject] @{
Type = $GPO.DataSet.Type
Command = $GPO.DataSet.Command
Parameters = $GPO.DataSet.Parameters
Order = $GPO.DataSet.Order
RunOrder = $GPO.DataSet.RunOrder
}
}
$CreateGPO['DataCount'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Script in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Type = $Script.Type
Command = $Script.Command
Parameters = $Script.Parameters
Order = $Script.Order
RunOrder = $Script.RunOrder
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+65
View File
@@ -0,0 +1,65 @@
function ConvertTo-XMLSecurityOptions {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Entry in $GPO.DataSet) {
$Object = [ordered] @{}
$Object['KeyName'] = $Entry.KeyName
$Object['KeyDisplayName'] = $Entry.Display.Name
$Object['KeyDisplayUnits'] = $Entry.Display.Units
$Object['KeyDisplayBoolean'] = try { [bool]::Parse($Entry.Display.DisplayBoolean) } catch { $null };
$Object['KeyDisplayString'] = $Entry.Display.DisplayString
$Object['SystemAccessPolicyName'] = $Entry.SystemAccessPolicyName
if ($Entry.SettingString) {
$Object['KeyValue'] = $Entry.SettingString
} else {
$Object['KeyValue'] = $Entry.SettingNumber
}
[PSCustomObject] $Object
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Entry in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
$CreateGPO['KeyName'] = $Entry.KeyName
$CreateGPO['KeyDisplayName'] = $Entry.Display.Name
$CreateGPO['KeyDisplayUnits'] = $Entry.Display.Units
$CreateGPO['KeyDisplayBoolean'] = try { [bool]::Parse($Entry.Display.DisplayBoolean) } catch { $null };
$CreateGPO['KeyDisplayString'] = $Entry.Display.DisplayString
$CreateGPO['SystemAccessPolicyName'] = $Entry.SystemAccessPolicyName
if ($Entry.SettingString) {
$CreateGPO['KeyValue'] = $Entry.SettingString
} else {
$CreateGPO['KeyValue'] = $Entry.SettingNumber
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
@@ -0,0 +1,87 @@
function ConvertTo-XMLSoftwareInstallation {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($MsiInstallerr in $GPO.DataSet) {
[PSCustomObject] @{
Identifier = $MsiInstallerr.Identifier #: { 10495e9e-79c1-4a32-b278-a24cd495437f }
Name = $MsiInstallerr.Name #: Local Administrator Password Solution (2)
Path = $MsiInstallerr.Path #: \\area1.local\SYSVOL\area1.local\Policies\ { 5F5042A0-008F-45E3-8657-79C87BD002E3 }\LAPS.x64.msi
MajorVersion = $MsiInstallerr.MajorVersion #: 6
MinorVersion = $MsiInstallerr.MinorVersion #: 2
LanguageId = $MsiInstallerr.LanguageId #: 1033
Architecture = $MsiInstallerr.Architecture #: 9
IgnoreLanguage = if ($MsiInstallerr.IgnoreLanguage -eq 'true') { $true } else { $false } #: false
Allowx86Onia64 = if ($MsiInstallerr.Allowx86Onia64 -eq 'true') { $true } else { $false } #: true
SupportURL = $MsiInstallerr.SupportURL #:
AutoInstall = if ($MsiInstallerr.AutoInstall -eq 'true') { $true } else { $false } #: true
DisplayInARP = if ($MsiInstallerr.DisplayInARP -eq 'true') { $true } else { $false } #: true
IncludeCOM = if ($MsiInstallerr.IncludeCOM -eq 'true') { $true } else { $false } #: true
SecurityDescriptor = $MsiInstallerr.SecurityDescriptor #: SecurityDescriptor
DeploymentType = $MsiInstallerr.DeploymentType #: Assign
ProductId = $MsiInstallerr.ProductId #: { ea8cb806-c109 - 4700 - 96b4-f1f268e5036c }
ScriptPath = $MsiInstallerr.ScriptPath #: \\area1.local\SysVol\area1.local\Policies\ { 5F5042A0-008F-45E3-8657-79C87BD002E3 }\Machine\Applications\ { EAC9B821-FB4D - 457A-806F-E5B528D1E41A }.aas
DeploymentCount = $MsiInstallerr.DeploymentCount #: 0
InstallationUILevel = $MsiInstallerr.InstallationUILevel #: Maximum
Upgrades = if ($MsiInstallerr.Upgrades.Mandatory -eq 'true') { $true } else { $false } #: Upgrades
UninstallUnmanaged = if ($MsiInstallerr.UninstallUnmanaged -eq 'true') { $true } else { $false } #: false
LossOfScopeAction = $MsiInstallerr.LossOfScopeAction #: Unmanage
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($MsiInstallerr in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Identifier = $MsiInstallerr.Identifier #: { 10495e9e-79c1-4a32-b278-a24cd495437f }
Name = $MsiInstallerr.Name #: Local Administrator Password Solution (2)
Path = $MsiInstallerr.Path #: \\area1.local\SYSVOL\area1.local\Policies\ { 5F5042A0-008F-45E3-8657-79C87BD002E3 }\LAPS.x64.msi
MajorVersion = $MsiInstallerr.MajorVersion #: 6
MinorVersion = $MsiInstallerr.MinorVersion #: 2
LanguageId = $MsiInstallerr.LanguageId #: 1033
Architecture = $MsiInstallerr.Architecture #: 9
IgnoreLanguage = if ($MsiInstallerr.IgnoreLanguage -eq 'true') { $true } else { $false } #: false
Allowx86Onia64 = if ($MsiInstallerr.Allowx86Onia64 -eq 'true') { $true } else { $false } #: true
SupportURL = $MsiInstallerr.SupportURL #:
AutoInstall = if ($MsiInstallerr.AutoInstall -eq 'true') { $true } else { $false } #: true
DisplayInARP = if ($MsiInstallerr.DisplayInARP -eq 'true') { $true } else { $false } #: true
IncludeCOM = if ($MsiInstallerr.IncludeCOM -eq 'true') { $true } else { $false } #: true
SecurityDescriptor = $MsiInstallerr.SecurityDescriptor #: SecurityDescriptor
DeploymentType = $MsiInstallerr.DeploymentType #: Assign
ProductId = $MsiInstallerr.ProductId #: { ea8cb806-c109 - 4700 - 96b4-f1f268e5036c }
ScriptPath = $MsiInstallerr.ScriptPath #: \\area1.local\SysVol\area1.local\Policies\ { 5F5042A0-008F-45E3-8657-79C87BD002E3 }\Machine\Applications\ { EAC9B821-FB4D - 457A-806F-E5B528D1E41A }.aas
DeploymentCount = $MsiInstallerr.DeploymentCount #: 0
InstallationUILevel = $MsiInstallerr.InstallationUILevel #: Maximum
Upgrades = if ($MsiInstallerr.Upgrades.Mandatory -eq 'true') { $true } else { $false } #: Upgrades
UninstallUnmanaged = if ($MsiInstallerr.UninstallUnmanaged -eq 'true') { $true } else { $false } #: false
LossOfScopeAction = $MsiInstallerr.LossOfScopeAction #: Unmanage
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+53
View File
@@ -0,0 +1,53 @@
function ConvertTo-XMLSystemServices {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($GPOEntry in $GPO.DataSet) {
[PSCustomObject] @{
ServiceName = $GPOEntry.Name
ServiceStartUpMode = $GPOEntry.StartUpMode
SecurityAuditingPresent = try { [bool]::Parse($GPOEntry.SecurityDescriptor.AuditingPresent.'#text') } catch { $null };
SecurityPermissionsPresent = try { [bool]::Parse($GPOEntry.SecurityDescriptor.PermissionsPresent.'#text') } catch { $null };
SecurityDescriptor = $GPOEntry.SecurityDescriptor
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($GPOEntry in $GPO.DataSet) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
ServiceName = $GPOEntry.Name
ServiceStartUpMode = $GPOEntry.StartUpMode
SecurityAuditingPresent = try { [bool]::Parse($GPOEntry.SecurityDescriptor.AuditingPresent.'#text') } catch { $null };
SecurityPermissionsPresent = try { [bool]::Parse($GPOEntry.SecurityDescriptor.PermissionsPresent.'#text') } catch { $null };
SecurityDescriptor = $GPOEntry.SecurityDescriptor
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+106
View File
@@ -0,0 +1,106 @@
function ConvertTo-XMLSystemServicesNT {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Service in $GPO.DataSet.NTService) {
[PSCustomObject] @{
GPOSettingOrder = $Service.GPOSettingOrder
#ServiceName = $Service.Name
ServiceName = $Service.Properties.serviceName #: AppIDSvc: AppIDSvc
ServiceStartupType = $Service.Properties.startupType #: NOCHANGE: NOCHANGE
ServiceAction = $Service.Properties.serviceAction #: START: START
Timeout = $Service.Properties.timeout #: 50: 50
FirstFailure = $Service.Properties.firstFailure #: REBOOT: REBOOT
SecondFailure = $Service.Properties.secondFailure #: REBOOT: REBOOT
ThirdFailure = $Service.Properties.thirdFailure #: REBOOT: REBOOT
ResetFailCountDelay = $Service.Properties.resetFailCountDelay #: 0: 0
RestartComputerDelay = $Service.Properties.restartComputerDelay #: 60000: 60000
Filter = $Service.Filter
AccountName = $Service.Properties.accountName
AllowServiceToInteractWithTheDesktop = if ($Service.Properties.interact -eq 1) { 'Yes' } elseif ($Service.Properties.interact -eq 0) { 'No' } else { $null }
RunThisProgram = $Service.Properties.program
CommandLineParameters = $Service.Properties.args
AppendFailCountToEndOfCommandLine = if ($Service.Properties.append -eq 1) { 'Yes' } elseif ($Service.Properties.append -eq 0) { 'No' } else { $null }
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Service in $GPO.DataSet.NTService) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
GPOSettingOrder = $Service.GPOSettingOrder
#ServiceName = $Service.Name
ServiceName = $Service.Properties.serviceName #: AppIDSvc: AppIDSvc
ServiceStartupType = $Service.Properties.startupType #: NOCHANGE: NOCHANGE
ServiceAction = $Service.Properties.serviceAction #: START: START
Timeout = $Service.Properties.timeout #: 50: 50
FirstFailure = $Service.Properties.firstFailure #: REBOOT: REBOOT
SecondFailure = $Service.Properties.secondFailure #: REBOOT: REBOOT
ThirdFailure = $Service.Properties.thirdFailure #: REBOOT: REBOOT
ResetFailCountDelay = $Service.Properties.resetFailCountDelay #: 0: 0
RestartComputerDelay = $Service.Properties.restartComputerDelay #: 60000: 60000
Filter = $Service.Filter
AccountName = $Service.Properties.accountName
AllowServiceToInteractWithTheDesktop = if ($Service.Properties.interact -eq 1) { 'Yes' } elseif ($Service.Properties.interact -eq 0) { 'No' } else { $null }
RunThisProgram = $Service.Properties.program
CommandLineParameters = $Service.Properties.args
AppendFailCountToEndOfCommandLine = if ($Service.Properties.append -eq 1) { 'Yes' } elseif ($Service.Properties.append -eq 0) { 'No' } else { $null }
<#$
startupType : NOCHANGE
serviceName : AudioEndpointBuilder
timeout : 30
accountName : LocalSystem
interact : 1
thirdFailure : RUNCMD
resetFailCountDelay : 0
program : fgdfg
args : dg
append : 1
Service name AudioEndpointBuilder
Action No change
Startup type: No change
Wait timeout if service is locked: 30 seconds
Service AccountLog on service as: LocalSystem
Allow service to interact with the desktop: Yes
First failure: No change
Second failure: No change
Subsequent failures: Run a program
Reset fail count after: 0 days
Run this program: fgdfg
Command line parameters: dg
Append fail count to end of command line: Yes
#>
}
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
+243
View File
@@ -0,0 +1,243 @@
function ConvertTo-XMLTaskScheduler {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Entry in $GPO.DataSet.Drive) {
[PSCustomObject] @{
Changed = [DateTime] $Entry.changed
#uid = $Entry.uid
GPOSettingOrder = $Entry.GPOSettingOrder
Filter = $Entry.Filter
Name = $Entry.Name
Action = $Script:Actions["$($Entry.Properties.action)"]
ThisDrive = $Entry.Properties.thisDrive
AllDrives = $Entry.Properties.allDrives
UserName = $Entry.Properties.userName
Path = $Entry.Properties.path
Label = $Entry.Properties.label
Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
UseLetter = if ($Entry.Properties.useLetter -eq '1') { $true } elseif ($Entry.Properties.useLetter -eq '0') { $false } else { $Entry.Properties.useLetter };
Letter = $Entry.Properties.letter
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Type in @('TaskV2', 'Task', 'ImmediateTaskV2', 'ImmediateTask')) {
foreach ($Entry in $GPO.DataSet.$Type) {
$ListActions = foreach ($LoopAction in $Entry.Properties.Task.Actions) {
foreach ($InternalAction in $LoopAction.Exec) {
$Action = [ordered] @{
ActionType = 'Execute'
Command = $InternalAction.Command # : cmd
Arguments = $InternalAction.Arguments # : / c wevtutil qe security / rd:true / f:text / c:1 / q:"*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (EventID=4727 or EventID=4759 or EventID=4754 or EventID=4731)]]" >group-creation.txt
WorkingDirectory = $InternalAction.WorkingDirectory# : % windir % \temp
Server = $Null
Subject = $Null
To = $Null
From = $Null
Body = $Null
Attachments = $Null
}
$Action
}
foreach ($InternalAction in $LoopAction.SendEmail) {
$Action = [ordered] @{
ActionType = 'SendEmail'
Command = $null
Arguments = $null # : / c wevtutil qe security / rd:true / f:text / c:1 / q:"*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (EventID=4727 or EventID=4759 or EventID=4754 or EventID=4731)]]" >group-creation.txt
WorkingDirectory = $null # : % windir % \temp
Server = $InternalAction.Server # : smtp-de
Subject = $InternalAction.Subject # : AD Group creation
To = $InternalAction.To # : gm6b@eurofins.de,RalphThomasAussem@eurofins.de,karlthomaseggert@eurofins.de
From = $InternalAction.From # : %computername%@eurofins.local
Body = $InternalAction.Body # : A new security group has been created. Check attachment for further details.
Attachments = $InternalAction.Attachments.File -join '; ' # : Attachments
}
$Action
}
}
<#
[DBG]: PS C:\Support\GitHub\GpoZaurr> $Entry.Properties.Task.Triggers.EventTrigger
Enabled Subscription
------- ------------
true <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4727]]</Select></Query></QueryList>
true <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4731]]</Select></Query></QueryList>
true <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4754]]</Select></Query></QueryList>
false <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4759]]</Select></Query></QueryList>
#>
if ($ListActions.Count -eq 0) {
$ListActions = @(
if ($Entry.Properties.appName) {
# This supports Scheduled Task (legacy)
$Action = [ordered] @{
ActionType = $Script:Actions["$($Entry.Properties.action)"]
Command = $Entry.Properties.appName
Arguments = $Entry.Properties.args #
WorkingDirectory = $Entry.Properties.startIn # : % windir % \temp
Server = $null # : smtp-de
Subject = $null # : AD Group creation
To = $null
From = $null
Body = $null
Attachments = $null
}
$Action
} else {
$Action = [ordered] @{
ActionType = $Script:Actions["$($Entry.Properties.action)"]
Command = $null
Arguments = $null #
WorkingDirectory = $null # : % windir % \temp
Server = $null # : smtp-de
Subject = $null # : AD Group creation
To = $null
From = $null
Body = $null
Attachments = $null
}
$Action
}
)
}
foreach ($Action in $ListActions) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Type = $Type
Changed = [DateTime] $Entry.changed
GPOSettingOrder = $Entry.GPOSettingOrder
userContext = ''
Name = $Entry.Name
Status = $Entry.status
Action = $Script:Actions["$($Entry.Properties.action)"]
runAs = $Entry.Properties.runAs #: NT AUTHORITY\System
#logonType = $Entry.Properties.logonType #: InteractiveToken
#Task = $Entry.Properties.Task #: Task
Comment = $Entry.Properties.comment
}
if ($Entry.Properties.startOnlyIfIdle) {
# Old legacy task
$Middle = [ordered] @{
AllowStartOnDemand = $null #: true
DisallowStartIfOnBatteries = $Entry.Properties.noStartIfOnBatteries #: false
StopIfGoingOnBatteries = $Entry.Properties.stopIfGoingOnBatteries #: false
AllowHardTerminate = $null #: true
Enabled = $Entry.Properties.enabled #: true
Hidden = $null #: false
MultipleInstancesPolicy = $null #: IgnoreNew
Priority = $null #: 7
ExecutionTimeLimit = $null #: PT1H
#IdleSettings = $Entry.Properties.Task.Settings.IdleSettings #: IdleSettings
IdleDuration = $Entry.Properties.deadlineMinutes # : PT5M
IdleWaitTimeout = $null # : PT1H
IdleStopOnIdleEnd = $Entry.Properties.stopOnIdleEnd # : false
IdleRestartOnIdle = $Entry.Properties.startOnlyIfIdle # : false
RegistrationInfoAuthor = $null
RegistrationInfoDescription = $null
deleteWhenDone = $Entry.Properties.deleteWhenDone
<#
action : U
name : Task Name
appName : Run command
args : args for command
startIn : start me in
comment : Oops i did it again
enabled : 1
deleteWhenDone : 1
maxRunTime : 259200000
startOnlyIfIdle : 1
idleMinutes : 10
deadlineMinutes : 60
stopOnIdleEnd : 1
noStartIfOnBatteries : 1
stopIfGoingOnBatteries : 1
systemRequired : 0
Triggers : Triggers
#>
}
} else {
$Middle = [ordered] @{
AllowStartOnDemand = $Entry.Properties.Task.Settings.AllowStartOnDemand #: true
DisallowStartIfOnBatteries = $Entry.Properties.Task.Settings.DisallowStartIfOnBatteries #: false
StopIfGoingOnBatteries = $Entry.Properties.Task.Settings.StopIfGoingOnBatteries #: false
AllowHardTerminate = $Entry.Properties.Task.Settings.AllowHardTerminate #: true
Enabled = $Entry.Properties.Task.Settings.Enabled #: true
Hidden = $Entry.Properties.Task.Settings.Hidden #: false
MultipleInstancesPolicy = $Entry.Properties.Task.Settings.MultipleInstancesPolicy #: IgnoreNew
Priority = $Entry.Properties.Task.Settings.Priority #: 7
ExecutionTimeLimit = $Entry.Properties.Task.Settings.ExecutionTimeLimit #: PT1H
#IdleSettings = $Entry.Properties.Task.Settings.IdleSettings #: IdleSettings
IdleDuration = $Entry.Properties.Task.Settings.IdleSettings.Duration # : PT5M
IdleWaitTimeout = $Entry.Properties.Task.Settings.IdleSettings.WaitTimeout # : PT1H
IdleStopOnIdleEnd = $Entry.Properties.Task.Settings.IdleSettings.StopOnIdleEnd # : false
IdleRestartOnIdle = $Entry.Properties.Task.Settings.IdleSettings.RestartOnIdle # : false
RegistrationInfoAuthor = $Entry.Properties.Task.RegistrationInfo.Author
RegistrationInfoDescription = $Entry.Properties.Task.RegistrationInfo.Description
deleteWhenDone = $Entry.Properties.deleteWhenDone
}
}
$End = [ordered] @{
id = $Entry.Properties.Principals.Principal.id # : Author
UserId = $Entry.Properties.Principals.Principal.UserId # : NT AUTHORITY\System
LogonType = $Entry.Properties.Principals.Principal.LogonType # : InteractiveToken
RunLevel = $Entry.Properties.Principals.Principal.RunLevel # : HighestAvailable
#Persistent = if ($Entry.Properties.persistent -eq '1') { $true } elseif ($Entry.Properties.persistent -eq '0') { $false } else { $Entry.Properties.persistent };
#UseLetter = if ($Entry.Properties.useLetter -eq '1') { $true } elseif ($Entry.Properties.useLetter -eq '0') { $false } else { $Entry.Properties.useLetter };
#Letter = $Entry.Properties.letter
}
$CreateGPO = $CreateGPO + $Middle + $End + $Action
$Last = [ordered] @{
#Uid = $Group.uid #: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}: {8F435B0A-CD15-464E-85F3-B6A55B9E816A}
RunInLoggedOnUserSecurityContext = if ($Entry.userContext -eq '1') { 'Enabled' } elseif ($Entry.userContext -eq '0') { 'Disabled' } else { $Entry.userContext };
RemoveThisItemWhenItIsNoLongerApplied = if ($Entry.removePolicy -eq '1') { 'Enabled' } elseif ($Entry.removePolicy -eq '0') { 'Disabled' } else { $Entry.removePolicy };
Filters = $Group.Filters #::
}
$CreateGPO = $CreateGPO + $Last
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
}
}
@@ -0,0 +1,86 @@
function ConvertTo-XMLUserRightsAssignment {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[switch] $SingleObject
)
$UserRightsTranslation = @{
SeNetworkLogonRight = 'Access this computer from the network'
SeMachineAccountPrivilege = 'Add workstations to domain'
SeIncreaseQuotaPrivilege = 'Adjust memory quotas for a process'
SeInteractiveLogonRight = 'Allow log on locally'
SeBackupPrivilege = 'Back up files and directories'
SeChangeNotifyPrivilege = 'Bypass traverse checking Everyone'
SeSystemTimePrivilege = 'Change the system time'
SeCreatePagefilePrivilege = 'Create a pagefile'
SeDebugPrivilege = 'Debug programs'
SeEnableDelegationPrivilege = 'Enable computer and user accounts to be trusted for delegation'
SeRemoteShutdownPrivilege = 'Force shutdown from a remote system'
SeAuditPrivilege = 'Generate security audits'
SeIncreaseBasePriorityPrivilege = 'Increase scheduling priority'
SeLoadDriverPrivilege = 'Load and unload device drivers'
SeBatchLogonRight = 'Log on as a batch job'
SeSecurityPrivilege = 'Manage auditing and security log'
SeSystemEnvironmentPrivilege = 'Modify firmware environment values'
SeProfileSingleProcessPrivilege = 'Profile single process'
SeSystemProfilePrivilege = 'Profile system performance'
SeUndockPrivilege = 'Remove computer from docking station'
SeAssignPrimaryTokenPrivilege = 'Replace a process level token'
SeRestorePrivilege = 'Restore files and directories'
SeShutdownPrivilege = 'Shut down the system'
SeTakeOwnershipPrivilege = 'Take ownership of files or other objects'
}
if ($SingleObject) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
Count = 0
Settings = $null
}
[Array] $CreateGPO['Settings'] = foreach ($Entry in $GPO.DataSet) {
foreach ($Member in $Entry.Member) {
[PSCustomObject]@{
'UserRightsAssignment' = $Entry.Name
'UserRightsAssignmentDescription' = $UserRightsTranslation[$Entry.Name]
'Name' = $Member.Name.'#text'
'Sid' = $Member.SID.'#text'
}
}
}
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
} else {
foreach ($Entry in $GPO.DataSet) {
foreach ($Member in $Entry.Member) {
$CreateGPO = [ordered]@{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.GUID
GpoType = $GPO.GpoType
#GpoCategory = $GPOEntry.GpoCategory
#GpoSettings = $GPOEntry.GpoSettings
}
$CreateGPO['UserRightsAssignment'] = $Entry.Name
$CreateGPO['UserRightsAssignmentDescription'] = $UserRightsTranslation[$Entry.Name]
$CreateGPO['Name'] = $Member.Name.'#text'
$CreateGPO['Sid'] = $Member.SID.'#text'
#$CreateGPO['CreatedTime'] = $GPO.CreatedTime # : 06.06.2020 18:03:36
#$CreateGPO['ModifiedTime'] = $GPO.ModifiedTime # : 17.06.2020 16:08:10
#$CreateGPO['ReadTime'] = $GPO.ReadTime # : 13.08.2020 10:15:37
$CreateGPO['Linked'] = $GPO.Linked
$CreateGPO['LinksCount'] = $GPO.LinksCount
$CreateGPO['Links'] = $GPO.Links
[PSCustomObject] $CreateGPO
}
}
}
}
+37
View File
@@ -0,0 +1,37 @@
function Find-GPOPassword {
[cmdletBinding()]
param(
[string] $Path
)
#Convert XML in a String file
[string]$XMLString = Get-Content -LiteralPath $Path
#Check if Cpassword Exist in the file
if ($XMLString.Contains("cpassword")) {
#Take the Cpassword Value from XML String file
[string]$Cpassword = [regex]::matches($XMLString, '(cpassword=).+?(?=\")')
$Cpassword = $Cpassword.split('(\")')[1]
#Check if Cpassword has a value
if ($Cpassword.Length -gt 20 -and $Cpassword -notlike '*cpassword*') {
$Mod = ($Cpassword.length % 4)
switch ($Mod) {
'1' { $Cpassword = $Cpassword.Substring(0, $Cpassword.Length - 1) }
'2' { $Cpassword += ('=' * (4 - $Mod)) }
'3' { $Cpassword += ('=' * (4 - $Mod)) }
}
$Base64Decoded = [Convert]::FromBase64String($Cpassword)
$AesObject = [System.Security.Cryptography.AesCryptoServiceProvider]::new()
#Use th AES Key
[Byte[]] $AesKey = @(0x4e, 0x99, 0x06, 0xe8, 0xfc, 0xb6, 0x6c, 0xc9, 0xfa, 0xf4, 0x93, 0x10, 0x62, 0x0f, 0xfe, 0xe8, 0xf4, 0x96, 0xe8, 0x06, 0xcc, 0x05, 0x79, 0x90, 0x20, 0x9b, 0x09, 0xa4, 0x33, 0xb6, 0x6c, 0x1b)
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
#Convert Hash variable in a String valute
$Password = [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
} else {
$Password = ''
}
}
$Password
}
+27
View File
@@ -0,0 +1,27 @@
function Format-CamelCaseToDisplayName {
[cmdletBinding()]
param(
[string[]] $Text,
[string] $AddChar
)
foreach ($string in $Text) {
$newString = ''
$stringChars = $string.GetEnumerator()
$charIndex = 0
foreach ($char in $stringChars) {
# If upper and not first character, add a space
if ([char]::IsUpper($char) -eq 'True' -and $charIndex -gt 0) {
$newString = $newString + $AddChar + $char.ToString()
} elseif ($charIndex -eq 0) {
# If the first character, make it a capital always
$newString = $newString + $char.ToString().ToUpper()
} else {
$newString = $newString + $char.ToString()
}
$charIndex++
}
$newString
}
}
#Format-CamelCaseToDisplayName -Text 'Test1', 'TestingMyAss', 'OtherTest', 'otherTEst'
+62
View File
@@ -0,0 +1,62 @@
function Get-GPOCategories {
[cmdletBinding()]
param(
[PSCustomObject] $GPO,
[System.Xml.XmlElement[]] $GPOOutput,
[string] $Splitter,
[switch] $FullObjects,
[System.Collections.IDictionary] $CachedCategories
)
if (-not $CachedCategories) {
$CachedCategories = [ordered] @{}
}
$LinksInformation = Get-LinksFromXML -GPOOutput $GPOOutput -Splitter $Splitter -FullObjects:$FullObjects
foreach ($GpoType in @('User', 'Computer')) {
if ($GPOOutput.$GpoType.ExtensionData.Extension) {
foreach ($ExtensionType in $GPOOutput.$GpoType.ExtensionData.Extension) {
# It's possible that one of the ExtensionType records has value null. Weird but happend.
if ($ExtensionType) {
$GPOSettingTypeSplit = ($ExtensionType.type -split ':')
try {
$KeysToLoop = $ExtensionType | Get-Member -MemberType Properties -ErrorAction Stop | Where-Object { $_.Name -notin 'type', $GPOSettingTypeSplit[0] -and $_.Name -notin @('Blocked') }
} catch {
Write-Warning "Get-XMLStandard - things went sideways $($_.Exception.Message)"
continue
}
foreach ($GpoSettings in $KeysToLoop.Name) {
$Template = [ordered] @{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.Guid
GpoType = $GpoType
GpoCategory = $GPOSettingTypeSplit[1]
GpoSettings = $GpoSettings
}
$Template['Linked'] = $LinksInformation.Linked
$Template['LinksCount'] = $LinksInformation.LinksCount
$Template['Links'] = $LinksInformation.Links
$Template['IncludeComments'] = [bool]::Parse($GPOOutput.IncludeComments)
$Template['CreatedTime'] = [DateTime] $GPOOutput.CreatedTime
$Template['ModifiedTime'] = [DateTime] $GPOOutput.ModifiedTime
$Template['ReadTime'] = [DateTime] $GPOOutput.ReadTime
$Template['SecurityDescriptor'] = $GPOOutput.SecurityDescriptor
$Template['FilterDataAvailable'] = [bool]::Parse($GPOOutput.FilterDataAvailable)
$Template['DataSet'] = $ExtensionType.$GpoSettings
$ConvertedObject = [PSCustomObject] $Template
if (-not $CachedCategories["$($Template.GpoCategory)"]) {
$CachedCategories["$($Template.GpoCategory)"] = [ordered] @{}
}
if (-not $CachedCategories["$($Template.GpoCategory)"]["$($Template.GpoSettings)"]) {
$CachedCategories["$($Template.GpoCategory)"]["$($Template.GpoSettings)"] = [System.Collections.Generic.List[PSCustomObject]]::new()
}
$CachedCategories["$($Template.GpoCategory)"]["$($Template.GpoSettings)"].Add($ConvertedObject)
# return GPOCategory
$ConvertedObject
}
}
}
}
}
}
+24
View File
@@ -0,0 +1,24 @@
function Get-GitHubVersion {
[cmdletBinding()]
param(
[Parameter(Mandatory)][string] $Cmdlet,
[Parameter(Mandatory)][string] $RepositoryOwner,
[Parameter(Mandatory)][string] $RepositoryName
)
$App = Get-Command -Name $Cmdlet -ErrorAction SilentlyContinue
if ($App) {
[Array] $GitHubReleases = (Get-GitHubLatestRelease -Url "https://api.github.com/repos/$RepositoryOwner/$RepositoryName/releases" -Verbose:$false)
$LatestVersion = $GitHubReleases[0]
if (-not $LatestVersion.Errors) {
if ($App.Version -eq $LatestVersion.Version) {
"Current/Latest: $($LatestVersion.Version) at $($LatestVersion.PublishDate)"
} elseif ($App.Version -lt $LatestVersion.Version) {
"Current: $($App.Version), Published: $($LatestVersion.Version) at $($LatestVersion.PublishDate). Update?"
} elseif ($App.Version -gt $LatestVersion.Version) {
"Current: $($App.Version), Published: $($LatestVersion.Version) at $($LatestVersion.PublishDate). Lucky you!"
}
} else {
"Current: $($App.Version)"
}
}
}
+38
View File
@@ -0,0 +1,38 @@
function Get-LinksFromXML {
[cmdletBinding()]
param(
[System.Xml.XmlElement[]] $GPOOutput,
[string] $Splitter,
[switch] $FullObjects
)
$Links = [ordered] @{
Linked = $null
LinksCount = $null
Links = $null
}
if ($GPOOutput.LinksTo) {
$Links.Linked = $true
$Links.LinksCount = ([Array] $GPOOutput.LinksTo).Count
$Links.Links = foreach ($Link in $GPOOutput.LinksTo) {
if ($FullObjects) {
[PSCustomObject] @{
Path = $Link.SOMPath
Enabled = if ($Link.Enabled -eq 'true') { $true } else { $false }
NoOverride = if ($Link.NoOverride -eq 'true') { $true } else { $false }
}
} else {
if ($Link.Enabled) {
$Link.SOMPath
}
}
}
if ($Splitter) {
$Links.Links = $Links.Links -join $Splitter
}
} else {
$Links.Linked = $false
$Links.LinksCount = 0
$Links.Links = $null
}
[PSCustomObject] $Links
}
+59
View File
@@ -0,0 +1,59 @@
function Get-PermissionsAnalysis {
[cmdletBinding()]
param(
[PSCustomObject] $GPOPermissions,
[validateset('WellKnownAdministrative', 'Administrative', 'AuthenticatedUsers', 'Default')][string] $Type = 'Default',
[Parameter(Mandatory)][alias('IncludePermissionType')][Microsoft.GroupPolicy.GPPermissionType] $PermissionType,
[alias('ForestName')][string] $Forest,
[string[]] $ExcludeDomains,
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
[System.Collections.IDictionary] $ExtendedForestInformation,
[System.Collections.IDictionary] $ADAdministrativeGroups
)
if (-not $ADAdministrativeGroups) {
$ADAdministrativeGroups = Get-ADADministrativeGroups -Type DomainAdmins, EnterpriseAdmins -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
}
$AdministrativeExists = @{
Skip = $false
DomainAdmins = $false
EnterpriseAdmins = $false
}
#$GPOPermissions = $_
# Verification Phase
# When it has GPOSecurityPermissionItem property it means it has permissions, if it doesn't it means we have clean object to process
if ($GPOPermissions.GPOSecurityPermissionItem) {
# Permission exists, but may be incomplete
foreach ($GPOPermission in $GPOPermissions) {
if ($Type -eq 'Default') {
# We were looking for specific principal and we got it. nothing to do
# this is for standard users such as przemyslaw.klys / adam.gonzales
$AdministrativeExists['Skip'] = $true
break
} elseif ($Type -eq 'Administrative') {
# We are looking for administrative but we need to make sure we got correct administrative
if ($GPOPermission.Permission -eq $PermissionType) {
$AdministrativeGroup = $ADAdministrativeGroups['BySID'][$GPOPermission.PrincipalSid]
if ($AdministrativeGroup.SID -like '*-519') {
$AdministrativeExists['EnterpriseAdmins'] = $true
} elseif ($AdministrativeGroup.SID -like '*-512') {
$AdministrativeExists['DomainAdmins'] = $true
}
}
if ($AdministrativeExists['DomainAdmins'] -and $AdministrativeExists['EnterpriseAdmins']) {
$AdministrativeExists['Skip'] = $true
break
}
} elseif ($Type -eq 'WellKnownAdministrative') {
# this is for SYSTEM account
$AdministrativeExists['Skip'] = $true
break
} elseif ($Type -eq 'AuthenticatedUsers') {
# this is for Authenticated Users
$AdministrativeExists['Skip'] = $true
break
}
}
}
$AdministrativeExists
}
+44 -26
View File
@@ -6,51 +6,69 @@
[System.Collections.IDictionary] $GPOCache
)
if ($Object.GpLink -and $Object.GpLink.Trim() -ne '') {
$Object.GpLink -split { $_ -eq '[' -or $_ -eq ']' } -replace ';0' -replace 'LDAP://' | ForEach-Object -Process {
if ($_) {
#$Object.GpLink -split { $_ -eq '[' -or $_ -eq ']' } -replace ';0' -replace 'LDAP://'
$Object.GpLink -split '\[LDAP://' -split ';' | ForEach-Object -Process {
#Write-Verbose $_
if ($_.Length -gt 10) {
$DomainCN = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDomainCN
$Output = [ordered] @{
DistinguishedName = $Object.DistinguishedName
CanonicalName = $Object.CanonicalName
CanonicalName = if ($Object.CanonicalName) { $Object.CanonicalName.TrimEnd('/') } else { $Object.CanonicalName }
Guid = [Regex]::Match( $_, '(?={)(.*)(?<=})').Value -replace '{' -replace '}'
}
$Search = -join ($DomainCN, $Output['Guid'])
if ($GPOCache -and -not $Limited) {
$Output['DisplayName'] = $GPOCache[$Search].DisplayName
$Output['DomainName'] = $GPOCache[$Search].DomainName
$Output['Owner'] = $GPOCache[$Search].Owner
$Output['GpoStatus'] = $GPOCache[$Search].GpoStatus
$Output['Description'] = $GPOCache[$Search].Description
$Output['CreationTime'] = $GPOCache[$Search].CreationTime
$Output['ModificationTime'] = $GPOCache[$Search].ModificationTime
if ($GPOCache[$Search]) {
$Output['DisplayName'] = $GPOCache[$Search].DisplayName
$Output['DomainName'] = $GPOCache[$Search].DomainName
$Output['Owner'] = $GPOCache[$Search].Owner
$Output['GpoStatus'] = $GPOCache[$Search].GpoStatus
$Output['Description'] = $GPOCache[$Search].Description
$Output['CreationTime'] = $GPOCache[$Search].CreationTime
$Output['ModificationTime'] = $GPOCache[$Search].ModificationTime
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
} else {
Write-Warning "Get-PrivGPOZaurrLink - Couldn't find link $Search in a GPO Cache. Lack of permissions for given GPO? Are you running as admin? Skipping."
}
} else {
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
}
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
}
}
} elseif ($Object.LinkedGroupPolicyObjects -and $Object.LinkedGroupPolicyObjects.Trim() -ne '') {
$Object.LinkedGroupPolicyObjects -split { $_ -eq '[' -or $_ -eq ']' } -replace ';0' -replace 'LDAP://' | ForEach-Object -Process {
if ($_) {
$Object.LinkedGroupPolicyObjects -split '\[LDAP://' -split ';' | ForEach-Object -Process {
if ($_.Length -gt 10) {
$DomainCN = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDomainCN
$Output = [ordered] @{
DistinguishedName = $Object.DistinguishedName
CanonicalName = $Object.CanonicalName
CanonicalName = if ($Object.CanonicalName) { $Object.CanonicalName.TrimEnd('/') } else { $Object.CanonicalName }
Guid = [Regex]::Match( $_, '(?={)(.*)(?<=})').Value -replace '{' -replace '}'
}
$Search = -join ($DomainCN, $Output['Guid'])
if ($GPOCache -and -not $Limited) {
$Output['Name'] = $GPOCache[$Search].DisplayName
$Output['DomainName'] = $GPOCache[$Search].DomainName
$Output['Owner'] = $GPOCache[$Search].Owner
$Output['GpoStatus'] = $GPOCache[$Search].GpoStatus
$Output['Description'] = $GPOCache[$Search].Description
$Output['CreationTime'] = $GPOCache[$Search].CreationTime
$Output['ModificationTime'] = $GPOCache[$Search].ModificationTime
if ($GPOCache[$Search]) {
$Output['Name'] = $GPOCache[$Search].DisplayName
$Output['DomainName'] = $GPOCache[$Search].DomainName
$Output['Owner'] = $GPOCache[$Search].Owner
$Output['GpoStatus'] = $GPOCache[$Search].GpoStatus
$Output['Description'] = $GPOCache[$Search].Description
$Output['CreationTime'] = $GPOCache[$Search].CreationTime
$Output['ModificationTime'] = $GPOCache[$Search].ModificationTime
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
} else {
Write-Warning "Get-PrivGPOZaurrLink - Couldn't find link $Search in a GPO Cache. Lack of permissions for given GPO? Are you running as admin? Skipping."
}
} else {
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
}
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_ -ToDC
$Output['GPODistinguishedName'] = $_
[PSCustomObject] $Output
}
}
}
+252 -100
View File
@@ -2,34 +2,54 @@
[cmdletBinding()]
param(
[Microsoft.GroupPolicy.Gpo] $GPO,
[Object] $SecurityRights,
[string[]] $Principal,
[validateset('DistinguishedName', 'Name', 'Sid')][string] $PrincipalType = 'Sid',
[validateset('DistinguishedName', 'Name', 'NetbiosName', 'Sid')][string] $PrincipalType = 'Sid',
[switch] $SkipWellKnown,
[switch] $SkipAdministrative,
[switch] $IncludeOwner,
[Microsoft.GroupPolicy.GPPermissionType[]] $IncludePermissionType,
[Microsoft.GroupPolicy.GPPermissionType[]] $ExcludePermissionType,
[validateSet('Allow', 'Deny', 'All')][string] $PermitType = 'All',
[string[]] $ExcludePrincipal,
[validateset('DistinguishedName', 'Name', 'Sid')][string] $ExcludePrincipalType = 'Sid',
[switch] $IncludeGPOObject,
[System.Collections.IDictionary] $ADAdministrativeGroups,
[validateSet('Unknown', 'NotWellKnown', 'NotWellKnownAdministrative', 'NotAdministrative', 'Administrative', 'All', 'Default')][string[]] $Type,
[System.Collections.IDictionary] $Accounts
[validateSet('AuthenticatedUsers', 'DomainComputers', 'Unknown', 'WellKnownAdministrative', 'NotWellKnown', 'NotWellKnownAdministrative', 'NotAdministrative', 'Administrative', 'All')][string[]] $Type = 'All',
#[System.Collections.IDictionary] $Accounts,
[System.Collections.IDictionary] $ExtendedForestInformation
)
Begin {
Write-Verbose "Get-PrivPermission - Processing $($GPO.DisplayName) from $($GPO.DomainName)"
}
Process {
$SecurityRights = $GPO.GetSecurityInfo()
$SecurityRights | ForEach-Object -Process {
#Get-GPPermissions -Guid $GPO.ID -DomainName $GPO.DomainName -All -Server $QueryServer | ForEach-Object -Process {
$GPOPermission = $_
if ($PermitType -ne 'All') {
if ($PermitType -eq 'Deny') {
if ($GPOPermission.Denied -eq $false) {
return
}
} else {
if ($GPOPermission.Denied -eq $true) {
return
}
}
}
if ($ExcludePermissionType -contains $GPOPermission.Permission) {
return
}
if ($IncludePermissionType) {
if ($IncludePermissionType -notcontains $GPOPermission.Permission) {
return
if ($IncludePermissionType -eq 'GpoRead' -and $GPOPermission.Permission -eq 'GpoApply') {
# We treat GpoApply as GpoRead as well. This is because when GpoApply is set it becomes GpoRead as well but of course not vice versa
} else {
return
}
}
}
if ($SkipWellKnown.IsPresent -or $Type -contains 'NotWellKnown') {
@@ -56,12 +76,35 @@
return
}
}
if ($Type -contains 'WellKnownAdministrative' -and $Type -notcontains 'All') {
# We check for SYSTEM account
# Maybe we should make it a function and provide more
if ($GPOPermission.Trustee.Sid -ne 'S-1-5-18') {
return
}
}
if ($Type -contains 'Unknown' -and $Type -notcontains 'All') {
# May need updates if there's more types
if ($GPOPermission.Trustee.SidType -ne 'Unknown') {
return
}
}
if ($Type -contains 'AuthenticatedUsers' -and $Type -notcontains 'All') {
if ($GPOPermission.Trustee.Sid -ne 'S-1-5-11') {
return
}
}
if ($Type -contains 'DomainComputers' -and $Type -notcontains 'All') {
$DomainComputersSID = -join ($ExtendedForestInformation['DomainsExtended'][$GPO.DomainName].DomainSID, '-515')
if ($GPOPermission.Trustee.Sid -ne $DomainComputersSID) {
return
}
}
if ($GPOPermission.Trustee.Domain) {
$UserMerge = -join ($GPOPermission.Trustee.Domain, '\', $GPOPermission.Trustee.Name)
} else {
$UserMerge = $null
}
if ($Principal) {
if ($PrincipalType -eq 'Sid') {
if ($Principal -notcontains $GPOPermission.Trustee.Sid.Value) {
@@ -72,56 +115,95 @@
return
}
} elseif ($PrincipalType -eq 'Name') {
$UserMerge = -join ($GPOPermission.Trustee.Domain, '\', $GPOPermission.Trustee.Name)
if ($Principal -notcontains $UserMerge -and $Principal -notcontains $GPOPermission.Trustee.Name) {
if ($Principal -notcontains $GPOPermission.Trustee.Name) {
return
}
} elseif ($PrincipalType -eq 'NetbiosName') {
if ($Principal -notcontains $UserMerge) {
return
}
}
}
$ReturnObject = [ordered] @{
DisplayName = $GPO.DisplayName # : ALL | Enable RDP
GUID = $GPO.ID
DomainName = $GPO.DomainName # : ad.evotec.xyz
Enabled = $GPO.GpoStatus
Description = $GPO.Description
CreationDate = $GPO.CreationTime
ModificationTime = $GPO.ModificationTime
PermissionType = if ($GPOPermission.Denied -eq $true) { 'Deny' } else { 'Allow' }
Permission = $GPOPermission.Permission # : GpoEditDeleteModifySecurity
Inherited = $GPOPermission.Inherited # : False
Domain = $GPOPermission.Trustee.Domain #: EVOTEC
DistinguishedName = $GPOPermission.Trustee.DSPath #: CN = Domain Admins, CN = Users, DC = ad, DC = evotec, DC = xyz
Name = $GPOPermission.Trustee.Name #: Domain Admins
Sid = $GPOPermission.Trustee.Sid.Value #: S - 1 - 5 - 21 - 853615985 - 2870445339 - 3163598659 - 512
SidType = $GPOPermission.Trustee.SidType #: Group
}
if ($Accounts) {
$A = -join ($GPOPermission.Trustee.Domain, '\', $GPOPermission.Trustee.Name)
if ($A -and $Accounts[$A]) {
$ReturnObject['UserPrincipalName'] = $Accounts[$A].UserPrincipalName
$ReturnObject['AccountEnabled'] = $Accounts[$A].Enabled
$ReturnObject['DistinguishedName'] = $Accounts[$A].DistinguishedName
$ReturnObject['PasswordLastSet'] = if ($Accounts[$A].PasswordLastSet) { $Accounts[$A].PasswordLastSet } else { '' }
$ReturnObject['LastLogonDate'] = if ($Accounts[$A].LastLogonDate ) { $Accounts[$A].LastLogonDate } else { '' }
if (-not $ReturnObject['Sid']) {
$ReturnObject['Sid'] = $Accounts[$A].Sid.Value
if ($ExcludePrincipal) {
if ($ExcludePrincipalType -eq 'Sid') {
if ($ExcludePrincipal -contains $GPOPermission.Trustee.Sid.Value) {
return
}
if ($Accounts[$A].ObjectClass -eq 'group') {
$ReturnObject['SidType'] = 'Group'
} elseif ($Accounts[$A].ObjectClass -eq 'user') {
$ReturnObject['SidType'] = 'User'
} elseif ($Accounts[$A].ObjectClass -eq 'computer') {
$ReturnObject['SidType'] = 'Computer'
} else {
$ReturnObject['SidType'] = 'EmptyOrUnknown'
} elseif ($ExcludePrincipalType -eq 'DistinguishedName') {
if ($ExcludePrincipal -contains $GPOPermission.Trustee.DSPath) {
return
}
} elseif ($ExcludePrincipalType -eq 'Name') {
if ($ExcludePrincipal -contains $GPOPermission.Trustee.Name) {
return
}
} elseif ($ExcludePrincipalType -eq 'NetbiosName') {
if ($ExcludePrincipal -contains $UserMerge) {
return
}
} else {
$ReturnObject['UserPrincipalName'] = ''
$ReturnObject['AccountEnabled'] = ''
$ReturnObject['PasswordLastSet'] = ''
$ReturnObject['LastLogonDate'] = ''
}
}
<#
# Sets permissions name, domain, distinguishedname to proper values
if ($GPOPermission.Trustee.Name) {
$DomainPlusName = -join ($GPOPermission.Trustee.Domain, '\', $GPOPermission.Trustee.Name)
if ($GPOPermission.Trustee.DSPath) {
$NetbiosConversion = ConvertFrom-NetbiosName -Identity $DomainPlusName
if ($NetbiosConversion.DomainName) {
$UserNameDomain = $NetbiosConversion.DomainName
$UserName = $NetbiosConversion.Name
}
} else {
$UserNameDomain = ''
$Username = $DomainPlusName
}
} else {
$DomainPlusName = ''
$UserNameDomain = ''
$Username = ''
}
#>
# I don't trust the returned data, some stuff like 'alias' shows up for groups. To unify it with everything else... using my own function
$PermissionAccount = Get-WinADObject -Identity $GPOPermission.Trustee.Sid.Value -AddType -Cache -Verbose:$false
if ($PermissionAccount) {
$UserNameDomain = $PermissionAccount.DomainName
$UserName = $PermissionAccount.Name
$SidType = $PermissionAccount.Type
$ObjectClass = $PermissionAccount.ObjectClass
} else {
$ConvertFromSID = ConvertFrom-SID -SID $GPOPermission.Trustee.Sid.Value
$UserNameDomain = ''
$Username = $ConvertFromSID.Name
$SidType = $ConvertFromSID.Type
if ($SidType -eq 'Unknown') {
$ObjectClass = 'unknown'
} else {
$ObjectClass = 'foreignSecurityPrincipal'
}
}
$ReturnObject = [ordered] @{
DisplayName = $GPO.DisplayName # : ALL | Enable RDP
GUID = $GPO.ID
DomainName = $GPO.DomainName # : ad.evotec.xyz
Enabled = $GPO.GpoStatus
Description = $GPO.Description
CreationDate = $GPO.CreationTime
ModificationTime = $GPO.ModificationTime
PermissionType = if ($GPOPermission.Denied -eq $true) { 'Deny' } else { 'Allow' }
Permission = $GPOPermission.Permission # : GpoEditDeleteModifySecurity
Inherited = $GPOPermission.Inherited # : False
PrincipalNetBiosName = $UserMerge
PrincipalDistinguishedName = $GPOPermission.Trustee.DSPath #: CN = Domain Admins, CN = Users, DC = ad, DC = evotec, DC = xyz
PrincipalDomainName = $UserNameDomain #: EVOTEC
PrincipalName = $UserName #: Domain Admins
PrincipalSid = $GPOPermission.Trustee.Sid.Value #: S - 1 - 5 - 21 - 853615985 - 2870445339 - 3163598659 - 512
PrincipalSidType = $SidType #$GPOPermission.Trustee.SidType #: Group
PrincipalObjectClass = $ObjectClass
}
if ($IncludeGPOObject) {
$ReturnObject['GPOObject'] = $GPO
$ReturnObject['GPOSecurity'] = $SecurityRights
@@ -129,69 +211,139 @@
}
[PSCustomObject] $ReturnObject
}
if ($IncludeOwner.IsPresent) {
if ($IncludeOwner) {
if ($GPO.Owner) {
$SplittedOwner = $GPO.Owner.Split('\')
$DomainOwner = $SplittedOwner[0] #: EVOTEC
$DomainUserName = $SplittedOwner[1] #: Domain Admins
$SID = $ADAdministrativeGroups['ByNetBIOS']["$($GPO.Owner)"].Sid.Value
if ($SID) {
$SIDType = 'Group'
$DistinguishedName = $ADAdministrativeGroups['ByNetBIOS']["$($GPO.Owner)"].DistinguishedName
# I don't trust the returned data, some stuff like 'alias' shows up for groups. To unify it with everything else... using my own function
$OwnerAccount = Get-WinADObject -Identity $GPO.Owner -AddType -Cache -Verbose:$false
if ($OwnerAccount) {
$UserNameDomain = $OwnerAccount.DomainName
$UserName = $OwnerAccount.Name
$SidType = $OwnerAccount.Type
$OwnerObjectClass = $OwnerAccount.ObjectClass
$SID = $OwnerAccount.ObjectSID
} else {
$SIDType = ''
$DistinguishedName = ''
$ConvertFromSID = ConvertFrom-SID -SID $GPO.Owner
$UserNameDomain = ''
$Username = $ConvertFromSID.Name
$SidType = $ConvertFromSID.Type
if ($SidType -eq 'Unknown') {
$OwnerObjectClass = 'unknown'
} else {
$OwnerObjectClass = 'foreignSecurityPrincipal'
}
$SID = $ConvertFromSID.SID
}
} else {
$DomainOwner = $GPO.Owner
$DomainUserName = ''
$UserName = ''
$UserNameDomain = ''
$SID = ''
$SIDType = 'EmptyOrUnknown'
$SIDType = 'Unknown'
$DistinguishedName = ''
$OwnerObjectClass = 'unknown'
}
$ReturnObject = [ordered] @{
DisplayName = $GPO.DisplayName # : ALL | Enable RDP
GUID = $GPO.Id
DomainName = $GPO.DomainName # : ad.evotec.xyz
Enabled = $GPO.GpoStatus
Description = $GPO.Description
CreationDate = $GPO.CreationTime
ModificationTime = $GPO.ModificationTime
Permission = 'GpoOwner' # : GpoEditDeleteModifySecurity
Inherited = $false # : False
Domain = $DomainOwner
DistinguishedName = $DistinguishedName #: CN = Domain Admins, CN = Users, DC = ad, DC = evotec, DC = xyz
Name = $DomainUserName
Sid = $SID #: S - 1 - 5 - 21 - 853615985 - 2870445339 - 3163598659 - 512
SidType = $SIDType # #: Group
}
if ($Accounts) {
$A = $GPO.Owner
if ($A -and $Accounts[$A]) {
$ReturnObject['UserPrincipalName'] = $Accounts[$A].UserPrincipalName
$ReturnObject['AccountEnabled'] = $Accounts[$A].Enabled
$ReturnObject['DistinguishedName'] = $Accounts[$A].DistinguishedName
$ReturnObject['PasswordLastSet'] = if ($Accounts[$A].PasswordLastSet) { $Accounts[$A].PasswordLastSet } else { '' }
$ReturnObject['LastLogonDate'] = if ($Accounts[$A].LastLogonDate ) { $Accounts[$A].LastLogonDate } else { '' }
if (-not $ReturnObject['Sid']) {
$ReturnObject['Sid'] = $Accounts[$A].Sid.Value
}
if ($Accounts[$A].ObjectClass -eq 'group') {
$ReturnObject['SidType'] = 'Group'
} elseif ($Accounts[$A].ObjectClass -eq 'user') {
$ReturnObject['SidType'] = 'User'
} elseif ($Accounts[$A].ObjectClass -eq 'computer') {
$ReturnObject['SidType'] = 'Computer'
} else {
$ReturnObject['SidType'] = 'EmptyOrUnknown'
# We have to process it for owners after querying user because $Owners are not as established as standard permissions so we don't know a lot
if ($Type -contains 'Administrative' -and $Type -notcontains 'All') {
if ($SID) {
$IsAdministrative = $ADAdministrativeGroups['BySID'][$SID]
if (-not $IsAdministrative) {
return
}
} else {
$ReturnObject['UserPrincipalName'] = ''
$ReturnObject['AccountEnabled'] = ''
$ReturnObject['PasswordLastSet'] = ''
$ReturnObject['LastLogonDate'] = ''
# if there is no SID, it's not administrative
return
}
}
if ($Type -contains 'NotWellKnownAdministrative' -and $Type -notcontains 'All') {
# We check for SYSTEM account
# Maybe we should make it a function and provide more
if ($SID -eq 'S-1-5-18') {
return
}
}
if ($Type -contains 'WellKnownAdministrative' -and $Type -notcontains 'All') {
# We check for SYSTEM account
# Maybe we should make it a function and provide more
if ($SID -ne 'S-1-5-18') {
return
}
}
if ($Type -contains 'Unknown' -and $Type -notcontains 'All') {
# May need updates if there's more types
if ($SidType -ne 'Unknown') {
return
}
}
if ($Type -contains 'AuthenticatedUsers' -and $Type -notcontains 'All') {
if ($SID -ne 'S-1-5-11') {
return
}
}
if ($Type -contains 'DomainComputers' -and $Type -notcontains 'All') {
$DomainComputersSID = -join ($ExtendedForestInformation['DomainsExtended'][$GPO.DomainName].DomainSID, '-515')
if ($SID -ne $DomainComputersSID) {
return
}
}
if ($Principal) {
if ($PrincipalType -eq 'Sid') {
if ($Principal -notcontains $SID) {
return
}
} elseif ($PrincipalType -eq 'DistinguishedName') {
if ($Principal -notcontains $DistinguishedName) {
return
}
} elseif ($PrincipalType -eq 'Name') {
if ($Principal -notcontains $UserName) {
return
}
} elseif ($PrincipalType -eq 'NetbiosName') {
if ($Principal -notcontains $GPO.Owner) {
return
}
}
}
if ($ExcludePrincipal) {
if ($ExcludePrincipalType -eq 'Sid') {
if ($ExcludePrincipal -contains $SID) {
return
}
} elseif ($ExcludePrincipalType -eq 'DistinguishedName') {
if ($ExcludePrincipal -contains $DistinguishedName) {
return
}
} elseif ($ExcludePrincipalType -eq 'Name') {
if ($ExcludePrincipal -contains $UserName) {
return
}
} elseif ($ExcludePrincipalType -eq 'NetbiosName') {
if ($ExcludePrincipal -contains $GPO.Owner) {
return
}
}
}
$ReturnObject = [ordered] @{
DisplayName = $GPO.DisplayName # : ALL | Enable RDP
GUID = $GPO.Id
DomainName = $GPO.DomainName # : ad.evotec.xyz
Enabled = $GPO.GpoStatus
Description = $GPO.Description
CreationDate = $GPO.CreationTime
ModificationTime = $GPO.ModificationTime
PermissionType = 'Allow'
Permission = 'GpoOwner' # : GpoEditDeleteModifySecurity
Inherited = $false # : False
PrincipalNetBiosName = $GPO.Owner
PrincipalDistinguishedName = $DistinguishedName #: CN = Domain Admins, CN = Users, DC = ad, DC = evotec, DC = xyz
PrincipalDomainName = $UserNameDomain
PrincipalName = $UserName
PrincipalSid = $SID #: S - 1 - 5 - 21 - 853615985 - 2870445339 - 3163598659 - 512
PrincipalSidType = $SIDType # #: Group
PrincipalObjectClass = $OwnerObjectClass
}
if ($IncludeGPOObject) {
$ReturnObject['GPOObject'] = $GPO
$ReturnObject['GPOSecurity'] = $SecurityRights

Some files were not shown because too many files have changed in this diff Show More