Other than the obvious (you didn't enable Hardware Inventory in the console, Client Agents), if on your client the Hardware Inventory action is missing, the issue may be a misconfigured hardware inventory MOF file, configuration.mof, on your primary site.
I've had this happen twice in the lab, the first time I didn't write down what I did to fix it, but this second time--which took me just as long or longer to find the problem--I'm writing it down!
Although it's possible I haven't found other mis-configurations that would result in HW Inv policy causing the client to simply disable the policy completely, in this case the problem was in my additional MOF snippet, in configuration.mof, I was looking for specific regkeys. When you do that, there is the top section which sets up what the values are going to be, and the bottom section tells the client where to go get those values in HKLM.
For example (Note; grabbed this sample from the ConfigMgr MOF snippets at sccmexpert.com, just using them as an example--and I've deliberately messed it up to illustrate the example):
[DYNPROPS]
Class Norton_Symantec
{
[key] string Component;
string NavPath;
string NavParent;
string NavPatternName;
string LicenseNumber;
uint32 ParentPattern;
uint32 PatternFileRevision;
uint32 PatternFileSequence;
uint32 ProductVersion;
string ScanEngineVendor;
uint32 ScanEngineVersion;
uint32 UsingPattern;
string VirusEngine;
string Nav7SAV8Defs;
string DefWatch10;
};
//`'`*._.*`'`*-
// Instance of Extended_Norton_Symantec_Anti-Virus
//`'`*._.*`'`*-
[DYNPROPS]
instance of Norton_Symantec
{
Component = "Norton/Symantec AntiVirus Definition File Data";
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\InstalledApps|NAVNT"),Dynamic,Provider("RegPropProv")] NavPath;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|Parent"),Dynamic,Provider("RegPropProv")] NavParent;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|CurrentPatternName"),Dynamic,Provider("RegPropProv")] NavPatternName;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|LicenseNumber"),Dynamic,Provider("RegPropProv")] LicenseNumber;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|ParentPattern"),Dynamic,Provider("RegPropProv")] ParentPattern;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|PatternFileRevision"),Dynamic,Provider("RegPropProv")] PatternFileRevision;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|PatternFileSequence"),Dynamic,Provider("RegPropProv")] PatternFileSequence;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|ProductVersion"),Dynamic,Provider("RegPropProv")] ProductVersion;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|ScanEngineVendor"),Dynamic,Provider("RegPropProv")] ScanEngineVendor;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|ScanEngineVersion"),Dynamic,Provider("RegPropProv")] ScanEngineVersion;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|UsingPattern"),Dynamic,Provider("RegPropProv")] UsingPattern;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Intel\\LANDesk\\VirusProtect6\\CurrentVersion|VirusEngine"),Dynamic,Provider("RegPropProv")] VirusEngine;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\SharedDefs|NAVNT_50_AP1"),Dynamic,Provider("RegPropProv")] Nav5Defs;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\SharedDefs|NAVCORP_70"),Dynamic,Provider("RegPropProv")] Nav7SAV8Defs;
[PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\SharedDefs|DEFWATCH_10"),Dynamic,Provider("RegPropProv")] DefWatch10;
};
Looks fine, right? What could be wrong with that?! After way too much time looking and looking at the lab sample, I finally spotted it. The bottom, the Instance section, is looking for Nav5Defs. But in the top section, I neglected to put in a string Nav5Defs. Fixed that, drop the configuration.mof into the inboxes\clifiles.src\hinv, watch dataldr.log to be sure it's not rejected, a couple of policy refreshes on the client; and about 5 minutes later the Hardware Inventory action came back.
Update: Chris Stauffer experienced a similar issue (hinv missing), but with a different cause.