PowerShell 最后一次使用 MS Office
PowerShell Last Time MS Office was Used
我非常急于尝试找到一种方法来查询公司域中所有 Windows 7 台计算机,并确定它们上次使用 Microsoft Office 的时间。我们正在接受审计,需要明天完成(是的),我想看看我们是否可以在支付我们不需要的许可证之前卸载 Office。
我已经有一段时间没有使用 PowerShell 了,坦率地说,这是自从昨晚开始使用此代码以来我所发现的 - 即 newb。也许,有更好或更简单的方法?我昨晚尝试搜索预先完成的脚本或程序,但找不到任何说明上次使用 Office 的时间。
我可以使用下面的代码和函数获取最新的 'LastUse',但我需要知道该数字与哪个计算机名称相关联。现在只有 returns 最新号码:20170928
function Measure-Latest {
BEGIN { $latest = $null }
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END { $latest }
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
$(foreach ($item in $Software)
{
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook')
{
$LastUsed
} }) | Measure-Latest
输出实际上只是 $LastUsed |测量-最新
更改为
$LastUsed = $LastUsed | Measure-Latest
If ($LastUsed -eq "19800000"){
$LastUsed = "Never"
}
"$ComputerName : $Name : $LastUsed"
下面的完整脚本将为您单独提供所有 Microsoft Office 产品的最后一次使用
function Measure-Latest {
BEGIN {
$latest = $null
}
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END {
$latest
}
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
foreach ($item in $Software) {
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook') {
$LastUsed = $LastUsed | Measure-Latest
If ($LastUsed -eq "19800000"){
$LastUsed = "Never"
}
"$ComputerName : $Name : $LastUsed"
}
}
如果您只想最后一次使用任何 Office 产品,则将 for each 的输出存储在一个变量中并使用 $Computername 变量调用它
function Measure-Latest {
BEGIN {
$latest = $null
}
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END {
$latest
}
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
$LastRun = $(foreach ($item in $Software) {
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook') {
$LastUsed
}
}) | Measure-Latest
"$ComputerName : $LastRun"
如果您在每台机器上 运行 它是本地的,我想这可能就是您要找的:
Get-WmiObject -Class Win32_SoftwareFeature |
Where-Object {$_.Caption -match 'Microsoft\sOffice|Microsoft\sOutlook'} |
Select-Object Caption, @{n='LastUse';e={[int]($_.Lastuse.Substring(0, 8))}},@{n='ComputerName';e={$env:COMPUTERNAME}} |
Sort-Object LastUse |
Select-Object -Last 1
如果您运行它针对远程计算机列表
$ComputerNames = Get-Content C:\example\list.txt
Get-WmiObject -Class win32_softwarefeature -ComputerName $ComputerNames |
Where-Object {$_.Caption -match 'Microsoft\sOffice|Microsoft\sOutlook'} |
Select-Object Caption, @{n='LastUse';e={[int]($_.Lastuse.Substring(0, 8))}},PSComputername |
Group-Object PSComputername |
ForEach-Object {
$Group = $_.Group |
Sort-Object LastUse |
Select-Object -Last 1
[PSCustomObject]@{
ComputerName = $_.Name
Caption = $Group.Caption
LastUse = $Group.LastUse
}
}
我非常急于尝试找到一种方法来查询公司域中所有 Windows 7 台计算机,并确定它们上次使用 Microsoft Office 的时间。我们正在接受审计,需要明天完成(是的),我想看看我们是否可以在支付我们不需要的许可证之前卸载 Office。
我已经有一段时间没有使用 PowerShell 了,坦率地说,这是自从昨晚开始使用此代码以来我所发现的 - 即 newb。也许,有更好或更简单的方法?我昨晚尝试搜索预先完成的脚本或程序,但找不到任何说明上次使用 Office 的时间。
我可以使用下面的代码和函数获取最新的 'LastUse',但我需要知道该数字与哪个计算机名称相关联。现在只有 returns 最新号码:20170928
function Measure-Latest {
BEGIN { $latest = $null }
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END { $latest }
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
$(foreach ($item in $Software)
{
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook')
{
$LastUsed
} }) | Measure-Latest
输出实际上只是 $LastUsed |测量-最新
更改为
$LastUsed = $LastUsed | Measure-Latest
If ($LastUsed -eq "19800000"){
$LastUsed = "Never"
}
"$ComputerName : $Name : $LastUsed"
下面的完整脚本将为您单独提供所有 Microsoft Office 产品的最后一次使用
function Measure-Latest {
BEGIN {
$latest = $null
}
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END {
$latest
}
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
foreach ($item in $Software) {
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook') {
$LastUsed = $LastUsed | Measure-Latest
If ($LastUsed -eq "19800000"){
$LastUsed = "Never"
}
"$ComputerName : $Name : $LastUsed"
}
}
如果您只想最后一次使用任何 Office 产品,则将 for each 的输出存储在一个变量中并使用 $Computername 变量调用它
function Measure-Latest {
BEGIN {
$latest = $null
}
PROCESS {
if (($_ -ne $null) -and (($latest -eq $null) -or ($_ -gt $latest))) {
$latest = $_
}
}
END {
$latest
}
}
$Software = Get-WmiObject -Class win32_softwarefeature | Select Caption,LastUse
$ComputerName = $env:COMPUTERNAME
$LastRun = $(foreach ($item in $Software) {
$Name = $Item.Caption
$LastUsedString = $Item.Lastuse.Substring(0,8)
$LastUsed = [int]$LastUsedString
if ($Name -like 'Microsoft Office*' -or $Name -like 'Microsoft Outlook') {
$LastUsed
}
}) | Measure-Latest
"$ComputerName : $LastRun"
如果您在每台机器上 运行 它是本地的,我想这可能就是您要找的:
Get-WmiObject -Class Win32_SoftwareFeature |
Where-Object {$_.Caption -match 'Microsoft\sOffice|Microsoft\sOutlook'} |
Select-Object Caption, @{n='LastUse';e={[int]($_.Lastuse.Substring(0, 8))}},@{n='ComputerName';e={$env:COMPUTERNAME}} |
Sort-Object LastUse |
Select-Object -Last 1
如果您运行它针对远程计算机列表
$ComputerNames = Get-Content C:\example\list.txt
Get-WmiObject -Class win32_softwarefeature -ComputerName $ComputerNames |
Where-Object {$_.Caption -match 'Microsoft\sOffice|Microsoft\sOutlook'} |
Select-Object Caption, @{n='LastUse';e={[int]($_.Lastuse.Substring(0, 8))}},PSComputername |
Group-Object PSComputername |
ForEach-Object {
$Group = $_.Group |
Sort-Object LastUse |
Select-Object -Last 1
[PSCustomObject]@{
ComputerName = $_.Name
Caption = $Group.Caption
LastUse = $Group.LastUse
}
}