# encoding: ascii
# api: powershell
# title: Set-AssemblyBindLogging
# description: Enable or disable assembly bind logging (per-machine)
# version: 0.1
# type: function
# license: CC0
# function: Set-AssemblyBindLogging
# x-poshcode-id: 1976
# x-archived: 2010-07-18T09:01:24
#
#
function Set-AssemblyBindLogging {
#.Synopsis
#  Enable or disable Assembly Bind logging for the machine
#.Parameter EnableLogging
#  Whether or not to enable logging. Accepts partial matching of Enable/Disable or True/False or even 1/0 ... 
#.Parameter LogPath
#  The location of the folder you want to save fusion logs to. Will be created if it does not already exist
#  NOTE: If you are DISABLING logging, this folder will be DELETED (if it is empty).
[CmdletBinding()]
   param( 
      [Parameter(Mandatory=$true)]
      #[ValidateSet("Enable","Disable","True","False","0","1")]
      [string]$EnableLogging
   ,
      $LogPath = "C:\Logs\Fusion" 
   )

   foreach($RegistryRoot in "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion","HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Fusion") {
      switch -regex ($EnableLogging) {
         "En?a?b?l?e?|Tr?u?e?|1" {
            mkdir $LogPath -Force -EA Stop

            Set-ItemProperty REGISTRY::$RegistryRoot LogPath $LogPath
            foreach($switch in "LogFailures","ForceLog","LogResourceBinds") {
               Set-ItemProperty REGISTRY::$RegistryRoot $switch 1 -Type DWord
            }
         }
         "Di?s?a?b?l?e?|Fa?l?s?e?|0" {
            rmdir $LogPath
            foreach($switch in "LogPath","LogFailures","ForceLog","LogResourceBinds") {
               Remove-ItemProperty $switch
            }
         }
         default {
            throw "Couldn't convert '$EnableLogging' to a valid value. Valid values are: Enable or Disable, True or False, 1 or 0."
         }
      }
   }  
}
