Powershell : 偵測及記錄軟體回報(Java為例)

這一段Script是用在來蒐集電腦裡特定軟體的安裝與否來用的。可以用GPO放到使用者登入後執行,或是請使用者自行點擊執行。

我的使用情境是因為國外總部要蒐集我們分公司安裝Oracle Java SE/RE的狀況,以及後續需要保留或安裝移除JavaSE的電腦來做紀錄,

因此我主程式用的是Powershell,然後由Bat來呼叫帶入參數來決定要要寫入哪一個CSV檔案
概念上已偵測機碼位置為主,以後想換成別的軟體只要把偵測的方式替換掉就好了

#JavaDetection.ps1
Param
(
    [String]$Logfilename = "Nothing"
)
"Logfilename=$Logfilename"

Function LogWrite
{
    Param([string]$logstring)
    [String]$Logfile = "fileserver\IT\CSV_Log\$Logfilename"            
    Add-content -path $Logfile -Value $logstring 
}
$breaktime = 2000
$Now = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
$ips = [Net.Dns]::GetHostAddresses($env:computername) |
       Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
       Select-Object -Expand IPAddressToString


$RegistryPathJava8231 = "HKLM:SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment"

If(!(Test-Path $RegistryPathJava8231))
{
    $JavaInstall = "No"
    $javaver = "N/A"
    $Javaexpath = "N/A"
}
else
{
    $JavaInstall = "Yes"
    $javaver= Get-ChildItem "HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment"  | Select-Object -expa pschildname -Last 1
    $Javaexpath = (Get-ItemProperty -path "HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\$Javaver\" -Name JavaHome).JavaHome
}
$logstring = "$Now;$env:USERNAME;$env:COMPUTERNAME;$ips;$JavaInstall;$javaver;$Javaexpath"
LogWrite $logstring
IF ($JavaInstall -eq "Yes")
{
    Write-Host "You have Java runtime environment installed in your computer."
    Write-Host "Java version : $javaver"
    Write-Host "Java Home : $Javaexpath"
}
else 
{
    Write-Host "You don't have Java runtime environment in your computer."
} 
Start-Sleep -m $breaktime

批次部分只要後面加-Logfilename的參數並指定完整檔名

REM Javacollect.bat
Powershell %~dp0JavaDetection.ps1 -Logfilename 'JavaRemovedList.csv'

放在同一個目錄就可以偵測Java是否有安裝,以及安裝版本和Java的執行位置

CSV收集到的會是:時間戳記;登入帳號;電腦名稱;IP;Yes/NO是否安裝;版本;路徑

2021-06-10 15:06:19;neoabc;computername;1.2.3.4;No;N/A;N/A
2021-06-10 17:30:59;neoabc;computername;1.2.3.4;Yes;1.8.0_231;C:\Program Files (x86)\Java\jre1.8.0_231

上面是有沒有安裝Java,蒐集到資料的差別。到Excel打開做資料分割就會很容易變成表格方便統計了。以上這只是一個設計概念,寫的彈性多一點可以用在未來很多情境。