Fix completion crash for the SCCM provider (#20815)

This commit is contained in:
MartinGC94
2023-12-08 15:22:11 -08:00
committed by GitHub
parent 6a90fd0492
commit 09509d2de3
@@ -4764,17 +4764,20 @@ namespace System.Management.Automation
// Save relevant info and try again to get just the names.
foreach (dynamic child in childItemOutput)
{
childrenInfoTable.Add(GetChildNameFromPsObject(child, provider.ItemSeparator), child.PSIsContainer);
// TryAdd is used because some providers (like SCCM) may include duplicate PSPaths in a container.
_ = childrenInfoTable.TryAdd(GetChildNameFromPsObject(child, provider.ItemSeparator), child.PSIsContainer);
}
_ = context.Helper.CurrentPowerShell
.AddCommandWithPreferenceSetting("Microsoft.PowerShell.Management\\Get-ChildItem")
.AddParameter("LiteralPath", pathInfo.Path)
.AddParameter("Name");
.AddParameter("Name")
.AddCommandWithPreferenceSetting("Microsoft.PowerShell.Utility\\Sort-Object")
.AddParameter("Unique");
childItemOutput = context.Helper.ExecuteCurrentPowerShell(out _);
foreach (var child in childItemOutput)
foreach (PSObject child in childItemOutput)
{
var childName = (string)child.BaseObject;
string childName = (string)child.BaseObject;
childNameList.Add(childName);
}
}
@@ -4783,8 +4786,12 @@ namespace System.Management.Automation
foreach (dynamic child in childItemOutput)
{
var childName = GetChildNameFromPsObject(child, provider.ItemSeparator);
childrenInfoTable.Add(childName, child.PSIsContainer);
childNameList.Add(childName);
// TryAdd is used because some providers (like SCCM) may include duplicate PSPaths in a container.
if (childrenInfoTable.TryAdd(childName, child.PSIsContainer))
{
childNameList.Add(childName);
}
}
}