Buster
Buster

Reputation: 373

Powershell 5.0/Windows 10 Get-Command Null Reference Exception

I have a fresh install of Win10 and Powershell 5.0. I have run update-help and most things work fine; however, Get-Command returns a null reference exception whether I'm in regular mode or elevated mode. I have also tried running Powershell from Run with -noprofile and I still get the same error in both user and elevated mode. Here is some additional information:

PS Z:\> Get-WmiObject Win32_OperatingSystem | Select-Object -Property Version, ServicePackMajorVersion, ServicePackMinorVersion

Version    ServicePackMajorVersion ServicePackMinorVersion
-------    ----------------------- -----------------------
10.0.10586                       0                       0

PS Z:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.10586.122
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.122
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS Z:\> get-command
>> TerminatingError(Get-Command): "Object reference not set to an instance of an object."
get-command : Object reference not set to an instance of an object.
At line:1 char:1
+ get-command
+ ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Command], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.GetCommandCommand
get-command : Object reference not set to an instance of an object.
At line:1 char:1
+ get-command
+ ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Command], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.GetCommandCommand

PS Z:\> $error[0] | format-list * -force


PSMessageDetails      :
Exception             : System.NullReferenceException: Object reference not set to an instance of an object.
                           at Microsoft.PowerShell.Commands.GetCommandCommand.IsCommandMatch(CommandInfo& current, Boolean& isDuplicate)
                           at Microsoft.PowerShell.Commands.GetCommandCommand.AccumulateMatchingCommands(IEnumerable`1 commandNames)
                           at System.Management.Automation.CommandProcessor.ProcessRecord()
TargetObject          :
CategoryInfo          : NotSpecified: (:) [Get-Command], NullReferenceException
FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.GetCommandCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {}



PS Z:\> $error[0].line
PS Z:\> $error[0].exception | format-list * -force


Message        : Object reference not set to an instance of an object.
Data           : {}
InnerException :
TargetSite     : Boolean IsCommandMatch(System.Management.Automation.CommandInfo ByRef, Boolean ByRef)
StackTrace     :    at Microsoft.PowerShell.Commands.GetCommandCommand.IsCommandMatch(CommandInfo& current, Boolean& isDuplicate)
                    at Microsoft.PowerShell.Commands.GetCommandCommand.AccumulateMatchingCommands(IEnumerable`1 commandNames)
                    at System.Management.Automation.CommandProcessor.ProcessRecord()
HelpLink       :
Source         : System.Management.Automation
HResult        : -2147467261

After running update-help in both user and elevated mode, the next thing I did in Powershell was install SQL Power Doc so I'm not sure if that caused the issue because I don't recall using Get-Command before the install.

During the install, I issued these commands:

Set-ExecutionPolicy RemoteSigned -Force

New-Item -type directory -path "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell\Modules"

Set-Location "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell"

When I run help on Get-Command - it works with no errors:

PS Z:\> help get-command

NAME
    Get-Command

SYNOPSIS
    Gets all commands.


SYNTAX
    Get-Command [[-ArgumentList] [<Object[]>]] [-All] [-FullyQualifiedModule [<ModuleSpecification[]>]] [-ListImported] [-Module [<String[]>]] [-Noun [<String[]>]] [-ParameterName [<String[]>]] [-ParameterType [<PSTypeName[]>]] [-ShowCommandInfo] [-Syntax] [-TotalCount
    [<Int32>]] [-Verb [<String[]>]] [<CommonParameters>]

    Get-Command [[-Name] [<String[]>]] [[-ArgumentList] [<Object[]>]] [-All] [-CommandType {Alias | Function | Filter | Cmdlet | ExternalScript | Application | Script | Workflow | Configuration | All}] [-FullyQualifiedModule [<ModuleSpecification[]>]] [-ListImported]
    [-Module [<String[]>]] [-ParameterName [<String[]>]] [-ParameterType [<PSTypeName[]>]] [-ShowCommandInfo] [-Syntax] [-TotalCount [<Int32>]] [<CommonParameters>]


DESCRIPTION
    The Get-Command cmdlet gets all commands that are installed on the computer, including cmdlets, aliases, functions, workflows, filters, scripts, and applications. Get-Command gets the commands from Windows PowerShell modules and snap-ins and commands that were
    imported from other sessions. To get only commands that have been imported into the current session, use the ListImported parameter.

    Without parameters, a Get-Command command gets all of the cmdlets, functions, workflows and aliases installed on the computer. A Get-Command * command gets all types of commands, including all of the non-Windows-PowerShell files in the Path environment variable
    ($env:path), which it lists in the "Application" command type.

    A Get-Command command that uses the exact name of the command (without wildcard characters) automatically imports the module that contains the command so you can use the command immediately. To enable, disable, and configure automatic importing of modules, use the
    $PSModuleAutoLoadingPreference preference variable. For more information, see about_Preference_Variables (http://go.microsoft.com/fwlink/?LinkID=113248).

    Get-Command gets its data directly from the command code, unlike Get-Help, which gets its information from help topics.

    In Windows PowerShell 2.0, Get-Command gets only commands in current session. It does not get commands from modules that are installed, but not imported. To limit Get-Command in Windows PowerShell 3.0 and later to commands in the current session, use the
    ListImported parameter.

    Starting in Windows PowerShell 5.0, results of the Get-Command cmdlet display a Version column by default; a new Version property has been added to the CommandInfo class.


RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/p/?linkid=289583
    Export-PSSession
    Get-Help
    Get-Member
    Get-PSDrive
    Import-PSSession
    about_Command_Precedence

REMARKS
    To see the examples, type: "get-help Get-Command -examples".
    For more information, type: "get-help Get-Command -detailed".
    For technical information, type: "get-help Get-Command -full".
    For online help, type: "get-help Get-Command -online"

Does anyone see anything obvious? Any help is appreciated.

Upvotes: 2

Views: 2194

Answers (2)

Dirk Hondong
Dirk Hondong

Reputation: 1

I just stumbled across this question since I got the same issue. It think it is related to the module RDS-Manager which is shipped with the SQL Powerdoc solution. The RDS.Manager is from TechNet Gallery: http://gallery.technet.microsoft.com/ScriptCenter/e8c3af96-db10-45b0-88e3-328f087a8700/

I have removed the whole folder from my modules folder and everything was fine again. Added the RDS module and the NullReference Exception was there again.

Upvotes: 0

gravity
gravity

Reputation: 2066

It might be worthwhile to rename your Modules directory temporarily, then re-running Get-Command to see if that fixed it.

(Per the comment above in the question, it looks like this was the solution.)

Upvotes: 3

Related Questions