GACにファイルを登録するためにPowerShellを使用して
-
21-08-2019 - |
質問
PowerShellでのテキスト文書からのパス\アセンブリを読んで、GACに登録する(私はGacutil.exeをを使用して想像)への簡単な方法はありますか?例えばだから、のように見える.txtファイルます:
c:\test\myfile.dll
c:\myfile2.dll
d:\gac\gacthisfile.dll
ストリームにそれを読んで、その後、それらのアセンブリの各々にます。gacutilを実行しますPowerShellスクリプトが見つかりましたか?私はそれがようなものになるだろうと思います:
#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
}
解決
あなたのテキストファイルを整理した場合、各DLLが別の行にある、あなたのコマンドをしたフィルタに、それぞれの取得・コンテンツコマンドとパイプを使用することができることを、このような:
filter gac-item { C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $_}
get-content fileOfDlls.txt | ?{$_ -like "*.dll"} | gac-item
他のヒント
いかがます。gacutilについての.Net心配を聞かせて?
# 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($_)}
私は、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
スプリット文字列コマンドレットは Pscxするから来ていることに注意してください。この関数は、超堅牢ではありません(ワイルドカードのサポートは、DateTimeのような奇妙な種類をチェックしません)が、少なくともそれは、通常の呼び出しとパイプラインの呼び出しを処理することができます。
あなたはGacutil.exeを置き換えますか?そうでない場合、その理由ます。gacutilの付属/ ILスイッチを使わないのでしょうか?
ます。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
そう、あなたがそうのようにGACを使用することができますnew-alias "gac" ($env:ProgramFiles+"\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe")
ようにあなたが(ちょうどこのファイルの場所を決定するには、psプロンプトで$プロファイルを入力する)あなたのプロファイルにエイリアスを作成する場合:
get-childitem $basedirectory "*$filter.dll" | foreach-object -process{ WRITE-HOST -FOREGROUND GREEN "Processing $_"; gac /i $_.FullName /f}
最後の部分が最も重要です。それはあなたがしたいのスイッチでます。gacutil呼び出します。
この情報がお役に立てば幸いです。
このPowerShellスクリプトはGacutilをを使用せずに、GACにアセンブリを追加します。 http://blog.goverco.com/2012 /04/use-powershell-to-put-your-assemblies.htmlする
アドインAssemblyToGlobalAssemblyCache.ps1ををダウンロードしたら、あなたはGACに展開することができます。
複数アセンブリDir C:\MyWorkflowAssemblies | % {$_.Fullname} | .\Add-AssemblyToGlobalAssemblyCache.ps1
を追加するための使用例
Get-Help .\Add-AssemblyToGlobalAssemblyCache.ps1 -Detailed
を実行して、完全なドキュメントを参照してください。
私はます。gacutilを取得するために、GACにアセンブリを置くために必要なすべてのマシン上でWindows 8 SDKをインストールしたくない、私はGACのAPIを使用してPowerShellのモジュールを書きました。これは、任意の.NETバージョンで動作します。
: PowerShellをGACを使用すると、そのようにそれを行うことができますするGet-Content ListOfAssemblies.txt | Add-GacAssembly