পাওয়ারশেলের সাহায্যে ফাইলকে দূরবর্তীভাবে অনুলিপি করুন


95

আমি একটি পাওয়ারশেল স্ক্রিপ্ট লিখছি যা আমি সার্ভার এ থেকে চালনা করতে চাই Server

যদি এটি করা না যায় তবে আমি সার্ভার এ থেকে সার্ভার বিয়ের সাথে সংযোগ করতে এবং একটি ফাইল সার্ভার বিতে অন্য ডিরেক্টরিতে অনুলিপি করতে চাই would

আমি Copy-Itemকমান্ডটি দেখতে পাচ্ছি , তবে এটি কীভাবে কম্পিউটারের নাম দেওয়া যায় তা আমি দেখতে পাচ্ছি না।

আমি ভাবতাম আমি এমন কিছু করতে পারি

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

কিভাবে আমি এটি করতে পারব?


4
অনুলিপি-আইটেমটি ব্যবহার করতে আপনাকে "\\ সার্ভারবি \ সি $ \ প্রোগ্রামগুলি \ টেম্প \ টেস্ট.টেক্সট"

উত্তর:


97

সিস্টেমগুলির মধ্যে ফাইলগুলি অনুলিপি করতে কেবল প্রশাসনিক শেয়ারগুলি ব্যবহার করুন। এটি এইভাবে অনেক সহজ।

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

স্থানীয় ফাইল সিস্টেমের পাথের পরিবর্তে ইউএনসি পাথ ব্যবহার করে, আপনি নিশ্চিত করতে সাহায্য করতে পারেন যে আপনার স্ক্রিপ্টটি কোনও ক্লায়েন্ট সিস্টেম থেকে সেই ইউএনসি পাথ অ্যাক্সেসের সাথে এক্সিকিউটেবল। আপনি যদি স্থানীয় ফাইল সিস্টেমের পাথ ব্যবহার করেন তবে আপনি একটি নির্দিষ্ট কম্পিউটারে স্ক্রিপ্টটি চালানোর জন্য নিজেকে কোণঠাসা করছেন।

এটি কেবল তখনই কার্যকর হয় যখন কোনও প্রশাসনিক অংশীদারের উভয় অধিকারের ব্যবহারকারীর অধীনে পাওয়ারশেল সেশন চলবে।

সকলের পঠনযোগ্য অ্যাক্সেসের সাথে সার্ভার বিতে নিয়মিত নেটওয়ার্ক শেয়ার ব্যবহার করার পরামর্শ দিই এবং কেবল (সার্ভার এ থেকে) কল করুন:

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

9
এই পদ্ধতির সাথে সম্ভাব্য একটি সমস্যা হ'ল অনুলিপি-আইটেমটি বিকল্প শংসাপত্রগুলি সমর্থন করে না (যদি আপনাকে কোনও পৃথক ব্যবহারকারীর সাথে কমান্ডটি চালাতে হয়)। সেক্ষেত্রে নতুন-পিএসডিআরভিউ পদ্ধতির প্রয়োজন।
জর্ডান

4
এই সমাধানটি কেবল তখনই কার্যকর হয় যদি ইউএনসি শেয়ারগুলি অবরোধকারী হোস্টগুলির মধ্যে কোনও ফায়ারওয়াল না থাকে। সেক্ষেত্রে সঠিক সমাধানটি নীচে ( Copy-Item -FromSession)।
মার্ক

88

থেকে PowerShell ভার্সন 5 অগ্রে (উইন্ডোজ সার্ভার 2016, অন্তর্ভুক্ত আগের সংস্করণের জন্য WMF 5 অংশ হিসেবে ডাউনলোডযোগ্য ) এই দূরবর্তী সঙ্গে সম্ভব। এর সুবিধাটি হ'ল এটি যে কোনও কারণেই হোক না কেন, আপনি শেয়ার অ্যাক্সেস করতে না পারলেও এটি কাজ করে।

এটি কাজ করার জন্য, স্থানীয় সেশন যেখানে অনুলিপি শুরু হয়েছে অবশ্যই পাওয়ারশেল 5 বা উচ্চতর ইনস্টলড থাকতে হবে। দূরবর্তী অধিবেশন নেই না PowerShell 5 ইনস্টল থাকতে হবে - এটি কম হিসাবে 2 যেমন PowerShell সংস্করণ, এবং উইন্ডোজ সার্ভার সংস্করণগুলি কম হিসাবে 2008 হিসাবে R2 হলো সাথে কাজ করে। [1]

সার্ভার এ থেকে, সার্ভার বি তে একটি সেশন তৈরি করুন:

$b = New-PSSession B

এবং তারপরেও, এখনও এ থেকে:

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

বিতে আইটেম অনুলিপি করা হয় -ToSession। লক্ষ করুন যে উভয় ক্ষেত্রেই স্থানীয় পাথগুলি ব্যবহৃত হয়; আপনি কোন সার্ভারে রয়েছেন তা আপনাকে ট্র্যাক করে রাখতে হবে।


[1]: কেবল পাওয়ারশেল 2 রয়েছে এমন একটি রিমোট সার্ভার থেকে বা অনুলিপি করার সময়, পাওয়ারশেল 5.1 এ এই বাগটি থেকে সাবধান থাকুন , লেখার সময় রিকার্সিভ ফাইল অনুলিপি কাজ করে না -ToSession, আপাতদৃষ্টিতে অনুলিপিটি কাজ করে না সব সঙ্গে -FromSession


4
আমি খুঁজে পেয়েছি যে উভয় সার্ভারের পিএস 5 ইনস্টল করা প্রয়োজন হয় না। আমি সবেমাত্র একটি সফল পরীক্ষা করেছি যেখানে কেবল উত্স সার্ভারে (উইন্ডোজ 10) পিএস 5 ইনস্টলড ছিল। লক্ষ্যটি ছিল উইন্ডোজ সার্ভার 2012 আর 2 ডিফল্ট পিএস ইনস্টল সহ ($ PSVersionTable.PS ভার্সন রিপোর্ট 4)।
টেলর বুচানন

4
আপনি যদি উত্স-টোসেশন ব্যবহার করেন, কেবল উত্সের PS 5 ইনস্টল করা প্রয়োজন। আপনি যদি লক্ষ্যটিতে -ফর্মসেশন ব্যবহার করেন তবে কেবলমাত্র লক্ষ্যটির জন্য পিএস 5 ইনস্টল করা দরকার।
টেলর বুচানান

4
এটি তখনও কার্যকর হয় যখন আপনি কেবল হাইপারভাইজার ইনস্টল করেছেন (সার্ভার ছাড়াই), কেবলমাত্র সেশনগুলি ব্যবহার করে শেয়ার সেট আপ করার দরকার নেই!
ছদ্মবেশী

ধন্যবাদ! নাইস, মার্জিত সমাধান, অনুরূপ scpউপর sshলিনাক্স ... কোন প্রয়োজন বিরক্তিকর শেয়ার দিয়ে বিরক্ত করার জন্য!
টোবিয়াস জ

40

একটি নতুন ড্রাইভ তৈরি করতে net useবা ব্যবহার New-PSDriveকরতে:

নিউ-পিএসড্রাইভ: কেবল পাওয়ার শেল পরিবেশে দৃশ্যমান একটি নতুন পিসড্রাইভ তৈরি করুন:

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

নেট ব্যবহার: ওএসের সমস্ত অংশে দৃশ্যমান একটি নতুন ড্রাইভ তৈরি করুন।

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

যদি আমি এটি দ্বিগুণ চালিত করি New-PSDrive : A specified logon session does not exist. It may already have been terminated-> আমি মনে করি যে পূর্ববর্তী অধিবেশনটি এখনও চলছে -> তাই আমি ব্যবহার করার চেষ্টা করেছি Remove-PSDrive-> তবুও এটি কার্যকর হয় না। সাহায্যও net use <driveLetter> /deleteকরেনি। অন্য কোনও জিনিস যা আমি করতে পারি তা কি আমি এই কমান্ডটি একটি সফ্টওয়্যার বিল্ড কনফিগারেশনে চালাতে সক্ষম?
ব্রুনো বিয়েরি

New-PSDriveআপনার থাকা উচিত দুটি বার চালানোর কোনও বুদ্ধি নেইA drive with the name 'Y' already exists.
JPBlanc

আমি একমত যে এটি দুবার চালানো কোনও অর্থহীন নয়। তবে এটি একটি বিল্ড পদক্ষেপে অন্তর্ভুক্ত হয়েছে এবং বিল্ডটি দিনে বেশ কয়েকবার চলে। সুতরাং আমার পদ্ধতির ছিল ড্রাইভটি সরিয়ে ফেলা যখন আমি আমার প্রয়োজনীয় কাজটি করেছি এবং আমি ধরে নিচ্ছিলাম যে নতুন বিল্ড এক্সিকিউশন হওয়ার পরে এটি পুনরায় তৈরি করা কোনও সমস্যা হবে না। তবে যদিও এটি একটি সমস্যা বলে মনে হচ্ছে। অন্য কোনও ইঙ্গিত?
ব্রুনো বিয়েরি

এটি মাউন্ট করার আগে এটি মাউন্ট করা থাকলে পরীক্ষার কী হবে? অথবা আপনি যখন নিশ্চিত হন যে এই পথটি ব্যবহার করে সমস্ত হ্যান্ডলগুলি বন্ধ রয়েছে আপনি নিজের স্ক্রিপ্টে সরান-পিএসডিআরআইভ ব্যবহার করতে পারেন।
JPBlanc

16

রিমোট ফাইলটি অ্যাক্সেস পাওয়ার জন্য আপনার শংসাপত্রের প্রয়োজন হলে, আপনি একটি সিস্টেম.নেট.ওয়েব ক্লায়েন্ট অবজেক্ট তৈরি করতে পারবেন সেমিডলেট ব্যবহার করে নিউ-অবজেক্ট "ফাইল রিমোটলি অনুলিপি করুন" তে, যেমনটি

$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)

বা যদি আপনার কোনও ফাইল আপলোড করার প্রয়োজন হয় তবে আপনি আপলোডফাইলে ব্যবহার করতে পারেন:

$Dest = "\\192.168.x.x\somefile.txt"
$Source   = "C:\Users\user\somefile.txt"

$WebClient.UploadFile($Dest, $Source)

4
@klm_ আপনি দয়া করে বোঝাতে পারেন?
ফাস্টট্র্যাক

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

তারপরে আমার হোস্ট থেকে আমার মেশিনটি রান বাক্সে আমি সবেমাত্র এটি করেছি:

\\{IP address of nanoserver}\C$

4
সম্ভাবনাগুলি কী আপনি ভাগ করে + ফাইল-সিস্টেম অনুমতি নিয়ে সমস্যায় পড়েছেন। মনে রাখবেন যে সর্বাধিক সীমাবদ্ধ অনুমতিগুলি জয়লাভ করে, তাই আপনার এনটিএফএস ফাইল সিস্টেম লেয়ারে অ্যাক্সেস থাকলেও, যদি ভাগ অনুমতিগুলি আপনাকে সীমাবদ্ধ করে রাখে, তবে আপনি লিখতে পারবেন না। :)
ট্রেভর সুলিভান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.