I've got a really simple powershell script (see below). I've got installutil aliased using the following in my profile:
set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil
In powershell I simply:
installutil assemplylocation.dll
This returns successfully. (Install/Commit both complete successfully). Yet when I check the registry, or in powershell using get-pssnapin -registered it doesn't show my assembly. I did this the other day and it worked fine, but I don't seem to be able to duplicate it ... please advise.
using System;
using System.Management.Automation;
using System.ComponentModel;
namespace PSBook_2_1
{
[RunInstaller(true)]
public class PSBookChapter2MySnapIn : PSSnapIn
{
public PSBookChapter2MySnapIn()
: base()
{ }
// Name for the PowerShell snap-in.
public override string Name
{
get
{
return "Wiley.PSProfessional.Chapter2";
}
}
// Vendor information for the PowerShell snap-in.
public override string Vendor
{
get
{
return "Wiley";
}
}
// Description of the PowerShell snap-in
public override string Description
{
get
{
return "This is a sample PowerShell snap-in";
}
}
}
// Code to implement cmdlet Write-Hi
[Cmdlet(VerbsCommunications.Write, "Hi")]
public class SayHi : Cmdlet
{
protected override void ProcessRecord()
{
WriteObject("Hi, World!");
}
}
// Code to implement cmdlet Write-Hello
[Cmdlet(VerbsCommunications.Write, "Hello")]
public class SayHello : Cmdlet
{
protected override void ProcessRecord()
{
WriteObject("Hello, World!");
}
}
}
downatone's answer put me on the right track but my problem was the opposite way round. My project is set to any CPU and I am on Win7 x64 so the powershell being launched from my code and then installing the dll with the snapin was 64 bit. However the install command I used was pointing to the 32 bit .net runtime i.e.
C:\Windows\Microsoft.net\Framework\V4.0.30319\installutil myDLL.dll
when it should have been
C:\Windows\Microsoft.net\Framework64\V4.0.30319\installutil myDLL.dll
Note the 64 in the Framework path.