You can enumerate the GAC and do your own pattern matching to find the actual assembly name. It looks like you either need to use P/Invoke to call methods of the native GAC API for that, or have a copy of gacutil.exe available for your PowerShell script to call. Here’s what I tried on my machine as a test. Sorry if it’s a little hard to read; I have a love affair with regular expressions.
The important thing is that the pattern matches the entire string returned by gacutil (which is why I have the “.*” right before the closing parenthesis in the regex pattern, and the pattern begins and ends with ^ $). In this case, I chose to extract the text without any leading or trailing whitespace, as well (which is what the parentheses are for, and why I’m using $matches[1] instead of $matches[0]).
$assemblyRegex = '^\s*(' +
'WebMatrix.Data\s*,' +
'\s*Version\s*=\s*2\..*\..*\..*\s*,' +
'\s*Culture\s*=\s*neutral\s*,' +
'\s*PublicKeyToken\s*=\s*31bf3856ad364e35' +
'.*)\s*$'
Set-Location -Path 'C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools'
$assemblyName = "<Not Found>"
$assemblies = .\gacutil.exe /L
foreach ($assembly in $assemblies)
{
if ($assembly -match $assemblyRegex)
{
$assemblyName = $matches[1]
break
}
}
Write-Host "Detected assembly name: '$assemblyName'"