Escape the special character in vsphere windows path

This commit is contained in:
Angela Li 2021-02-06 02:13:31 -08:00
parent 0083786ca9
commit 0fd36b00bb

View File

@ -75,7 +75,7 @@ func getUpperPath(path string) string {
// Check whether a directory/file is a link type or not
// LinkType could be SymbolicLink, Junction, or HardLink
func isLinkPath(path string) (bool, error) {
cmd := fmt.Sprintf("(Get-Item -Path %s).LinkType", path)
cmd := fmt.Sprintf("(Get-Item -Path %s).LinkType", escapeWindowsPath(path))
output, err := exec.Command("powershell", "/c", cmd).CombinedOutput()
if err != nil {
return false, err
@ -86,6 +86,17 @@ func isLinkPath(path string) (bool, error) {
return false, nil
}
// Escape the special character in vsphere windows path
func escapeWindowsPath(path string) (string) {
if strings.Contains(path, "``[") || strings.Contains(path, "``]") || strings.Contains(path, "` ") {
return path
}
escapeLeft := strings.Replace(path, "[", "``[", -1)
escapeRight := strings.Replace(escapeLeft, "]", "``]", -1)
escapeSpace := strings.Replace(escapeRight, " ", "` ", -1)
return escapeSpace
}
// evalSymlink returns the path name after the evaluation of any symbolic links.
// If the path after evaluation is a device path or network connection, the original path is returned
func evalSymlink(path string) (string, error) {
@ -113,7 +124,7 @@ func evalSymlink(path string) (string, error) {
}
}
// This command will give the target path of a given symlink
cmd := fmt.Sprintf("(Get-Item -Path %s).Target", upperpath)
cmd := fmt.Sprintf("(Get-Item -Path %s).Target", escapeWindowsPath(upperpath))
output, err := exec.Command("powershell", "/c", cmd).CombinedOutput()
if err != nil {
return "", err