Você pode usar uma combinação de pwd, Join-Pathe [System.IO.Path]::GetFullPathpara obter um caminho expandido totalmente qualificado.
Como cd( Set-Location) não altera o diretório de trabalho atual do processo, simplesmente passar um nome de arquivo relativo a uma API .NET que não entende o contexto do PowerShell pode ter efeitos colaterais indesejados, como resolver para um caminho baseado no trabalho inicial diretório (não sua localização atual).
O que você faz é primeiro qualificar seu caminho:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Isso produz (dada minha localização atual):
C:\WINDOWS\system32\fred\frog\..\frag
Com uma base absoluta, é seguro chamar a API .NET GetFullPath:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
O que fornece o caminho totalmente qualificado e com o ..removido:
C:\WINDOWS\system32\fred\frag
Também não é complicado, pessoalmente, desprezo as soluções que para isso dependem de scripts externos, é um problema simples resolvido de forma bastante adequada por Join-Pathe pwd( GetFullPathserve apenas para torná-lo bonito). Se você quiser manter apenas a parte relativa , basta adicionar .Substring((pwd).Path.Trim('\').Length + 1)e pronto!
fred\frag
ATUALIZAR
Obrigado a @Dangph por apontar o C:\caso extremo.