# Download web.config + list logs dir for upload-failure diagnosis $ErrorActionPreference = "Continue" $FtpHost="116.198.221.125"; $FtpPort=21; $FtpUser="wenchuanyi"; $FtpPass="r7P^f*v7rFts" $Out = "D:\CodeBuddy\Pros\WenChuanyi\deploy\_diag" New-Item -ItemType Directory -Force -Path $Out | Out-Null function NewR($p,$m,$to=60000){ $u="ftp://${FtpHost}:${FtpPort}/"+$p.TrimStart('/'); $r=[System.Net.FtpWebRequest]::Create($u); $r.Method=$m; $r.Credentials=New-Object System.Net.NetworkCredential($FtpUser,$FtpPass); $r.UsePassive=$true; $r.UseBinary=$true; $r.KeepAlive=$false; $r.Timeout=$to; $r } function Down($rp,$lp){ try{ $r=NewR $rp ([System.Net.WebRequestMethods+Ftp]::DownloadFile) $resp=$r.GetResponse(); $fs=[IO.File]::Create($lp) $s=$resp.GetResponseStream(); $b=New-Object byte[] 65536 while(($n=$s.Read($b,0,65536)) -gt 0){ $fs.Write($b,0,$n) } $fs.Close(); $s.Close(); $resp.Close() Write-Host "DOWN OK $rp -> $lp" }catch{ Write-Host "DOWN FAIL $rp : $($_.Exception.Message)" } } function ListF($p){ try{ $r=NewR $p ([System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails) $resp=$r.GetResponse(); $sr=New-Object IO.StreamReader($resp.GetResponseStream(),[Text.Encoding]::UTF8) $txt=$sr.ReadToEnd(); $sr.Close(); $resp.Close() return $txt }catch{ return "ERR $($_.Exception.Message)" } } Down "/wwwroot/web.config" "$Out\server-web.config" Write-Host "=== logs dir ===" (ListF "/wwwroot/logs/") | ForEach-Object { Write-Host $_ } Write-Host "=== wwwroot dir ===" (ListF "/wwwroot/") | ForEach-Object { Write-Host $_ }