0
votes

I have created a *.psm1 and *.psd1 file. The reside in a directory (folder) with the same name as the files. This directory is in c:\Program Files\WindowsPowerShell\Modules\...

Import-module reports no error and Get-Module shows the module after. Test-ModuleManifest returns the correct manifest. However, the cmdlet itself is not recognized by Powershell. Also noted is the Test-ModuleManifest does not show any Exported Commands (is that normal?).

File security is good and when I put the *.psm1 in the Autoload folder it works as expected.

The usual mistakes and errors have been checked as well as extensive Googling. Several of the modules from the PS Gallery have been imported successfully. No one in this shop has been able to figure out what is missing.

This failure is occurring on several different platforms, all Windows (either 7 or 10) with both AMD and Intel cores.

Anyone run into this problem? Were you able to solve the issue?

This is my ModuleManifest, generated with New-ModuleManifest & modified with ISE.

# Module manifest for module 'Convert-F2C'
#
# Generated by: me
#
# Generated on: 4/25/2017
#

@{

# Script module or binary module file associated with this manifest.
# RootModule = ''

# Version number of this module.
  ModuleVersion = '1.0'

# Supported PSEditions
# CompatiblePSEditions = @()

# ID used to uniquely identify this module
  GUID = '252b9222-9bc8-4634-b658-dd234b483152'

# Author of this module
  Author = 'me'

# Company or vendor of this module
  CompanyName = 'my company'

# Copyright statement for this module
  Copyright = '(c) 2017 Me. All rights reserved.'

# Description of the functionality provided by this module
  Description = 'Converts Fahrenheit to Celsius temperatures'

# Minimum version of the Windows PowerShell engine required by this module
# PowerShellVersion = ''

# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''

# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''

# Minimum version of Microsoft .NET Framework required by this module. This 
prerequisite is valid for the PowerShell Desktop edition only.
# DotNetFrameworkVersion = ''

# Minimum version of the common language runtime (CLR) required by this 
module. This prerequisite is valid for the PowerShell Desktop edition only.
# CLRVersion = ''

# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''

# Modules that must be imported into the global environment prior to 
importing this module
# RequiredModules = @()

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

# Script files (.ps1) that are run in the caller's environment prior to 
importing this module.
# ScriptsToProcess = @()

# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()

# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()

# Modules to import as nested modules of the module specified in 
RootModule/ModuleToProcess
# NestedModules = @()

# Functions to export from this module, for best performance, do not use 
wildcards and do not delete the entry, use an empty array if there are no 
functions to export.
  FunctionsToExport = 'Convert-F2C'

# Cmdlets to export from this module, for best performance, do not use 
wildcards and do not delete the entry, use an empty array if there are no 
cmdlets to export.
  CmdletsToExport = @()

# Variables to export from this module
  VariablesToExport = @()

# Aliases to export from this module, for best performance, do not use 
wildcards and do not delete the entry, use an empty array if there are no 
aliases to export.
  AliasesToExport = '*'

# DSC resources to export from this module
# DscResourcesToExport = @()

# List of all modules packaged with this module
# ModuleList = @(Convert-F2c.psm1)

# List of all files packaged with this module
# FileList = @()

# Private data to pass to the module specified in 
RootModule/ModuleToProcess. This may also contain a PSData hashtable with 
additional module metadata used by PowerShell.
PrivateData = @{

    PSData = @{

        # Tags applied to this module. These help with module discovery in 
 online galleries.
        # Tags = @()

        # A URL to the license for this module.
        # LicenseUri = ''

        # A URL to the main website for this project.
        # ProjectUri = ''

        # A URL to an icon representing this module.
        # IconUri = ''

        # ReleaseNotes of this module
          ReleaseNotes = 'Initial creation, first manifested module by 
 author'

    } # End of PSData hashtable

} # End of PrivateData hashtable

# HelpInfo URI of this module
# HelpInfoURI = ''

# Default prefix for commands exported from this module. Override the 
 default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''

}
3
Create a sample module with only a single simple function. Make sure it works as expected. Then you can identify your error in the module that doesn't work.Bill_Stewart
Provide a minimal reproducible example for us.Jeroen Heier
First note: The *.psm1 works fine if the *.psd1 is not in the folder with it.Dana
in your manifest, check FunctionsToExport, I generally export them all using FunctionsToExport = '*' and also NestedModules lists the names of the module files (psm1)henrycarteruk
couldn't fix it in a PS v2.0 environment ($psversiontable.psversion) trying below solutions with some downloaded module, so now trying to upgrade to v5.1.Andreas Covidiot

3 Answers

2
votes

If you have these files for you module:

  • MyModule.psd1
  • MyModule.psm1
  • ExtraModule.psm1

You need to update this line:

# NestedModules = @()

To this:

NestedModules = @('MyModule','ExtraModule')

And ensure that your FunctionsToExport either lists all your functions or you can use FunctionsToExport = '*' to export them all.

2
votes

I got it to work by setting the RootModule parameter. Doing this is not in any literature or references but the module functions appropriately now.

# Script module or binary module file associated with this manifest.
  RootModule = 'ModuleName (no extension)'
0
votes

Specifying the full-path (upto '.psm1') in the RootModule parameter in a manifest file didn't resolve the issue, as the ExportedCommands property was still empty.

Running Import-Module MyFirstModule -Verbose says that it is loading module from path '.psd1', not '.psm1'.

Running Import-Module with a full-path that ends with '.psm1' loaded the module properly, (i.e. the module functions appear in ExportedCommands), but in this case, when you run Get-Module, ModuleType is Script, not Manifest. So I guess the issue seems to occur when a manifest file is in the module directory and is not recognized properly.