我是一名审计员,我发现我所在的公司中有两个用户拥有未经授权的 Windows 操作系统,这让我相信可能还有其他用户。我很好奇,是否有任何方法可以提取域中所有未激活 Windows 的帐户?
答案1
是的,有多种的 选项。从 Scriptin Guys Blog 获取Get-ActivationStatus
代码片段(或函数)并尝试如下操作:
Get-ADComputer -Filter * | Get-ActivationStatus | Export-Csv C:\Activation.csv
function Get-ActivationStatus {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[string]$DNSHostName = $Env:COMPUTERNAME
)
process {
try {
$wpa = Get-WmiObject SoftwareLicensingProduct -ComputerName $DNSHostName `
-Filter "ApplicationID = '55c92734-d682-4d71-983e-d6ec3f16059f'" `
-Property LicenseStatus -ErrorAction Stop
} catch {
$status = New-Object ComponentModel.Win32Exception ($_.Exception.ErrorCode)
$wpa = $null
}
$out = New-Object psobject -Property @{
ComputerName = $DNSHostName;
Status = [string]::Empty;
}
if ($wpa) {
:outer foreach($item in $wpa) {
switch ($item.LicenseStatus) {
0 {$out.Status = "Unlicensed"}
1 {$out.Status = "Licensed"; break outer}
2 {$out.Status = "Out-Of-Box Grace Period"; break outer}
3 {$out.Status = "Out-Of-Tolerance Grace Period"; break outer}
4 {$out.Status = "Non-Genuine Grace Period"; break outer}
5 {$out.Status = "Notification"; break outer}
6 {$out.Status = "Extended Grace"; break outer}
default {$out.Status = "Unknown value"}
}
}
} else {$out.Status = $status.Message}
$out
}
}
答案2
虽然使用批量激活管理工具 (VAMT)得到报告?
批量激活管理工具 (VAMT) 使网络管理员和其他 IT 专业人员能够自动化和集中管理 Windows®、Microsoft® Office 以及其他 Microsoft 产品批量和零售激活流程。VAMT 可以使用多个激活密钥 (MAK) 或 Windows 密钥管理服务 (KMS) 来管理批量激活。
VAMT 旨在管理以下操作系统的批量激活:Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Microsoft Office 2010 和 Microsoft Office 2013。安装了 Windows XP 或 Windows Server 2003 批量版本的计算机无法使用 VAMT 进行管理。但是,仍可以管理安装在这两个操作系统上的 Office 2010 和 Office 2013 产品。
答案3
我很好奇,想知道是否有任何方法可以提取域中所有尚未激活 Windows 的帐户?
不,没有办法做到这一点 - Active Directory 不会跟踪它。还有很好的理由不激活机器,特别是如果您不运行本地激活服务器(主要是:虚拟机和仅临时用于开发目的的机器)。
另一个答案中提供了一个 powershell 脚本,它基本上执行
Get-ADComputer -Filter * | Get-ActivationStatus
- 但它没有像您要求的那样从 Active Directory 获取状态。它查询所有机器的 AD,然后询问它们。
这有多个问题:
- 机器必须在线才能被检查
- 权限必须允许检查。
- 该机器必须是可访问的,即呼叫未经过防火墙和/或 NAT