windows 7
$ComputerName = $env:COMPUTERNAME
# Get IP Address (Compatible with Windows 7)
$IPAddress = (ipconfig |
Select-String "IPv4").ToString().Split(":")[-1].Trim()
# Search Tekla / Trimble
$TeklaPrograms = Get-ItemProperty `
HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* ,
HKLM:\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* `
-ErrorAction SilentlyContinue |
Where-Object {
$_.DisplayName -match "Tekla|Trimble"
} |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
Write-Host "=============================="
Write-Host "Computer Name : $ComputerName"
Write-Host "IP Address : $IPAddress"
Write-Host "=============================="
if ($TeklaPrograms) {
Write-Host "Tekla / Trimble FOUND"
$TeklaPrograms | Format-Table -AutoSize
} else {
Write-Host "Tekla / Trimble NOT FOUND"
}

$ComputerName = $env:COMPUTERNAME
$IPAddress = Get-NetIPAddress |
Where-Object {
$_.AddressFamily -eq "IPv4" -and
$_.IPAddress -notlike "127.*" -and
$_.PrefixOrigin -ne "WellKnown"
} |
Select-Object -ExpandProperty IPAddress -First 1
$TeklaPrograms = Get-ItemProperty `
HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* ,
HKLM:\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* `
-ErrorAction SilentlyContinue |
Where-Object {
$_.DisplayName -match "Tekla|Trimble"
} |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
Write-Host "=============================="
Write-Host "Computer Name : $ComputerName"
Write-Host "IP Address : $IPAddress"
Write-Host "=============================="
if ($TeklaPrograms) {
Write-Host "Tekla / Trimble FOUND"
$TeklaPrograms | Format-Table -AutoSize
} else {
Write-Host "Tekla / Trimble NOT FOUND"
}
Get-ItemProperty `
HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* ,
HKLM:\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* |
Where-Object {
$_.DisplayName -match "Tekla|Trimble"
} |
Select DisplayName, DisplayVersion, InstallDate
$computers = Get-Content .\\computers.txt
$results = @()
foreach ($pc in $computers) {
try {
$items = Invoke-Command -ComputerName $pc -ScriptBlock {
$paths = @(
"HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*",
"HKLM:\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*"
)
Get-ItemProperty $paths -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match "Tekla|Trimble" } |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
}
foreach ($i in $items) {
$results += [PSCustomObject]@{
Computer = $pc
Program = $i.DisplayName
Version = $i.DisplayVersion
Publisher = $i.Publisher
InstallDate = $i.InstallDate
Status = "Found"
}
}
if (-not $items) {
$results += [PSCustomObject]@{
Computer = $pc
Program = ""
Version = ""
Publisher = ""
InstallDate = ""
Status = "Not Found"
}
}
}
catch {
$results += [PSCustomObject]@{
Computer = $pc
Program = ""
Version = ""
Publisher = ""
InstallDate = ""
Status = "Connection Failed"
}
}
}
$results | Export-Csv .\\Tekla_Audit_Result.csv -NoTypeInformation -Encoding UTF8
ถ้าต้องการ list รายชื่อเครื่องคอมพิวเตอร์ใน Active Directory แล้ว export เป็น computers.txt
ใช้ PowerShell นี้ครับ:
Get-ADComputer -Filter * |
Select-Object -ExpandProperty Name |
Out-File C:\\Audit\\computers.txt
ถ้าต้องการเฉพาะเครื่องที่ Online:
Get-ADComputer -Filter * |
Select-Object -ExpandProperty Name |
ForEach-Object {
if (Test-Connection $_ -Count 1 -Quiet) {
$_
}
} | Out-File C:\\Audit\\computers.txt