2016-08-02 14 views
11

का उपयोग कर SFTP पर फ़ाइल अपलोड करें हमें हमारे सर्वरों में से एक से एक SFTP साइट पर एक स्वचालित अपलोड सेट करने के लिए कहा गया था। एक फ़ाइल होगी जो प्रत्येक सोमवार सुबह एक फाइलर से एक फाइलर में निर्यात की जाती है और वे चाहते हैं कि फाइल मंगलवार को एसएफटीपी पर अपलोड की जाए। वर्तमान प्रमाणीकरण विधि जिसका उपयोग हम कर रहे हैं वह उपयोगकर्ता नाम और पासवर्ड है (मुझे विश्वास है कि कुंजी फ़ाइल रखने का विकल्प भी था लेकिन उपयोगकर्ता नाम/पासवर्ड विकल्प चुना गया था)।PowerShell

जिस तरह से मैं इस पर विचार कर रहा हूं वह एक स्क्रिप्ट पर एक स्क्रिप्ट है जो विंडोज टास्क शेड्यूलर द्वारा एक विशिष्ट समय (मंगलवार) पर चलने के लिए ट्रिगर किया जाएगा जो फ़ाइल में एसएफटीपी पर अपलोड करने के बाद फ़ाइल को पकड़ लेगा और फिर इसे बैकअप उद्देश्यों के लिए एक अलग स्थान पर ले जाएं।

उदाहरण के लिए:

  • स्थानीय निर्देशिका: C:\FileDump

  • SFTP निर्देशिका: /Outbox/

  • बैकअप निर्देशिका: C:\Backup

मैं इस पर कुछ बातें करने की कोशिश की WinSCP को उनमें से एक होने के साथ-साथ SFTP PowerShell Snap-In पर इंगित करें लेकिन अब तक मेरे लिए कुछ भी काम नहीं किया है।

यह विंडोज सर्वर 2012R2 पर चल रहा है।
जब मैं Get-Host चलाता हूं तो मेरा कंसोल होस्ट संस्करण 4.0 है।

धन्यवाद।

+0

मैं एक FTP स्क्रिप्ट है जो System.Net.WebRequestMethods + FTP का उपयोग करता है मैंने http://www.thomasmaurer.ch/2010/11/powershell-ftp-upload-and-download/ आधार के रूप में उपयोग किया। अगर आपको और मदद की ज़रूरत है तो मैं सार्वजनिक रिलीज के लिए अपना कोड साफ़ कर सकता हूं। –

+0

@GlenBuktenica सवाल एसएफटीपी के बारे में है, एफ़टीपी नहीं। –

उत्तर

13

वर्तमान में एसएफटीपी भाग करने के लिए अंतर्निहित पावरशेल विधि नहीं है। आपको psftp.exe या पॉश-एसएसएच जैसे पावरशेल मॉड्यूल जैसे कुछ का उपयोग करना होगा।

यहाँ एक उदाहरण उपयोग कर रहा है Posh-SSH:

# Set the credentials 
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force 
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password) 

# Set local file path, SFTP path, and the backup location path which I assume is an SMB path 
$FilePath = "C:\FileDump\test.txt" 
$SftpPath = '/Outbox' 
$SmbPath = '\\filer01\Backup' 

# Set the IP of the SFTP server 
$SftpIp = '10.209.26.105' 

# Load the Posh-SSH module 
Import-Module C:\Temp\Posh-SSH 

# Establish the SFTP connection 
New-SFTPSession -ComputerName $SftpIp -Credential $Credential 

# Upload the file to the SFTP path 
Set-SFTPFile -SessionId 0 -LocalFile $FilePath -RemotePath $SftpPath 

# Disconnect SFTP session 
(Get-SFTPSession -SessionId 0).Disconnect() 

# Copy the file to the SMB location 
Copy-Item -Path $FilePath -Destination $SmbPath 

कुछ अतिरिक्त नोट्स:

  • आप पॉश-SSH मॉड्यूल जो आप अपने उपयोगकर्ता मॉड्यूल निर्देशिका के लिए स्थापित कर सकते हैं डाउनलोड करने के लिए होगा (जैसे सी: \ उपयोगकर्ता \ jon_dechiro \ दस्तावेज़ \ WindowsPowerShell \ मॉड्यूल) और बस नाम का उपयोग करके लोड करें या इसे कहीं भी रखें और इसे लोड करें जैसे मेरे ऊपर उपरोक्त कोड है।
  • यदि स्क्रिप्ट में प्रमाण-पत्र प्राप्त करना स्वीकार्य नहीं है तो आपको एक क्रेडेंशियल फ़ाइल का उपयोग करना होगा। अगर आपको इसके साथ मदद की ज़रूरत है तो मैं कुछ विवरणों के साथ अपडेट कर सकता हूं या आपको कुछ लिंक पर इंगित कर सकता हूं।
  • आवश्यकतानुसार पथ, आईपी इत्यादि बदलें।

आपको यह एक सभ्य प्रारंभिक बिंदु देना चाहिए।

19

आप हमें बता नहीं था क्या विशेष समस्या आप WinSCP साथ की क्या ज़रूरत है, इसलिए मैं वास्तव में केवल क्या WinSCP दस्तावेज में है दोहरा सकते हैं।

  • Download WinSCP .NET assembly
    अब तक का नवीनतम पैकेज WinSCP-5.13-Automation.zip है;
  • Extract.zip आपकी स्क्रिप्ट के साथ संग्रह;
  • इस तरह एक कोड (सरकारी PowerShell upload example के आधार पर) का उपयोग करें:

    # Load WinSCP .NET assembly 
    Add-Type -Path "WinSCPnet.dll" 
    
    # Setup session options 
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ 
        Protocol = [WinSCP.Protocol]::Sftp 
        HostName = "example.com" 
        UserName = "user" 
        Password = "mypassword" 
        SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" 
    } 
    
    $session = New-Object WinSCP.Session 
    
    try 
    { 
        # Connect 
        $session.Open($sessionOptions) 
    
        # Upload 
        $session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check() 
    } 
    finally 
    { 
        # Disconnect, clean up 
        $session.Dispose() 
    } 
    

आप WinSCP आप के लिए अपलोड करने के लिए PowerShell स्क्रिप्ट उत्पन्न हो सकते हैं:

  • WinSCP GUI के साथ अपने सर्वर पर लॉग इन करें;
  • दूरस्थ फ़ाइल पैनल में लक्ष्य निर्देशिका पर नेविगेट करें;
  • स्थानीय फ़ाइल पैनल में अपलोड करने के लिए फ़ाइल का चयन करें;
  • को आमंत्रित करें आदेश;
  • Transfer options dialog पर, स्थानांतरण सेटिंग्स> कोड उत्पन्न करें;
  • जनरेट ट्रांसफर कोड संवाद पर, .NET assembly code tab का चयन करें;
  • पावरशेल भाषा चुनें।

आप की गई समस्त सत्र और हस्तांतरण सेटिंग्स के साथ ऊपर की तरह एक कोड मिलेगा।

Generate transfer code dialog

(मैं WinSCP के लेखक हूँ)

+1

मुझे कल इस सामान को समझने की कोशिश करने में समस्याएं थीं। तब मुझे आपकी पोस्ट मिली। इससे बहुत मदद मिली! मुझे अपना परीक्षण कुछ ही मिनटों में काम कर रहा है और ऐसा लगता है कि यह काम करेगा। यह एक सुपर निफ्टी सुविधा है, महोदय। कभी-कभी आपको केवल एक अच्छा उदाहरण चाहिए। –

+0

वाह, महान जानकारी, मुझे एहसास नहीं हुआ कि WinSCP में यह सुविधा थी! मुझे आपके सॉफ़्टवेयर से प्यार है :) एक प्रकार का नागिंग मुद्दा, यह आश्चर्यजनक होगा अगर WinSCP कनेक्ट प्रक्रिया के लिए अधिक अनुकूलन की अनुमति दे सकता है। मैं पीसी का उपयोग कर अपने सिस्को उपकरणों पर एससीपी फाइलों को कर सकता हूं, क्योंकि प्रत्यक्ष एससीपी को केवल एक बार प्रमाणित करने की आवश्यकता होती है, लेकिन मैं "एन" का उपयोग किए बिना कनेक्ट नहीं कर सकता और डीआईआर प्राप्त नहीं कर सकता जिसके लिए केवल प्रतिक्रिया के रूप में पासवर्ड की आवश्यकता होती है, और मैं नहीं कर सकता ऐसा करने के लिए WinSCP को सेट अप करने का तरीका जानें। शायद हम एक दिन एक्सएमएलएस का उपयोग कर कनेक्ट प्रक्रिया पर अधिक नियंत्रण कर सकते हैं? –

+0

विनसिप ने मेरे एसएफटीपी मुद्दों के लिए एक चैंप की तरह काम किया – digitalslavery