2009-03-24 62 views
12

PowerShellで簡単にgacutil.exeを使ってテキスト文書からパス/アセンブリを読み込んでGACに登録する方法はありますか?だから、例えばのように見える.txtファイル:Powershellを使ってGACにファイルを登録する

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

は、PowerShellスクリプトは、ストリームにそれを読んでいましたし、次に見られるのアセンブリのそれぞれでます。gacutilを実行しますか?そして、あなたがそうのようにGACを使用することができますので、new-alias "gac" ($env:ProgramFiles+"\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe")のように(ちょうどこのファイルの場所を決定するには、psプロンプトで$プロファイルを入力します)、あなたのプロファイルにエイリアスを作成した場合

#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 
} 
+1

これは質問ですか?あなたはそれを実行しましたか?それは動作しましたか?なにが問題だったの?私はそれが書かれたように動かないことをあなたに伝えることができます。 – EBGreen

+0

このライブラリはたくさんの助けになります:https://powershellgac.codeplex.com/ –

答えて

5

あなたは、各DLLが別の行にある、あなたのコマンドをしたフィルタには、Get-contentコマンドとパイプそれぞれを使用することができることを、このようなテキストファイルを整理する場合:

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

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

これはsep上にあることを意図していました。私はこれを試してみてください –

+1

素晴らしい...魅力のように働いた。あなたが2.0のアセンブリをgacしたい場合には、.NET 2.0用のgacutil.exeを指す必要がある場合に知っておく必要がある誰のためのFYI –

+0

gacutilのエイリアスを作成することでこれを改善することもできます。これにより、対象とするバージョンを変更しやすくなり、フィルタを読みやすくします。 – Charlie

1

:私はそれはようなものになるだろうと思い

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

最後の部分が最も重要です。それはあなたが望むスイッチでgacutilを呼び出します。

これが役に立ちます。

3

私は考えAdd-GacItemのようなPowerShellのガイドラインに従ってGACにアセンブリを追加する関数を呼び出すことをお勧めします。また、gacutil.exeの場所はシステムによって異なります。 VS 2008をインストールしている場合は、次の場所にインストールする必要があります。

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 

Split-StringコマンドレットはPscxに由来することに注意してください。この関数は非常に堅牢ではありません(ワイルドカードサポートはDateTimeのような奇妙な型をチェックしません)が、少なくとも定期的な呼び出しとパイプライン呼び出しを処理できます。

2

gacutil.exeを置き換えますか?そうでない場合は、gacutilのインクルード/ ilスイッチを使用してください。ます。gacutilについてネットの心配を聞かせてどの程度

/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 
24

ます。gacutil/hから

# 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($_)} 
+1

この関連するアイデアが見つかりました:http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell.aspx –

+0

クールなもの、感謝 –

1

このPowerShellスクリプトは、GacUtilを使用せずにアセンブリをGACに追加します。 http://blog.goverco.com/2012/04/use-powershell-to-put-your-assemblies.html

downloadingの後に、Add-AssemblyToGlobalAssemblyCache.ps1をgacに展開できます。複数のアセンブリDir C:\MyWorkflowAssemblies | % {$_.Fullname} | .\Add-AssemblyToGlobalAssemblyCache.ps1

を追加するための

使用例

+0

コードにリンクし、答えにコードを入力します。 –

+0

ありがとうございます@Kolink、私はより詳細で答えを更新しました。 –

0

Get-Help .\Add-AssemblyToGlobalAssemblyCache.ps1 -Detailedは私がます。gacutilを取得するために、GACにアセンブリを置くために必要なすべてのマシン上のWindows 8 SDKをインストールしたくない実行することにより、完全なドキュメントを参照してください、I GAC APIを使ってpowershellモジュールを作成しました。これは、任意の.Netバージョンで動作します。 PowerShell GACでこれを行うことができます:

Get-Content ListOfAssemblies.txt | Add-GacAssembly 
関連する問題