2012-05-24 5 views
60

मैं एक powershell स्क्रिप्ट है कि मैं सर्वर ए मैं सर्वर बी से कनेक्ट और एक बैकअप के रूप सर्वर एक करने के लिए फ़ाइल की प्रतिलिपि बनाना चाहते से चलाना चाहते हैं लिख रहा हूँ के साथ दूर से करें।कॉपी Powershell

है कि तब नहीं किया जा सकता है, तो मैं सर्वर एक से सर्वर बी से कनेक्ट और सर्वर बी में एक और निर्देशिका में एक फ़ाइल की प्रतिलिपि चाहते हैं

मैं वे Copy-Item आदेश को देखने, लेकिन मैं कैसे नहीं दिख रहा है इसे एक कंप्यूटर नाम देने के लिए।

मैं सोचा होगा मैं

Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA) 

मैं यह कैसे कर सकते की तरह कुछ कर सकता है?

+3

कॉपी-आइटम का उपयोग करने के लिए आपको "\\ सर्वरबी \ सी $ \ प्रोग्राम \ temp \ test.txt" जैसे यूएनसी पथ का उपयोग करना होगा। –

उत्तर

67

Simply use the administrative shares to copy files between systems. It's much easier this way.

Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt; 

By using UNC paths instead of local filesystem paths, you help to ensure that your script is executable from any client system with access to those UNC paths. If you use local filesystem paths, then you are cornering yourself into running the script on a specific computer.

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

Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose 
+7

इस दृष्टिकोण के साथ एक संभावित समस्या यह है कि कॉपी-आइटम वैकल्पिक रूप से समर्थन नहीं करता है प्रमाण-पत्र (यदि आपको किसी भिन्न उपयोगकर्ता के साथ आदेश चलाने के लिए है)। उस स्थिति में, नया-PSDrive दृष्टिकोण आवश्यक है। –

+1

या आप 'Invoke-Command' का उपयोग कर सकते हैं। –

+0

यह समाधान केवल तभी काम करता है जब यूएनसी शेयरों को अवरुद्ध करने वाले मेजबानों के बीच कोई फ़ायरवॉल नहीं है। उस स्थिति में सही समाधान नीचे है ('कॉपी-आइटम -फ्रम सत्र ')। – Marc

35

नया ड्राइव बनाने के लिए आप net use या New-PSDrive का उपयोग क्यों नहीं करते हैं।

नई PsDrive: एक नया PsDrive बनाने केवल powershell environement में दिखाई देते हैं:

New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share 
Copy-Item BigFile Y:\BigFileCopy 

नेट उपयोग: एक नया ओएस के सभी भागों में दिखाई ड्राइव पैदा करते हैं।

Net use y: \\ServerName\Share 
Copy-Item BigFile Y:\BigFileCopy 
13

शायद ज़रुरत है कि रिमोट फाइल अपने क्रेडेंशियल की जरूरत पहुँचा पाने के लिए, आप एक उत्पन्न कर सकते हैं System.Net.WebClient वस्तु cmdlet नई वस्तु का उपयोग कर "कॉपी दूर से फाइल" करने के लिए है, तो

$Source = "\\192.168.x.x\somefile.txt" 
$Dest = "C:\Users\user\somefile.txt" 
$Username = "username" 
$Password = "password" 

$WebClient = New-Object System.Net.WebClient 
$WebClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password) 

$WebClient.DownloadFile($Source, $Dest) 

की तरह या फिर आप

0 UploadFile एक फ़ाइल आप उपयोग कर सकते हैं अपलोड करने की आवश्यकता है, तो
$Dest = "\\192.168.x.x\somefile.txt" 
$Source = "C:\Users\user\somefile.txt" 

$WebClient.UploadFile($Dest, $Source) 
+1

हैक पता चला :) –

+0

@klm_ क्या आप कृपया बता सकते हैं कि आपका क्या मतलब है? – FastTrack

0

उपरोक्त उत्तरों में से कोई भी मेरे लिए काम नहीं करता है। यह त्रुटि मिल रही पर रखा:

Copy-Item : Access is denied 
+ CategoryInfo   : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException> 
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand 

तो इस मेरे लिए यह किया:

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes 
तब मेरे मेजबान से

भागो बॉक्स में मेरी मशीन सिर्फ इस \ {nanoserver के आईपी} \ सी करना $

+1

संभावना है कि आप शेयर + फाइल सिस्टम अनुमतियों के साथ समस्याओं में भाग गए हैं। याद रखें कि सबसे प्रतिबंधित अनुमतियां जीतती हैं, इसलिए यदि आपके पास एनटीएफएस फाइल सिस्टम परत पर पहुंच है, तो यदि शेयर अनुमतियां आपको प्रतिबंधित करती हैं, तो आप लिखने में सक्षम नहीं होंगे। :) –

+0

यह मेरे लिए काम नहीं करता है, फिर भी त्रुटि –

39

पावरशेल संस्करण 5 से आगे (विंडोज सर्वर 2016, downloadable as part of WMF 5 for earlier versions में शामिल), यह रिमोटिंग के साथ संभव है। इसका लाभ यह है कि यह तब भी काम करता है, किसी भी कारण से, आप शेयरों तक नहीं पहुंच सकते हैं।

इसके लिए काम करने के लिए, स्थानीय सत्र जहां प्रतिलिपि शुरू की जाती है, में पावरशेल 5 या उच्चतम स्थापित होना चाहिए।रिमोट सत्र को PowerShell 5 स्थापित करने की आवश्यकता नहीं है - यह PowerShell संस्करणों के साथ 2 के रूप में कम है, और Windows Server संस्करण 2008 R2 के रूप में कम है।

सर्वर एक से, सर्वर बी को एक सत्र बनाने:

$b = New-PSSession B 

और फिर, एक से अभी भी:

Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt 

प्रतिलिपि बनाई जा रही बी करने के लिए आइटम -ToSession साथ किया जाता है। ध्यान दें कि दोनों मामलों में स्थानीय पथ का उपयोग किया जाता है; आपको ट्रैक करना होगा कि आप किस सर्वर पर हैं।

+2

त्रुटि मिली है मैंने पाया है कि दोनों सर्वरों के लिए पीएस 5 स्थापित होना जरूरी नहीं है। मैंने अभी एक सफल परीक्षण किया जहां केवल स्रोत सर्वर (विंडोज 10) में पीएस 5 स्थापित था। डिफ़ॉल्ट पीएस स्थापित ($ PSVersionTable.PSVersion रिपोर्ट 4) के साथ लक्ष्य विंडोज सर्वर 2012 आर 2 था। –

+2

यदि आप स्रोत पर टॉशन का उपयोग करते हैं, तो केवल स्रोत को पीएस 5 स्थापित करने की आवश्यकता होती है। यदि आप लक्ष्य पर फ्रॉम सत्र का उपयोग करते हैं, तो केवल लक्ष्य को पीएस 5 स्थापित करने की आवश्यकता है। –

+1

यह तब भी काम करता है जब आपके पास केवल हाइपरविजर स्थापित होता है (सर्वर के बिना), शेयरों को सेट करने की कोई आवश्यकता नहीं है बस सत्रों का उपयोग करें! – dashesy