欢迎光临
我们一直在努力

[PowerShell] 无需全局管理员权限查看 Office365 组织内的订阅属性(订阅日期,许可证,全局管理员状态等)

此工具用于查询Office365订阅(许可证)状态。
无需管理员权限即可查看Office365组织内的订阅属性以及全局管理员的状态。
比如: 验证该Office365组织的全局管理员账户是否翻车(被禁止登陆)/是否存在.

使用方法:
下载:Office365.ps1
http://piaoyun.online/Office365
代码如下:

[CmdletBinding()]
Param([String]u, [String]p, [String]l)
<#
  # Details Office365 SKU by Powershell  #                  Author: MoeClub.org
   Name       : SKU
  -------------------------------------
  E3_MSDN    : DEVELOPERPACK
  A1_Student : STANDARDWOFFPACK_STUDENT
  A1_Faculty : STANDARDWOFFPACK_FACULTY
  A1P_Student :STANDARDWOFFPACK_IW_STUDENT
  A1P_Faculty :STANDARDWOFFPACK_IW_FACULTY

#>
# Allow script: "Set-ExecutionPolicy -ExecutionPolicy Bypass -Force"CommandList = (Get-Command -All)
If (-Not ("Connect-MsolService" -in CommandList.Name)) { Write-Host "`nInstall..."; Install-Module -Scope CurrentUser -Name MSOnline -Force }
If ([String]::IsNullOrEmpty((u).Trim())) {  Do {User = (Read-Host "Microsoft Office365 UserName") } While ([String]::IsNullOrEmpty((User).Trim())) 
} Else {
  User =u
}
If ([String]::IsNullOrEmpty((p).Trim())) { 
  Do { Passwd = (Read-Host "Microsoft Office365 Password") } While ([String]::IsNullOrEmpty((Passwd).Trim()))
} Else {Passwd = p
}SecureString = ConvertTo-SecureString -AsPlainText "{Passwd}" -ForceMySecureCreds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList {User},{SecureString}
Write-Host "`nLogin: {User}"
Connect-MsolService -CredentialMySecureCreds 2>&1>null
If (-Not?) { Write-Host "Error: Authentication."; Exit 1; }
UserRole = (Get-MsolUserRole -UserPrincipalName "{User}").Name
UserDetails = (Get-MsolUser -UserPrincipalName "{User}")
UserSKU_Full = (Get-MsolAccountSku)UserORG = (UserSKU_Full.AccountSkuId -Split ":")[0]
If ([String]::IsNullOrEmpty(UserORG)) { Write-Host "Error: Office365 Name." }
UserSKU =UserSKU_Full.AccountSkuId
If ([String]::IsNullOrEmpty(UserRole)) {UserRole = "User" }
Write-Host "User Role: {UserRole}"AdminGuid = (Get-MsolRole -RoleName "Company Administrator").ObjectId.Guid
If (-not ([String]::IsNullOrEmpty((AdminGuid).Trim()))) {
  Function QueryAdmin(AdminUser){
    If (-not ([String]::IsNullOrEmpty(AdminUser))) {
      AdminBlock = (Get-MsolUser -UserPrincipalName "{AdminUser}").BlockCredential
      If ("AdminBlock" -eq "False") {AdminStatus = "[Enable]" } Else { AdminStatus = "[Disable]" }
      Return -Join("AdminStatus", "AdminUser", "; ")
    }
  }AdminList = (Get-MsolRoleMember -RoleObjectId AdminGuid).EmailAddress
  If (-not ([String]::IsNullOrEmpty((AdminList)))) {AdminRole = ""
    If (AdminList -is [String]) {AdminRole = (QueryAdmin AdminList)
    } ElseIf (AdminList -is [Array]) {
      For(i=0;i -lt AdminList.Count;i++){
        AdminRole += (QueryAdminAdminList[i])
      }
    }
  } Else {AdminRole = "[Null]"
  }
  If (-not ([String]::IsNullOrEmpty((AdminRole)))) {
    Write-Host "Admin User: {AdminRole}"
  }
}UserDomain = (Get-MsolDomain)
UserDomain_Item = ""
For(i=0; i -ltUserDomain.Count; i++) {Domain_Name = UserDomain[i].Name
  Domain_Default =UserDomain[i].IsDefault
  If (Domain_Default -eq True){Domain_Status = "Default"
  } Else {
    Domain_Status =UserDomain[i].Status
  }UserDomain_Item += -Join("[", "{Domain_Status}", "]", "{Domain_Name}", "; ")
}
Write-Host "Office365 Domain: {UserDomain_Item}"
If (-not ([String]::IsNullOrEmpty((l).Trim()))) {
  If ("l" -eq "_"){ Exit 0 }
  If (-Join("UserORG", ":", "l") -in UserSKU) {QueryItem = l
  } Else {l = ""
  }
}
If ([String]::IsNullOrEmpty((l).Trim())) {
  QueryItem = ""
  If (UserSKU -is [Array]){
    If (UserSKU.Count -gt 0) {SKUITEM = ""
      For(i=0;i -lt UserSKU.Count;i++){ SKUITEM += -Join((UserSKU[i] -Split ":")[1], "; ") }
      Write-Host "Office365 SKU:{SKUITEM}"
      Do { QueryItem = (Read-Host "Query Office365 SKU") } While (-not (-Join("UserORG", ":", "QueryItem") -inUserSKU))
      Write-Host "`n"
    } Else {
      Write-Host "Error: Not found subscription."; Exit 1
    }
  } Else {
    QueryItem = (UserSKU -Split ":")[1]
  }
}
skuDetails = (UserSKU_Full | where {_.AccountSkuId -eq -Join("UserORG", ":", "QueryItem")})SubscriptionId = (skuDetails.SubscriptionIds.Guid)
If ([String]::IsNullOrEmpty(SubscriptionId)) { Write-Host "Error: Subscription."; Exit 1 }
Function QueryStatus(SubscriptionId){SubscriptionDetails = (Get-MsolSubscription -SubscriptionId SubscriptionId)SubscriptionDate = (SubscriptionDetails.DateCreated -Split"")[0]SubscriptionStatus = "(SubscriptionDetails.Status)"
  Write-Host "TotalUnits: (SubscriptionDetails.TotalLicenses)"
  If ("(SubscriptionDetails.IsTrial)" -eq "False") {
    Write-Host "SubscriptionStatus: {SubscriptionStatus}"
  } Else {
    Write-Host "SubscriptionStatus: [Trial]{SubscriptionStatus}"
  }
  Write-Host "SubscriptionDate: {SubscriptionDate}"
  Write-Host "SubscriptionId:{SubscriptionId}"
  If ("SubscriptionStatus" -eq "Enabled") { Return 0 } Else { Return 1 }
}SkuPartNumber = "(skuDetails.SkuPartNumber)"
Write-Host "SkuName: {SkuPartNumber}"
Write-Host "ActiveUnits:(skuDetails.ActiveUnits)"
Write-Host "ConsumedUnits:(skuDetails.ConsumedUnits)"
If (SubscriptionId -Is [String]) {
  ReturnCode = (QueryStatusSubscriptionId)
} ElseIf (SubscriptionId -Is [Array]) {
  For(i=0;i -ltSubscriptionId.Count;i++){
    Write-Host "Item:{SkuPartNumber}[(i+1)]"
    ReturnList += (QueryStatusSubscriptionId[i])
  }
  If (1 -inReturnList){ ReturnCode = 1 } Else {ReturnCode = 0 }
}
If ("$ReturnCode" -eq "0") { Exit 0 } Else { Exit 1 }

运行方式有两种:

1、在命令提示符中交互式运行:

# 在Office365.ps1所在文件夹中按住Shift并点击鼠标右键选择"在此处打开命令窗口".
powershell .\Office365.ps1

2、在命令提示符中带参数运行(参数可选):

# 在Office365.ps1所在文件夹中按住Shift并点击鼠标右键选择"在此处打开命令窗口".
# 当""项指定值为"_"时,则不查询SKU状态.
powershell .\Office365.ps1 -u  -p  -l 

3、在PowerShell中运行:

# 打开PowerShell主程序,切换至Office365.ps1所在目录.
# 执行脚本(带参数或不带参数).
.\Office365.ps1
.\Office365.ps1 -u  -p  -l 

4、无法运行/运行报错:

# 以管理员身份运行命令提示符,输入powershell并按回车,然后执行下面命令.
# 第一次运行将自动下载所需组件,请耐心等待.
# 直接打开运行会造成视觉上的闪退效果,请打开命令提示符或者Powershell主程序运行.
# 飘云在Win10上测试, 无任何异常.如果出现表达式错误,请升级您的Powershell版本.
Set-ExecutionPolicy -ExecutionPolicy Bypass -Force
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser -Force

使用说明:

当SKU类型数量等于1时,默认选择唯一的SKU名称.
当SKU类型数量大于1时,在给出的列表中选择一项输入SKU名称.
在命令提示符中鼠标右键为复制/粘贴.
一些常见的SKU名称:

#  Name       : SKU
-------------------------------------
#  E3_MSDN    : DEVELOPERPACK
#  A1_Student : STANDARDWOFFPACK_STUDENT
#  A1_Faculty : STANDARDWOFFPACK_FACULTY
#  A1P_Student :STANDARDWOFFPACK_IW_STUDENT
#  A1P_Faculty :STANDARDWOFFPACK_IW_FACULTY

示例:

如果显示信息不完整,则是全局管理员关闭了Azure AD访问权限.

Login: admin@piaoyuncc.onmicrosoft.com
User Role: User    # 此用户在组织内的角色. User: 普通用户; Company Administrator: 全局管理员
Admin User: [Disable]admin@piaoyuncc.onmicrosoft.com;    # 全局管理员状态列表. [Disable]表示该全局管理员目前不可以登录. [Enable]表示该全局管理员目前可以登录. [Null]表示该组织目前无全局管理员.
Office365 SKU: DEVELOPERPACK; STANDARDWOFFPACK_STUDENT; STANDARDWOFFPACK_FACULTY; STANDARDWOFFPACK_IW_FACULTY; STANDARDWOFFPACK_IW_STUDENT;   # 组织内可用的SKU列表

Query Office365 SKU: STANDARDWOFFPACK_IW_STUDENT    # 输入要查询的SKU名称

SkuName: STANDARDWOFFPACK_IW_STUDENT    # 显示SKU名称
ActiveUnits: 1000000    # 显示SKU可用许可证数量
ConsumedUnits: 1    # 显示SKU已分配许可证数量
TotalUnits: 1000000    # 显示SKU总共许可证数量
SubscriptionStatus: Enabled    # 显示许可证状态. 如果是Enabled状态,则订阅正常. 如果含有[Trial]标记,则表示为试用类型订阅.
SubscriptionDate: 10/17/2015    # 订阅创建日期. 如果调整过许可证数量,则显示为最近调整的日期.
SubscriptionId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx    # 订阅唯一ID.
赞(0)
未经允许不得转载:飘云 » [PowerShell] 无需全局管理员权限查看 Office365 组织内的订阅属性(订阅日期,许可证,全局管理员状态等)
分享到: 更多 (0)