18

Is there a way to use PowerShell to view the contents of the GAC?

GuyBehindtheGuy
  • 1,368
  • 2
  • 17
  • 36

7 Answers7

17

Another option is that the PowerShell Community Extensions installs a GAC provider, so you can do this:

dir gac:

If you are on PowerShell V2, be sure to grab the 1.2 Beta.

Keith Hill
  • 194,368
  • 42
  • 353
  • 369
7

As stated in the docs:

Starting with the .NET Framework 4, the default location for the global assembly cache is %windir%\Microsoft.NET\assembly. In earlier versions of the .NET Framework, the default location is %windir%\assembly.

You may want to search in the appropriate subdir or even in both of them.

Franc Drobnič
  • 985
  • 10
  • 14
6

To list entries in the GAC;

gacutil -l

In powershell you could parse the text output of the above. I don't know of a managed interface to inspect the GAC.

Cheeso
  • 189,189
  • 101
  • 473
  • 713
4

I had the same question. The question became more prominent with .Net 4.0 and there not being a Windows Explorer shell plugin available to view the contents. GacUtil works, but is not flexible enough and takes a lot to install. The PowerShell Community Extensions option is to limited in it's functionality and contains to many other CmdLets that I don't need. Therefore I've written my own PowerShell module to view and change the GAC. It can be found on http://powershellgac.codeplex.com

This project has moved to GitHub. You can now find it on:

https://github.com/LTruijens/powershell-gac

It can also be found in the PowerShell Gallery:

https://www.powershellgallery.com/packages/Gac/1.0.1

# Show the assemblies in the GAC, including the file version
Get-GacAssembly SomeCompany* | Format-Table -View FileVersion
Bacon Bits
  • 30,782
  • 5
  • 59
  • 66
Lars Truijens
  • 42,837
  • 6
  • 126
  • 143
2

I successfully listed GAC using this code snippet:

New-PSDrive -Name HKCR -PSProvider 'Microsoft.PowerShell.Core\Registry' -Root HKEY_CLASSES_ROOT
Get-ItemProperty -Path 'HKCR:\Installer\Assemblies\Global' | Get-Member -MemberType NoteProperty

Solution taken from here.

Honza Vojtěch
  • 685
  • 1
  • 7
  • 27
1

If you want to search for a specific assembly in the GAC.

Also note, since MS has changed the GAC structure you can use the -Recurse option from the root to search all the GAC.

CD C:\Windows\assembly 
ls -Recurse | ?{$_.Name -like "*log4net*"}
Bruce P
  • 19,995
  • 8
  • 63
  • 73
1

You can do it just from a command prompt:

cd C:\Windows\assembly
dir

The GAC has a specific directory structure, and you should not go moving or deleting things in there using the command prompt - rather use windows explorer (gui) or gacutil (cli)

Tom Ritter
  • 99,986
  • 30
  • 138
  • 174