diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim
index e599d1e..88d7a3a 100644
--- a/runtime/autoload/getscript.vim
+++ b/runtime/autoload/getscript.vim
@@ -13,6 +13,7 @@
 "                               substitution of hardcoded commands with global variables
 "   2024 Nov 12 by Vim Project: fix problems on Windows (#16036)
 "   2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
+"   2025 May 11 by Vim Project: check network connectivity (#17249)
 "  }}}
 "
 " GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim
@@ -147,9 +148,6 @@
  elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
   let s:autoinstall= $HOME."/".s:dotvim
  endif
-" call Decho("s:autoinstall<".s:autoinstall.">")
-"else "Decho
-" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled")
 endif
 
 " ---------------------------------------------------------------------
@@ -163,24 +161,19 @@
 "                      scripts based on the list in
 "   (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat
 fun! getscript#GetLatestVimScripts()
-"  call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">")
 
-" insure that wget is executable
   if executable(g:GetLatestVimScripts_wget) != 1
    echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system"
-"   call Dret("GetLatestVimScripts : wget not executable/available")
    return
   endif
 
   " Find the .../GetLatest subdirectory under the runtimepath
   for datadir in split(&rtp,',') + ['']
    if isdirectory(datadir."/GetLatest")
-"    call Decho("found directory<".datadir.">")
     let datadir= datadir . "/GetLatest"
     break
    endif
    if filereadable(datadir."GetLatestVimScripts.dat")
-"    call Decho("found ".datadir."/GetLatestVimScripts.dat")
     break
    endif
   endfor
@@ -188,32 +181,25 @@
   " Sanity checks: readability and writability
   if datadir == ""
    echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install'
-"   call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory")
    return
   endif
   if filewritable(datadir) != 2
    echoerr "(getLatestVimScripts) Your ".datadir." isn't writable"
-"   call Dret("GetLatestVimScripts : non-writable directory<".datadir.">")
    return
   endif
   let datafile= datadir."/GetLatestVimScripts.dat"
   if !filereadable(datafile)
    echoerr "Your data file<".datafile."> isn't readable"
-"   call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">")
    return
   endif
   if !filewritable(datafile)
    echoerr "Your data file<".datafile."> isn't writable"
-"   call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
    return
   endif
   " --------------------
   " Passed sanity checks
   " --------------------
 
-"  call Decho("datadir  <".datadir.">")
-"  call Decho("datafile <".datafile.">")
-
   " don't let any event handlers interfere (like winmanager's, taglist's, etc)
   let eikeep  = &ei
   let hlskeep = &hls
@@ -226,25 +212,20 @@
   " 3. split window
   " 4. edit datafile
   let origdir= getcwd()
-"  call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge')))
   exe "cd ".fnameescape(substitute(datadir,'\','/','ge'))
   split
-"  call Decho("exe  e ".fnameescape(substitute(datafile,'\','/','ge')))
   exe "e ".fnameescape(substitute(datafile,'\','/','ge'))
   res 1000
   let s:downloads = 0
   let s:downerrors= 0
+  let s:message = []
 
   " Check on dependencies mentioned in plugins
-"  call Decho(" ")
-"  call Decho("searching plugins for GetLatestVimScripts dependencies")
   let lastline    = line("$")
-"  call Decho("lastline#".lastline)
   let firstdir    = substitute(&rtp,',.*$','','')
   let plugins     = split(globpath(firstdir,"plugin/**/*.vim"),'\n')
   let plugins     += split(globpath(firstdir,"ftplugin/**/*.vim"),'\n')
   let plugins     += split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n')
-" extend the search to the packages too (this script predates the feature)
   let plugins     += split(globpath(firstdir,"pack/*/start/*/plugin/**/*.vim"),'\n')
   let plugins     += split(globpath(firstdir,"pack/*/opt/*/plugin/**/*.vim"),'\n')
   let plugins     += split(globpath(firstdir,"pack/*/start/*/ftplugin/**/*.vim"),'\n')
@@ -257,14 +238,10 @@
   " It reads the plugin script at the end of the GetLatestVimScripts.dat
   " file, examines it, and then removes it.
   for plugin in plugins
-"   call Decho(" ")
-"   call Decho("plugin<".plugin.">")
 
    " read plugin in
    " evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it
    $
-"   call Decho(".dependency checking<".plugin."> line$=".line("$"))
-"   call Decho("..exe silent r ".fnameescape(plugin))
    exe "silent r ".fnameescape(plugin)
    exe "silent bwipe ".bufnr("#")
 
@@ -272,7 +249,6 @@
     let depscript   = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
     let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','')
     let llp1        = lastline+1
-"    call Decho("..depscript<".depscript.">")
 
     " found a "GetLatestVimScripts: # #" line in the script;
     " check if it's already in the datafile by searching backwards from llp1,
@@ -286,21 +262,17 @@
      " this second search is taken when, for example, a   0 0 scriptname  is to be skipped over
      let srchline= search('\<'.noai_script.'\>','bW')
     endif
-"    call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline)
 
     if srchline == 0
      " found a new script to permanently include in the datafile
      let keep_rega   = @a
      let @a          = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
      echomsg "Appending <".@a."> to ".datafile." for ".depscript
-"     call Decho("..Appending <".@a."> to ".datafile." for ".depscript)
      exe lastline."put a"
      let @a          = keep_rega
      let lastline    = llp1
      let curline     = curline     + 1
      let foundscript = foundscript + 1
-"    else	" Decho
-"     call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
     endif
 
     let curline = curline + 1
@@ -309,12 +281,8 @@
 
    " llp1: last line plus one
    let llp1= lastline + 1
-"   call Decho(".deleting lines: ".llp1.",$d")
    exe "silent! ".llp1.",$d"
   endfor
-"  call Decho("--- end dependency checking loop ---  foundscript=".foundscript)
-"  call Decho(" ")
-"  call Dredir("BUFFER TEST (GetLatestVimScripts 1)","ls!")
 
   if foundscript == 0
    setlocal nomod
@@ -323,32 +291,32 @@
   " --------------------------------------------------------------------
   " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
   " --------------------------------------------------------------------
-"  call Decho("begin: checking out-of-date scripts using datafile<".datafile.">")
   setlocal lz
   1
-"  /^-----/,$g/^\s*\d/call Decho(getline("."))
-  1
   /^-----/,$g/^\s*\d/call s:GetOneScript()
-"  call Decho("--- end out-of-date checking --- ")
 
   " Final report (an echomsg)
   try
    silent! ?^-------?
   catch /^Vim\%((\a\+)\)\=:E114/
-"   call Dret("GetLatestVimScripts : nothing done!")
    return
   endtry
   exe "norm! kz\<CR>"
   redraw!
+  if !empty(s:message)
+   echohl WarningMsg
+   for mess in s:message
+    echom mess
+   endfor
+   let s:downerrors += len(s:message)
+  endif
   let s:msg = ""
   if s:downloads == 1
   let s:msg = "Downloaded one updated script to <".datadir.">"
-  elseif s:downloads == 2
-   let s:msg= "Downloaded two updated scripts to <".datadir.">"
   elseif s:downloads > 1
    let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">"
   else
-   let s:msg= "Everything was already current"
+   let s:msg= empty(s:message) ? "Everything was already current" : "There were some errors"
   endif
   if s:downerrors > 0
    let s:msg= s:msg." (".s:downerrors." downloading errors)"
@@ -366,8 +334,6 @@
   let &hls = hlskeep
   let &acd = acdkeep
   setlocal nolz
-"  call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!")
-"  call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
 endfun
 
 " ---------------------------------------------------------------------
@@ -376,8 +342,6 @@
 "    ScriptID, SourceID, and Filename.
 "    It downloads any scripts that have newer versions from vim.sourceforge.net.
 fun! s:GetOneScript(...)
-"   call Dfunc("GetOneScript()")
-
  " set options to allow progress to be shown on screen
   let rega= @a
   let t_ti= &t_ti
@@ -403,13 +367,9 @@
    let srcid    = a:2
    let fname    = a:3
    let cmmnt    = ""
-"   call Decho("scriptid<".scriptid.">")
-"   call Decho("srcid   <".srcid.">")
-"   call Decho("fname   <".fname.">")
   else
    let curline  = getline(".")
    if curline =~ '^\s*#'
-"    call Dret("GetOneScript : skipping a pure comment line")
     return
    endif
    let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$'
@@ -433,36 +393,26 @@
    catch /^Vim\%((\a\+)\)\=:E486/
     let cmmnt= ""
    endtry
-"   call Decho("curline <".curline.">")
-"   call Decho("parsepat<".parsepat.">")
-"   call Decho("scriptid<".scriptid.">")
-"   call Decho("srcid   <".srcid.">")
-"   call Decho("fname   <".fname.">")
   endif
 
   " plugin author protection from downloading his/her own scripts atop their latest work
+  " When looking for :AutoInstall: lines, skip scripts that have   0 0 scriptname
   if scriptid == 0 || srcid == 0
-   " When looking for :AutoInstall: lines, skip scripts that have   0 0 scriptname
-"   call Dret("GetOneScript : skipping a scriptid==srcid==0 line")
    return
   endif
 
   let doautoinstall= 0
   if fname =~ ":AutoInstall:"
-"   call Decho("case AutoInstall: fname<".fname.">")
    let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','')
-"   call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall)
    if s:autoinstall != ""
     let doautoinstall = g:GetLatestVimScripts_allowautoinstall
    endif
   else
    let aicmmnt= fname
   endif
-"  call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall)
 
   exe "norm z\<CR>"
   redraw!
-"  call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
 
   " grab a copy of the plugin's vim.sourceforge.net webpage
@@ -470,15 +420,17 @@
   let tmpfile    = tempname()
   let v:errmsg   = ""
 
+  " Check if URLs are reachable
+  if !CheckVimScriptURL(scriptid, srcid)
+   return
+  endif
+
   " make up to three tries at downloading the description
   let itry= 1
   while itry <= 3
-"   call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
    if has("win32") || has("win16") || has("win95")
-"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!")
     new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw!
    else
-"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr))
     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)
    endif
    if itry == 1
@@ -496,7 +448,6 @@
    endif
    let itry= itry + 1
   endwhile
-"  call Decho(" --- end downloading tries while loop --- itry=".itry)
 
   " testing: did finding "Click on the package..." fail?
   if findpkg == 0 || itry >= 4
@@ -507,12 +458,9 @@
    let &t_te        = t_te
    let &rs          = rs
    let s:downerrors = s:downerrors + 1
-"   call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">")
    echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">"
-"   call Dret("GetOneScript : srch for /Click on the package/ failed")
    return
   endif
-"  call Decho('found "Click on the package to download"')
 
   let findsrcid= search('src_id=','W')
   if findsrcid == 0
@@ -523,28 +471,22 @@
    let &t_te        = t_te
    let &rs          = rs
    let s:downerrors = s:downerrors + 1
-"   call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">")
    echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">"
-"  call Dret("GetOneScript : srch for /src_id/ failed")
    return
   endif
-"  call Decho('found "src_id=" in description page')
 
   let srcidpat   = '^\s*<td class.*src_id=\(\d\+\)">\([^<]\+\)<.*$'
   let latestsrcid= substitute(getline("."),srcidpat,'\1','')
   let sname      = substitute(getline("."),srcidpat,'\2','') " script name actually downloaded
-"  call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> sname<".sname.">")
   silent q!
   call delete(tmpfile)
 
   " convert the strings-of-numbers into numbers
   let srcid       = srcid       + 0
   let latestsrcid = latestsrcid + 0
-"  call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">")
 
   " has the plugin's most-recent srcid increased, which indicates that it has been updated
   if latestsrcid > srcid
-"   call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">")
 
    let s:downloads= s:downloads + 1
    if sname == bufname("%")
@@ -555,20 +497,16 @@
    " -----------------------------------------------------------------------------
    " the plugin has been updated since we last obtained it, so download a new copy
    " -----------------------------------------------------------------------------
-"   call Decho(".downloading new <".sname.">")
    echomsg ".downloading new <".sname.">"
    if has("win32") || has("win16") || has("win95")
-"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)."|bw!")
     new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)|bw!
    else
-"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)
     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)
    endif
 
    " --------------------------------------------------------------------------
    " AutoInstall: only if doautoinstall has been requested by the plugin itself
    " --------------------------------------------------------------------------
-"   call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
    if doautoinstall
     if filereadable(sname)
      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
@@ -602,7 +540,6 @@
       exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname)
       let sname= substitute(sname,'\.xz$','','')
      else
-"      call Decho("no decompression needed")
      endif
 
      " distribute archive(.zip, .tar, .vba, .vmb, ...) contents
@@ -632,8 +569,6 @@
       else
        unlet g:vimball_home
       endif
-     else
-"      call Decho("no dearchiving needed")
      endif
 
      " ---------------------------------------------
@@ -665,9 +600,59 @@
    " update the data in the <GetLatestVimScripts.dat> file
    call setline(line("."),modline)
   endif
-
 endfun
 
+" CheckVimScriptURL: Check Network Connection {{{1
+" Check status code of scriptaddr and downloadaddr
+" return v:true if the script is downloadable or v:false in case of errors
+fun CheckVimScriptURL(script_id, src_id)
+  if !executable('curl')
+    return v:true
+  endif
+  let output = has("win32") ? ' -o NUL ' : ' -o /dev/null '
+
+  " Handle PowerShell differently
+  if &shell =~? '\<pwsh\>\|\<powershell\>'
+    " For PowerShell, use direct command output
+    let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id
+    let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url)
+    let script_status = system(script_cmd)
+    let script_status = substitute(script_status, '\n$', '', '')
+
+    let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id
+    let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url)
+    let download_status = system(download_cmd)
+    let download_status = substitute(download_status, '\n$', '', '')
+  else
+    " For other shells, use temporary files
+    let temp_script = tempname()
+    let temp_download = tempname()
+
+    let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id
+    let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) . ' >' . shellescape(temp_script)
+    call system(script_cmd)
+    let script_status = readfile(temp_script, 'b')[0]
+    call delete(temp_script)
+
+    let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id
+    let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) . ' >' . shellescape(temp_download)
+    call system(download_cmd)
+    let download_status = readfile(temp_download, 'b')[0]
+    call delete(temp_download)
+  endif
+
+  if script_status !=# '200'
+    let s:message += [ printf('Error: Failed to reach script: %s', a:script_id) ]
+    return v:false
+  endif
+
+  if download_status !=# '200'
+    let s:message += [ printf('Error: Failed to download script %s', a:script_id) ]
+    return v:false
+  endif
+  return v:true
+endfunction
+
 " ---------------------------------------------------------------------
 " Restore Options: {{{1
 let &cpo= s:keepcpo
