Weird, dumb, stupid, useless and above all irritating as hell.
Error messages that don't make any sense, and make total sense at the same time.
Like this one, it states that it cannot find the path to the folder "grammars" and errors out the installation of CU16 and CU17 in my case and fails.
After creating the folder "grammars" in the path C:\Program Files\Microsoft\Exchange Server\V15\UnifiedMessaging\ and restarting the CU installation everything went fine.
D:\Temp\cu16>setup.exe /mode:upgrade
/iacceptexchangeserverlicenseterms
Microsoft Exchange Server 2013 Cumulative Update 16
Unattended Setup
Copying Files...
File copy complete. Setup will now collect additional
information needed for
installation.
Mailbox role: Transport service
Client Access role: Front End Transport service
Mailbox role: Client Access service
Mailbox role: Unified Messaging service
Mailbox role: Mailbox service
Management tools
Client Access role: Client Access Front End service
Performing Microsoft Exchange Server Prerequisite Check
Configuring
Prerequisites
COMPLETED
Prerequisite Analysis
COMPLETED
Configuring Microsoft Exchange Server
Restoring
Services
COMPLETED
Mailbox role: Transport
service
COMPLETED
Client Access role: Front End Transport
service COMPLETED
Mailbox role: Client Access
service
COMPLETED
Mailbox role: Unified Messaging
service
FAILED
The following error was generated
when "$error.Clear();
$grammarPath = join-path $RoleInstallPath
"UnifiedMessaging\grammars\*
";
$dirs
= get-item $grammarPath;
foreach($d in $dirs)
{
if($d -isnot [System.IO.DirectoryInfo])
{
continue;
}
$path1 = $d.FullName + "\*";
$items = get-item $path1 -include *.cfg;
if($items -ne $null)
{
foreach($i in $items)
{
remove-item $i;
}
}
}
" was run:
"System.Management.Automation.ItemNotFoundException: Cannot f
ind path 'C:\Program Files\Microsoft\Exchange
Server\V15\UnifiedMessaging\gramma
rs' because it does not exist.
at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String
path
, Boolean allowNonexistingPaths, PSDriveInfo drive,
ContainerCmdletProvider prov
ider, CmdletProviderContext context)
at
System.Management.Automation.LocationGlobber.ResolveDriveQualifiedPath(Str
ing path, CmdletProviderContext context, Boolean
allowNonexistingPaths, CmdletPr
ovider& providerInstance)
at
System.Management.Automation.LocationGlobber.GetGlobbedMonadPathsFromMonad
Path(String path, Boolean allowNonexistingPaths,
CmdletProviderContext context,
CmdletProvider& providerInstance)
at
System.Management.Automation.LocationGlobber.GetGlobbedProviderPathsFromMo
nadPath(String path, Boolean allowNonexistingPaths,
CmdletProviderContext contex
t, ProviderInfo& provider, CmdletProvider&
providerInstance)
at System.Management.Automation.LocationGlobber.GetChildNamesInDir(String
dir
, String leafElement, Boolean getAllContainers,
CmdletProviderContext context, B
oolean dirIsProviderPath, PSDriveInfo drive,
ContainerCmdletProvider provider, S
tring& modifiedDirPath)
at
System.Management.Automation.LocationGlobber.GenerateNewPSPathsWithGlobLea
f(StringCollection currentDirs, PSDriveInfo drive, String
leafElement, Boolean i
sLastLeaf, ContainerCmdletProvider provider,
CmdletProviderContext context)
at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String
path
, Boolean allowNonexistingPaths, PSDriveInfo drive,
ContainerCmdletProvider prov
ider, CmdletProviderContext context)
at
System.Management.Automation.LocationGlobber.ResolveDriveQualifiedPath(Str
ing path, CmdletProviderContext context, Boolean
allowNonexistingPaths, CmdletPr
ovider& providerInstance)
at
System.Management.Automation.LocationGlobber.GetGlobbedMonadPathsFromMonad
Path(String path, Boolean allowNonexistingPaths,
CmdletProviderContext context,
CmdletProvider& providerInstance)
at
System.Management.Automation.LocationGlobber.GetGlobbedProviderPathsFromMo
nadPath(String path, Boolean allowNonexistingPaths,
CmdletProviderContext contex
t, ProviderInfo& provider, CmdletProvider&
providerInstance)
at
System.Management.Automation.SessionStateInternal.GetItem(String[] paths,
CmdletProviderContext context)
at
Microsoft.PowerShell.Commands.GetItemCommand.ProcessRecord()".
The Exchange Server setup operation didn't complete. More
details can be found
in ExchangeSetup.log located in the
<SystemDrive>:\ExchangeSetupLogs folder.
D:\Temp\cu16>