code: func getDiskID(pdName string, exec mount.Exec) (string, error) {
  	// TODO: replace Get-GcePdName with native windows support of Get-Disk, see issue #74674
  	cmd := `Get-GcePdName | select Name, DeviceId | ConvertTo-Json`
  	output, err := exec.Run("powershell", "/c", cmd)
  	if err != nil {
  		klog.Errorf("Get-GcePdName failed, error: %v, output: %q", err, string(output))
  		err = errors.New(err.Error() + " " + string(output))
  		return "", err
  	}
  
  	var data []map[string]interface{}
  	if err = json.Unmarshal(output, &data); err != nil {
  		klog.Errorf("Get-Disk output is not a json array, output: %q", string(output))
  		return "", err
  	}
  
  	for _, pd := range data {
  		if jsonName, ok := pd["Name"]; ok {
  			if name, ok := jsonName.(string); ok {
  				if name == pdName {
  					klog.Infof("found the disk %q", name)
  					if diskNum, ok := pd["DeviceId"]; ok {
  						switch v := diskNum.(type) {
  						case int:
  							return strconv.Itoa(v), nil
  						case float64:
  							return strconv.Itoa(int(v)), nil
  						case string:
  							return v, nil
  						default:
  							// diskNum isn't one of the types above
  							klog.Warningf("Disk %q found, but disknumber (%q) is not in one of the recongnized type", name, diskNum)
  						}
  					}
  				}
  			}
  		}
  	}
  
  	return "", fmt.Errorf("Could not found disk number for disk %q", pdName)
  }
docs: // search Windows disk number by LUN