我的任务是创建一个报告,我需要找到只有Office 365 ProPlus而不是OneDrive的计算机。我们有一个混合的环境,出于商业目的,一些机器都有,而其他机器只有O365。我需要一份包含O365的所有机器列表(淘汰O365 \ OneDrive组合机器)。
这是我目前所处的位置:
$OutPath = "c:\Machines_with_O365.csv"
$Software = "Microsoft Office 365 ProPlus*"
$Computers = Get-ADComputer -Filter *
foreach ($Computer in $Computers) {
$Ping = Test-Connection -ComputerName $Computer.Name -Quiet -Count 1
if ($Ping -eq $true) {
try {
$MachineName = $Computer.Name
Get-WmiObject -Class Win32_Product -ComputerName $computer.Name -ErrorAction Stop |
? {$_.Name -like $Software} |
Select-Object @{N="ComputerName";E={$Computer.Name}}, Vendor, Name |
Export-Csv $OutPath -Append
} catch {
Write-Host "Unable to Obtain WMI Object of $MachineName"
}
}
}
if ($Ping -eq $false) {
Write-Host "The $MachineName is not pingable"
}
我需要添加\更改才能让我到达终点线?
答案 0 :(得分:0)
您需要检查已安装软件的列表是否包含一个程序,但不包含另一个程序。尝试这样的事情:
$MachineName = $Computer.Name
$softwarList = Get-WmiObject -Class Win32_Product -Computer $MachineName -ErrorAction Stop
if ($softwareList -contains $Software -and $softwareList -notcontains $OneDrive) {
$softwareList |
Select-Object @{n='ComputerName';e={$MachineName}}, Vendor, Name |
Export-Csv $OutPath -Append
但请注意,Win32_Product
类为considered harmful,因为对该类的查询可能会触发程序包重新配置。