Guest User

Untitled

a guest
Oct 2nd, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.78 KB | None | 0 0
  1. $ErrorActionPreference = "Continue"
  2. $sig = @"
  3. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  4. public struct NativeCredential
  5. {
  6. public UInt32 Flags;
  7. public CRED_TYPE Type;
  8. public IntPtr TargetName;
  9. public IntPtr Comment;
  10. public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
  11. public UInt32 CredentialBlobSize;
  12. public IntPtr CredentialBlob;
  13. public UInt32 Persist;
  14. public UInt32 AttributeCount;
  15. public IntPtr Attributes;
  16. public IntPtr TargetAlias;
  17. public IntPtr UserName;
  18. internal static NativeCredential GetNativeCredential(Credential cred)
  19. {
  20. NativeCredential ncred = new NativeCredential();
  21. ncred.AttributeCount = 0;
  22. ncred.Attributes = IntPtr.Zero;
  23. ncred.Comment = IntPtr.Zero;
  24. ncred.TargetAlias = IntPtr.Zero;
  25. ncred.Type = CRED_TYPE.GENERIC;
  26. ncred.Persist = (UInt32)1;
  27. ncred.CredentialBlobSize = (UInt32)cred.CredentialBlobSize;
  28. ncred.TargetName = Marshal.StringToCoTaskMemUni(cred.TargetName);
  29. ncred.CredentialBlob = Marshal.StringToCoTaskMemUni(cred.CredentialBlob);
  30. ncred.UserName = Marshal.StringToCoTaskMemUni(System.Environment.UserName);
  31. return ncred;
  32. }
  33. }
  34. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  35. public struct Credential
  36. {
  37. public UInt32 Flags;
  38. public CRED_TYPE Type;
  39. public string TargetName;
  40. public string Comment;
  41. public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
  42. public UInt32 CredentialBlobSize;
  43. public string CredentialBlob;
  44. public UInt32 Persist;
  45. public UInt32 AttributeCount;
  46. public IntPtr Attributes;
  47. public string TargetAlias;
  48. public string UserName;
  49. }
  50. public enum CRED_TYPE : uint
  51. {
  52. GENERIC = 1,
  53. DOMAIN_PASSWORD = 2,
  54. DOMAIN_CERTIFICATE = 3,
  55. DOMAIN_VISIBLE_PASSWORD = 4,
  56. GENERIC_CERTIFICATE = 5,
  57. DOMAIN_EXTENDED = 6,
  58. MAXIMUM = 7, // Maximum supported cred type
  59. MAXIMUM_EX = (MAXIMUM + 1000), // Allow new applications to run on old OSes
  60. }
  61. public class CriticalCredentialHandle : Microsoft.Win32.SafeHandles.CriticalHandleZeroOrMinusOneIsInvalid
  62. {
  63. public CriticalCredentialHandle(IntPtr preexistingHandle)
  64. {
  65. SetHandle(preexistingHandle);
  66. }
  67. public Credential GetCredential()
  68. {
  69. if (!IsInvalid)
  70. {
  71. NativeCredential ncred = (NativeCredential)Marshal.PtrToStructure(handle,
  72. typeof(NativeCredential));
  73. Credential cred = new Credential();
  74. cred.CredentialBlobSize = ncred.CredentialBlobSize;
  75. cred.CredentialBlob = Marshal.PtrToStringUni(ncred.CredentialBlob,
  76. (int)ncred.CredentialBlobSize / 2);
  77. cred.UserName = Marshal.PtrToStringUni(ncred.UserName);
  78. cred.TargetName = Marshal.PtrToStringUni(ncred.TargetName`);
  79. cred.TargetAlias = Marshal.PtrToStringUni(ncred.TargetAlias);
  80. cred.Type = ncred.Type;
  81. cred.Flags = ncred.Flags;
  82. cred.Persist = ncred.Persist;
  83. return cred;
  84. }
  85. else
  86. {
  87. throw new InvalidOperationException("Invalid CriticalHandle!");
  88. }
  89. }
  90. override protected bool ReleaseHandle()
  91. {
  92. if (!IsInvalid)
  93. {
  94. CredFree(handle);
  95. SetHandleAsInvalid();
  96. return true;
  97. }
  98. return false;
  99. }
  100. }
  101. [DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)]
  102. public static extern bool CredRead(string target, CRED_TYPE type, int reservedFlag, out IntPtr CredentialPtr);
  103. [DllImport("Advapi32.dll", EntryPoint = "CredFree", SetLastError = true)]
  104. public static extern bool CredFree([In] IntPtr cred);
  105. "@
  106. Add-Type -MemberDefinition $sig -Namespace "ADVAPI32" -Name 'Util'
  107. $targetName = "LicenceManagment"
  108. $nCredPtr= New-Object IntPtr
  109. $success = [ADVAPI32.Util]::CredRead($targetName,1,0,[ref] $nCredPtr)
  110. if($success){
  111. $critCred = New-Object ADVAPI32.Util+CriticalCredentialHandle $nCredPtr
  112. $cred = $critCred.GetCredential()
  113. $UserName = $cred.UserName;
  114. $Password = $cred.CredentialBlob;
  115. $Password = ConvertTo-SecureString -String $Password -AsPlainText -Force
  116. $objCreds = New-Object Management.Automation.PSCredential $UserName, $Password
  117. }
  118. ####
  119. If(@(Get-Module | ? { $_.Name -eq "MSOnline"}).Count -eq 0)
  120. {
  121. Import-Module MSOnline;
  122. }
  123. If(@(Get-Module | ? { $_.Name -eq "ActiveDirectory"}).Count -eq 0)
  124. {
  125. Import-Module ActiveDirectory;
  126. }
  127. $LoggingFile="C:\Office365-Scripts\LicenceLog.txt"
  128. $POWER_BI_STANDARD="C:\Office365-Scripts\POWER_BI_STANDARD.txt"
  129. $STANDARDWOFFPACK_FACULTY="C:\Office365-Scripts\STANDARDWOFFPACK_FACULTY.txt"
  130. $OFFICESUBSCRIPTION_FACULTY="C:\Office365-Scripts\OFFICESUBSCRIPTION_FACULTY.txt"
  131. $OFFICESUBSCRIPTION_STUDENT="C:\Office365-Scripts\OFFICESUBSCRIPTION_STUDENT.txt"
  132. $STANDARDWOFFPACK_IW_STUDENT="C:\Office365-Scripts\STANDARDWOFFPACK_IW_STUDENT.txt"
  133. $CRMSTANDARD="C:\Office365-Scripts\CRMSTANDARD.txt"
  134. $INTUNE_A="C:\Office365-Scripts\INTUNE_A.txt"
  135. $STANDARDWOFFPACK_IW_FACULTY="C:\Office365-Scripts\STANDARDWOFFPACK_IW_FACULTY.txt"
  136. $PROJECTONLINE_PLAN_1_FACULTY="C:\Office365-Scripts\PROJECTONLINE_PLAN_1_FACULTY.txt"
  137. $STANDARDWOFFPACK_STUDENT="C:\Office365-Scripts\STANDARDWOFFPACK_STUDENT.txt"
  138. Connect-MsolService -Credential $objCreds
  139. $Users=Get-MsolUser -all | where {$_.isLicensed -eq "True"}
  140. ForEach ($User in $Users)
  141. {
  142. If($User.UserPrincipalName -notlike "*<YourTenancyName>.onmicrosoft.com" -and $User.UserPrincipalName -ne "DirSync@blah.com")
  143. {
  144. $AdUser=Get-ADUser -Filter {UserPrincipalName -eq $User.UserPrincipalName} -Properties extensionAttribute5, sAMAccountName
  145. $List=$NULL
  146. $Licences=$User.Licenses
  147. $SKUIDs=$Licences.AccountSkuId
  148. ForEach ($SKU in $SKUIDs)
  149. {
  150. If ($SKU -eq "<YourTenancyName>:POWER_BI_STANDARD")
  151. {
  152. Add-ADGroupMember -Identity POWER_BI_STANDARD_Users -Members $AdUser.sAMAccountName
  153. #Add-Content $POWER_BI_STANDARD $User.UserPrincipalName
  154. }
  155. If ($SKU -eq "<YourTenancyName>:STANDARDWOFFPACK_FACULTY")
  156. {
  157. Add-ADGroupMember -Identity STANDARDWOFFPACK_FACULTY_Users -Members $AdUser.sAMAccountName
  158. #Add-Content $STANDARDWOFFPACK_FACULTY $User.UserPrincipalName
  159. }
  160. If ($SKU -eq "<YourTenancyName>:OFFICESUBSCRIPTION_FACULTY")
  161. {
  162. Add-ADGroupMember -Identity OFFICESUBSCRIPTION_FACULTY_Users -Members $AdUser.sAMAccountName
  163. #Add-Content $OFFICESUBSCRIPTION_FACULTY $User.UserPrincipalName
  164. }
  165. If ($SKU -eq "<YourTenancyName>:OFFICESUBSCRIPTION_STUDENT")
  166. {
  167. Add-ADGroupMember -Identity OFFICESUBSCRIPTION_STUDENT_Users -Members $AdUser.sAMAccountName
  168. #Add-Content $OFFICESUBSCRIPTION_STUDENT $User.UserPrincipalName
  169. }
  170. #If ($SKU -eq "<YourTenancyName>:STANDARDWOFFPACK_IW_STUDENT")
  171. #{
  172. ##Add-Content $STANDARDWOFFPACK_IW_STUDENT $User.UserPrincipalName
  173. #}
  174. If ($SKU -eq "<YourTenancyName>:CRMSTANDARD")
  175. {
  176. Add-ADGroupMember -Identity CRMSTANDARD_Users -Members $AdUser.sAMAccountName
  177. #Add-Content $CRMSTANDARD $User.UserPrincipalName
  178. }
  179. If ($SKU -eq "<YourTenancyName>:INTUNE_A")
  180. {
  181. Add-ADGroupMember -Identity INTUNE_A_Users -Members $AdUser.sAMAccountName
  182. #Add-Content $INTUNE_A $User.UserPrincipalName
  183. }
  184. #If ($SKU -eq "<YourTenancyName>:STANDARDWOFFPACK_IW_FACULTY")
  185. #{
  186. ##Add-Content $STANDARDWOFFPACK_IW_FACULTY $User.UserPrincipalName
  187. #}
  188. If ($SKU -eq "<YourTenancyName>:PROJECTONLINE_PLAN_1_FACULTY")
  189. {
  190. Add-ADGroupMember -Identity PROJECTONLINE_PLAN_1_FACULTY_Users -Members $AdUser.sAMAccountName
  191. #Add-Content $PROJECTONLINE_PLAN_1_FACULTY $User.UserPrincipalName
  192. }
  193. If ($SKU -eq "<YourTenancyName>:STANDARDWOFFPACK_STUDENT")
  194. {
  195. Add-ADGroupMember -Identity STANDARDWOFFPACK_STUDENT_Users -Members $AdUser.sAMAccountName
  196. #Add-Content $STANDARDWOFFPACK_STUDENT $User.UserPrincipalName
  197. }
  198. $List = $List + $SKU + "|"
  199. }
  200. Sort-object $List
  201. Write-Host $List
  202. $Content=$User.UserPrincipalName + "|" + $List
  203. #Add-Content $LoggingFile $Content
  204. }
  205. }
Add Comment
Please, Sign In to add comment