code: func newSMBMapping(username, password, remotepath string) (string, error) {
  	if username == "" || password == "" || remotepath == "" {
  		return "", fmt.Errorf("invalid parameter(username: %s, password: %s, remoteapth: %s)", username, password, remotepath)
  	}
  
  	// use PowerShell Environment Variables to store user input string to prevent command line injection
  	// https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-5.1
  	cmdLine := `$PWord = ConvertTo-SecureString -String $Env:smbpassword -AsPlainText -Force` +
  		`;$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Env:smbuser, $PWord` +
  		`;New-SmbGlobalMapping -RemotePath $Env:smbremotepath -Credential $Credential`
  	cmd := exec.Command("powershell", "/c", cmdLine)
  	cmd.Env = append(os.Environ(),
  		fmt.Sprintf("smbuser=%s", username),
  		fmt.Sprintf("smbpassword=%s", password),
  		fmt.Sprintf("smbremotepath=%s", remotepath))
  
  	output, err := cmd.CombinedOutput()
  	return string(output), err
  }
docs: // do the SMB mount with username, password, remotepath
  // return (output, error)