deleting with powershell

I need to delete all msi files in the windows installer folder with the author of crowdstrike

Remove-item -path c:\windows\installer I dont get how to target author or even digital signature

is there a way? -filter maybe

Thank you

As far as I know there is no build in way to get the information you asked for from an MSI file. You might take a look at this link. It may help you How to get MSI file information with PowerShell

I just went with the *.msi option as it doesnt matter really if i keep any of the other MSI’s since its a bunch of VDI linkedclones

although if anyone knows of a way i would love to know for future reference.

Thank you

It’s ridiculously hard to work with the WindowsInstaller.Installer (msi) com object in powershell. I would call a vbscript from powershell or just use vbscript.

You could use the Shell.Application ComObject to read the .msi metadata.

cls
$folder = "C:\windows\Installer\"
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($folder)
$objFolder.Items() | 
Where-Object {$_.Name -like "*.msi"} |
ForEach-Object {
    [pscustomobject]@{
        $objFolder.getDetailsOf($folder, 0) = $objFolder.getDetailsOf($_, 0);
        $objFolder.getDetailsOf($folder, 20) = $objFolder.getDetailsOf($_, 20)
        $objFolder.getDetailsOf($folder, 185) = $objFolder.getDetailsOf($_, 185)
    }
} |
Where-Object {$_.Authors -eq "crowdstrike"} |
ForEach-Object {
    $_
    #Do something
}

i tried to use the vb script and add a obj.deletefile at the end i keep getting

line 2
char 1
error invalid character
800A0408
microsoft vbscript compilation error

any ideas why its barking at me?

Here’s how I get the target of msi shortcuts. Call the vbscript and then store the result in a powershell variable:

$targetpath = cscript /nologo gettarget.vbs someshortcut.lnk

Where gettarget.vbs looks like:

Dim MSITarget
Set Msi = CreateObject("WindowsInstaller.Installer")
Set MSITarget = Msi.ShortcutTarget(wscript.arguments(0))
Wscript.Echo Msi.ComponentPath(MSITarget.StringData(1), MSITarget.StringData(3))

Hey Steve,
What VBScript are you referring to? What I provided was PowerShell, not VBScript.