दिलचस्प पोस्ट
गीथहब के साथ मैं मौजूदा शाखाओं को जोड़ते समय सभी शाखाओं को कैसे धक्का करूँ? रिवर्स जावा ग्राफिक्स 2 डी स्केल और घुमाए गए निर्देशांक रूबी में एक यादृच्छिक स्ट्रिंग कैसे उत्पन्न करें एसक्यूएल सर्वर पर संग्रहीत proc अद्यतन करें गूगल ऐडसेंस से जावास्क्रिप्ट त्रुटियों कैसे सी # में किसी अन्य प्रक्रिया के लिए पैरामीटर पारित करने के लिए वेब ब्राउजर नियंत्रण में जावास्क्रिप्ट को इंजेक्ट करने के लिए कैसे? बहु-लाइन फ्लेक्स में लाइन ब्रेक Get-ADUser फ़िल्टर पैरामीटर में पासिंग स्ट्रिंग त्रुटि का कारण बनती है – pscustomobject में संपत्ति नहीं मिली Inno सेटअप: सत्यापित करें कि .NET 4.0 स्थापित है C # कंसोल अनुप्रयोग की कंसोल विंडो को छुपाएं / छिपाएं जावा वेबस्टार्ट के माध्यम से चलने के दौरान आउटलुकेटर में NullPointerException डिव पर टैब अनुक्रमणिका टाइपस्क्रिप्ट में ऐरे का विस्तार करना मैं XPath के साथ सीएसएस वर्ग के द्वारा एक तत्व कैसे प्राप्त करूं?

PowerShell का उपयोग कर FTP के साथ फाइल अपलोड करें

मैं किसी अज्ञात FTP सर्वर से FTP के साथ फ़ाइलों को स्थानांतरित करने के लिए PowerShell का उपयोग करना चाहता हूं। मैं किसी भी अतिरिक्त पैकेज का उपयोग नहीं करेगा कैसे?

स्क्रिप्ट लटका या क्रैश होने पर कोई जोखिम नहीं होना चाहिए।

वेब के समाधान से एकत्रित समाधान "PowerShell का उपयोग कर FTP के साथ फाइल अपलोड करें"

मुझे यकीन नहीं है कि आप 100% बुलेट प्रूफ स्क्रिप्ट को लटकने या क्रैश करने से नहीं कर सकते, क्योंकि आपके नियंत्रण से बाहर चीजें हैं (क्या होगा अगर सर्वर ने मध्य अपलोड अपलोड कर दिया?) – लेकिन आपको इसे शुरू करने के लिए एक ठोस नींव प्रदान करनी चाहिए:

# create the FtpWebRequest and configure it $ftp = [System.Net.FtpWebRequest]::Create("ftp://localhost/me.png") $ftp = [System.Net.FtpWebRequest]$ftp $ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile $ftp.Credentials = new-object System.Net.NetworkCredential("anonymous","anonymous@localhost") $ftp.UseBinary = $true $ftp.UsePassive = $true # read in the file to upload as a byte array $content = [System.IO.File]::ReadAllBytes("C:\me.png") $ftp.ContentLength = $content.Length # get the request stream, and write the bytes into it $rs = $ftp.GetRequestStream() $rs.Write($content, 0, $content.Length) # be sure to clean up after ourselves $rs.Close() $rs.Dispose() 

कुछ अन्य तरीके भी हैं मैंने निम्न स्क्रिप्ट का उपयोग किया है:

 $File = "D:\Dev\somefilename.zip"; $ftp = "ftp://username:password@example.com/pub/incoming/somefilename.zip"; Write-Host -Object "ftp url: $ftp"; $webclient = New-Object -TypeName System.Net.WebClient; $uri = New-Object -TypeName System.Uri -ArgumentList $ftp; Write-Host -Object "Uploading $File..."; $webclient.UploadFile($uri, $File); 

और आप निम्न आज्ञा का उपयोग करके विंडोज़ एफ़टीपी कमांड लाइन उपयोगिता के खिलाफ एक स्क्रिप्ट चला सकते हैं

 ftp -s:script.txt 

( इस आलेख को देखें )

एसओई पर निम्नलिखित प्रश्न भी इसका उत्तर देता है: कैसे एफ़पीपी अपलोड और डाउनलोड स्क्रिप्ट करें?

मैं दावा नहीं कर रहा हूं कि यह उच्चतर मतदान वाले समाधानों की तुलना में अधिक सुंदर है … लेकिन यह अपने तरीके से शांत (अच्छी तरह से, कम से कम मेरे दिमाग में एलओएल) है:

 $server = "ftp.lolcats.com" $filelist = "file1.txt file2.txt" "open $server user $user $password binary cd $dir " + ($filelist.split(' ') | %{ "put ""$_""`n" }) | ftp -i -in 

जैसा कि आप देख सकते हैं, यह उस गंदे निर्मित Windows FTP क्लाइंट का उपयोग करता है। बहुत छोटा और सीधा, भी। हां, मैंने वास्तव में इसका उपयोग किया है और यह काम करता है!

मैंने हाल ही में एफ़टीपी के साथ संचार के लिए कई शक्तियों के लिए लिखा है, https://github.com/AstralisSomnium/PowerShell-No-Library-Just-Functions/blob/master/FTPModule.ps1 देखें । नीचे दूसरा फ़ंक्शन, आप एफ़टीपी के लिए एक संपूर्ण स्थानीय फ़ोल्डर भेज सकते हैं। मॉड्यूल में फ़ोल्डर्स और फ़ाइलों को फिर से पढ़ना / जोड़ने / पढ़ने के लिए भी फ़ंक्शन हैं

 #Add-FtpFile -ftpFilePath "ftp://myHost.com/folder/somewhere/uploaded.txt" -localFile "C:\temp\file.txt" -userName "User" -password "pw" function Add-FtpFile($ftpFilePath, $localFile, $username, $password) { $ftprequest = New-FtpRequest -sourceUri $ftpFilePath -method ([System.Net.WebRequestMethods+Ftp]::UploadFile) -username $username -password $password Write-Host "$($ftpRequest.Method) for '$($ftpRequest.RequestUri)' complete'" $content = $content = [System.IO.File]::ReadAllBytes($localFile) $ftprequest.ContentLength = $content.Length $requestStream = $ftprequest.GetRequestStream() $requestStream.Write($content, 0, $content.Length) $requestStream.Close() $requestStream.Dispose() } #Add-FtpFolderWithFiles -sourceFolder "C:\temp\" -destinationFolder "ftp://myHost.com/folder/somewhere/" -userName "User" -password "pw" function Add-FtpFolderWithFiles($sourceFolder, $destinationFolder, $userName, $password) { Add-FtpDirectory $destinationFolder $userName $password $files = Get-ChildItem $sourceFolder -File foreach($file in $files) { $uploadUrl ="$destinationFolder/$($file.Name)" Add-FtpFile -ftpFilePath $uploadUrl -localFile $file.FullName -username $userName -password $password } } #Add-FtpFolderWithFilesRecursive -sourceFolder "C:\temp\" -destinationFolder "ftp://myHost.com/folder/" -userName "User" -password "pw" function Add-FtpFolderWithFilesRecursive($sourceFolder, $destinationFolder, $userName, $password) { Add-FtpFolderWithFiles -sourceFolder $sourceFolder -destinationFolder $destinationFolder -userName $userName -password $password $subDirectories = Get-ChildItem $sourceFolder -Directory $fromUri = new-object System.Uri($sourceFolder) foreach($subDirectory in $subDirectories) { $toUri = new-object System.Uri($subDirectory.FullName) $relativeUrl = $fromUri.MakeRelativeUri($toUri) $relativePath = [System.Uri]::UnescapeDataString($relativeUrl.ToString()) $lastFolder = $relativePath.Substring($relativePath.LastIndexOf("/")+1) Add-FtpFolderWithFilesRecursive -sourceFolder $subDirectory.FullName -destinationFolder "$destinationFolder/$lastFolder" -userName $userName -password $password } 

}

आप इस तरह से, बस PowerShell के माध्यम से फाइल अपलोड संभाल सकते हैं। पूरा परियोजना गिटौब पर यहां उपलब्ध है https://github.com/edouardkombo/PowerShellFtp

 #Directory where to find pictures to upload $Dir= 'c:\fff\medias\' #Directory where to save uploaded pictures $saveDir = 'c:\fff\save\' #ftp server params $ftp = 'ftp://10.0.1.11:21/' $user = 'user' $pass = 'pass' #Connect to ftp webclient $webclient = New-Object System.Net.WebClient $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) #Initialize var for infinite loop $i=0 #Infinite loop while($i -eq 0){ #Pause 1 seconde before continue Start-Sleep -sec 1 #Search for pictures in directory foreach($item in (dir $Dir "*.jpg")) { #Set default network status to 1 $onNetwork = "1" #Get picture creation dateTime... $pictureDateTime = (Get-ChildItem $item.fullName).CreationTime #Convert dateTime to timeStamp $pictureTimeStamp = (Get-Date $pictureDateTime).ToFileTime() #Get actual timeStamp $timeStamp = (Get-Date).ToFileTime() #Get picture lifeTime $pictureLifeTime = $timeStamp - $pictureTimeStamp #We only treat pictures that are fully written on the disk #So, we put a 2 second delay to ensure even big pictures have been fully wirtten in the disk if($pictureLifeTime -gt "2") { #If upload fails, we set network status at 0 try{ $uri = New-Object System.Uri($ftp+$item.Name) $webclient.UploadFile($uri, $item.FullName) } catch [Exception] { $onNetwork = "0" write-host $_.Exception.Message; } #If upload succeeded, we do further actions if($onNetwork -eq "1"){ "Copying $item..." Copy-Item -path $item.fullName -destination $saveDir$item "Deleting $item..." Remove-Item $item.fullName } } } } 

यहाँ मेरा सुपर शांत संस्करण है क्योंकि यह एक प्रगति बार है 🙂

जो पूरी तरह से बेकार की सुविधा है, मुझे पता है, लेकिन यह अभी भी अच्छा दिख रहा है \ m / \ m /

 $webclient = New-Object System.Net.WebClient Register-ObjectEvent -InputObject $webclient -EventName "UploadProgressChanged" -Action { Write-Progress -Activity "Upload progress..." -Status "Uploading" -PercentComplete $EventArgs.ProgressPercentage } > $null $File = "filename.zip" $ftp = "ftp://user:password@server/filename.zip" $uri = New-Object System.Uri($ftp) try{ $webclient.UploadFileAsync($uri, $File) } catch [Net.WebException] { Write-Host $_.Exception.ToString() -foregroundcolor red } while ($webclient.IsBusy) { continue } 

पुनश्च। बहुत मदद करता है, जब मैं सोच रहा हूं "क्या यह काम करना बंद कर देता है, या यह सिर्फ मेरी धीमी एएसडीएल कनेक्शन है?"

Goyuix का समाधान महान काम करता है, लेकिन प्रस्तुत करने के साथ मुझे यह त्रुटि देता है: "HTTP प्रॉक्सी का उपयोग करते समय अनुरोधित एफ़टीपी कमांड समर्थित नहीं है।"

$ftp.UsePassive = $true बाद इस लाइन को जोड़ना मेरे लिए समस्या तय की गई है:

 $ftp.Proxy = $null; 

PowerShell का उपयोग कर किसी FTP सर्वर पर एक बाइनरी फ़ाइल अपलोड करने का सबसे तुच्छ तरीका WebClient.UploadFile का प्रयोग कर रहा है। WebClient.UploadFile :

 $client = New-Object System.Net.WebClient $client.Credentials = New-Object System.Net.NetworkCredential("username", "password") $client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", "C:\local\path\file.zip") 

यदि आपको अधिक नियंत्रण की आवश्यकता है, तो उस WebClient पेशकश नहीं की जाती है (जैसे कि TLS / SSL एन्क्रिप्शन, आदि), FtpWebRequest उपयोग करें आसान तरीका सिर्फ स्ट्रीम स्ट्रीम का उपयोग करके एफ़टीपी स्ट्रीम में एक Stream.CopyTo स्ट्रीम को कॉपी करना है। कॉपी करें:

 $request = [Net.WebRequest]::Create("ftp://ftp.example.com/remote/path/file.zip") $request.Credentials = New-Object System.Net.NetworkCredential("username", "password") $request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile $fileStream = [System.IO.File]::OpenRead("C:\local\path\file.zip") $ftpStream = $request.GetRequestStream() $fileStream.CopyTo($ftpStream) $ftpStream.Dispose() $fileStream.Dispose() 

यदि आप अपलोड प्रगति पर नज़र रखने की आवश्यकता रखते हैं, तो आपको अपने आप से सामग्री की प्रतिलिपि बनाना होगा:

 $request = [Net.WebRequest]::Create("ftp://ftp.example.com/remote/path/file.zip") $request.Credentials = New-Object System.Net.NetworkCredential("username", "password") $request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile $fileStream = [System.IO.File]::OpenRead("C:\local\path\file.zip") $ftpStream = $request.GetRequestStream() $buffer = New-Object Byte[] 10240 while (($read = $fileStream.Read($buffer, 0, $buffer.Length)) -gt 0) { $ftpStream.Write($buffer, 0, $read) $pct = ($fileStream.Position / $fileStream.Length) Write-Progress ` -Activity "Uploading" -Status ("{0:P0} complete:" -f $pct) ` -PercentComplete ($pct * 100) } $fileStream.CopyTo($ftpStream) $ftpStream.Dispose() $fileStream.Dispose()