4
votes

I'm trying to install new features on a Windows Server 2012 system through PowerShell and C#. I am getting this error back when trying to call the Install-WindowsFeature cmdlet:

The term 'Install-WindowsFeature' is not recognized as the name of a cmdlet, function, script file, or operable program...

I can call other cmdlets though C# and even some of the other new ones. I did a Get-Command and Install-WindowsFeature, Remove-WindowsFeature, and Get-WindowsFeatures are not listed...but about 980 others are.

Why wouldn't I be able to call this cmdlet from my C# program, but when I go to PowerShell it calls it just fine?

runspace = RunspaceFactory.CreateRunspace();
runspace.Open();

Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript("Install-WindowsFeature");
Collection<PSObject> output = pipeline.Invoke();
2
What module is that in? Maybe it is in a module that is not imported by in default with that overload of CreateRunspace. You can add ps modules to the InitialSessionState object that you pass to a different overload of CreateRunspace.Mike Zboray
It is in the ServerManager module. I've never used the InitialSessionState object, I will have to look into that.Ryan Watson
@mikez Tried your suggestion, still a no go. string[] modules = { "ServerManager" }; InitialSessionState iss = InitialSessionState.CreateDefault(); iss.ImportPSModule(modules); runspace = RunspaceFactory.CreateRunspace(iss);Ryan Watson
@Matronix: Were you able to fix this issue?Cosmin Ioniță

2 Answers

1
votes

Try this command instead of Install-WindowsFeature in your code:

Invoke-Expression "Powershell -Command {Import-Module ServerManager ; Install-WindowsFeature XXXX}"

1
votes

Try compiling in x64. In Visual Studio go to menu ProjectPropertiesBuild - Platform Target = x64.