Frage

Gibt es eine einfache Möglichkeit, in PowerShell (ich stelle mir die Verwendung von gacutil.exe vor) aus einem Textdokument einen Pfad\Assembly zu lesen und ihn im GAC zu registrieren?Also zum Beispiel eine .txt-Datei, die so aussieht:

c:\test\myfile.dll
c:\myfile2.dll
d:\gac\gacthisfile.dll

Das PowerShell-Skript würde das in einen Stream einlesen und dann gacutil auf jeder dieser gefundenen Assemblys ausführen?Ich schätze, es wäre so etwas wie:

#read files into array?

foreach ($file in Get-ChildItem -Filter "*.dll" )
{ 
  Write-Host $file.Name
  C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $file.Name
}
War es hilfreich?

Lösung

Wenn Sie Ihre Textdatei so sortieren, dass die jeder DLL in einer separaten Zeile ist, können Sie den Befehl Get-Content und Rohr jeweils mit einem Filter verwenden könnten, dass Ihr Befehl tut:

filter gac-item { C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $_}

get-content fileOfDlls.txt | ?{$_ -like "*.dll"} | gac-item

Andere Tipps

Wie wäre es das .Net Sorgen über gacutil lassen?

# load System.EnterpriseServices assembly
[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") > $null

# create an instance of publish class
[System.EnterpriseServices.Internal.Publish] $publish = new-object System.EnterpriseServices.Internal.Publish

# load and add to gac :)
get-content fileOfDlls.txt | ?{$_ -like "*.dll"} | Foreach-Object {$publish.GacInstall($_)}

Ich würde vorschlagen, die Funktion aufrufen um eine Anordnung zu dem GAC etwas folgenden Powershell-Richtlinien Add-GacItem gerne hinzufügen. Auch die Lage von gacutil.exe hängt von Ihrem System. Wenn Sie VS 2008 installiert ist, sollte es an der Stelle sein unten.

function Add-GacItem([string]$path) {
  Begin {
    $gacutil="$env:ProgramFiles\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe"

    function AddGacItemImpl([string]$path) {
      "& $gacutil /nologo /i $path"
    }
  }
  Process {
    if ($_) { AddGacItemImpl $_ }
  }
  End {
    if ($path) { AddGacItemImpl $path }
  }
}

Get-Content .\dlls.txt | Split-String | Add-GacItem

Beachten Sie, dass die Split-String Cmdlets kommt von PSCX . Die Funktion ist nicht super robust (keine Wildcard-Unterstützung nicht für seltsame Typen wie Datetime nicht überprüft), aber zumindest kann es regelmäßigen Aufruf und Pipeline-Aufruf verarbeiten.

Wollen Sie gacutil.exe ersetzen? Wenn nicht, warum nicht gacutil der inbegriffen / il Schalter benutzen?

Von der gacutil / h:

/il <assembly_path_list_file> [ /r <...> ] [ /f ]
  Installs one or more assemblies to the global assembly cache.
  <assembly_list_file> is the path to a text file that contains a list of
  assembly manifest file paths. Individual paths in the text file must be
  separated by CR/LF.
  Example: /il MyAssemblyList.txt /r FILEPATH c:\projects\myapp.exe "My App"
    myAssemblyList.txt content:
    myAsm1.dll
    myAsm2.dll

Wenn Sie in Ihrem Profil einen Alias ​​erstellen (geben Sie einfach $profile an einer ps-Eingabeaufforderung ein, um den Speicherort dieser Datei zu ermitteln), etwa so new-alias "gac" ($env:ProgramFiles+"\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe") dann können Sie gac wie folgt verwenden:

get-childitem $basedirectory "*$filter.dll" | foreach-object -process{ WRITE-HOST -FOREGROUND GREEN "Processing $_"; gac /i $_.FullName /f}

Der letzte Teil ist der wichtigste.Es ruft gacutil mit den gewünschten Schaltern auf.

Hoffe das hilft.

Diese Powershell-Skript wird Baugruppen zum GAC hinzugefügt werden, ohne GacUtil zu verwenden. http://blog.goverco.com/2012 /04/use-powershell-to-put-your-assemblies.html

Nach dem Download das Add-AssemblyToGlobalAssemblyCache.ps1 Sie GAC bereitstellen können.

Anwendungsbeispiel für das Hinzufügen mehrerer Baugruppen Dir C:\MyWorkflowAssemblies | % {$_.Fullname} | .\Add-AssemblyToGlobalAssemblyCache.ps1

Die gesamte Dokumentation von Get-Help .\Add-AssemblyToGlobalAssemblyCache.ps1 -Detailed läuft

Viele wollen nicht die Windows 8 SDK auf allen Rechnern installieren Ich brauchte Assemblys im GAC setzen gacutil zu bekommen, ich habe einen Powershell-Modul mit dem GAC API geschrieben. Es funktioniert mit jeder .Net-Version. Mit Powershell GAC kann es etwa so:

Get-Content ListOfAssemblies.txt | Add-GacAssembly 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top