آموزش دستور PowerShell Copy-Item

آموزش دستور PowerShell Copy-Item
Avatar
نویسنده: مدیا روشن
دوشنبه 4 مرداد 1400
مطالعه: ۱۰ دقیقه ۰ نظر ۲۲۴۰ بازدید

پاورشل از موتورهای هوشمند و خودکار کاربران ویندوزی است که به مدیریت بهتر شبکه‌های کامپیوتری کمک قابل توجهی می‌کند. در واقع شرکت مایکروسافت، پاورشل را به منظور یک ابزار قدرتمند برای حل مشکلات و خودکار کردن فرآیندهای سیستم عامل ویندوز معرفی کرده است. این ابزار شرکت ویندوز، دستورات و کاربردهایی دارد که هر یک از کاربران پیش از شروع باید از آن مطلع باشند. در این مطلب از آموزش پاورشل قصد داریم تا دستورات PowerShell Copy Item را با ذکر مثال مورد بررسی قرار دهیم. پس در ادامه همراه با ما باشید.

خرید سرور ویندوز برای مدیریت با پاورشل از پارس پک

از این مقاله می‌‌توانید برای مدیریت سرویس‌های ویندوز خود استفاده کنید و اگر قصد خرید انواع سرویس ویندوز پارس پک را دارید، می‌توانید با کارشناسان فروش ما در ارتباط باشید. همچنین، می‌توانید جهت کسب‌ اطلاعات بیشتر به لینک‌های زیر مراجعه کنید.

آموزش دستور پاورشل کپی آیتم

به‌طور کلی می‌توان با استفاده از دستور Copy-Item برای کپی کردن یک مورد از یک مکان به مکان دیگر استفاده کرد. این دستور فقط مورد را کپی می‌کند و پس از آن برش یا حذف نمی‌شود. همچنین Copy-Item می‌تواند آیتم را کپی و تغییر نام دهد و فقط باید نام جدید را در پارامتر Destination در دستور PowerShell copy-item وارد نمود.
مطابق با MSDN نحوه دستور copy-item به شکل زیر است:

Copy-Item
[-Path] <String[]>
[[-Destination] <String>]
[-Container]
[-Force]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-Recurse]
[-PassThru]
[-Credential <PSCredential>]
[-WhatIf]
[-Confirm]
[-FromSession <PSSession>]
[-ToSession <PSSession>]
[<CommonParameters>]

در این مطلب به منظور نوشتن، اجرا و رفع اشکال اسکریپت پاورشل، از Windows PowerShell ISE استفاده شده است. برای مشاهده چند نمونه از موارد کپی PowerShell در ادامه باز هم همراه با ما باشید.

مثال 1)

در این مثال، نحوه کپی کردن یک فایل از یک مکان به مکان دیگر با استفاده از دستور Copy-Item انجام شده و مشاهده می‌شود که فایل در محل مقصد کپی شده است.

Copy-Item "D:\Source\Test.docx" -Destination "D:\Bijay\Destination"
آموزش کپی آیتم در پاورشل

آموزش کپی آیتم در پاورشل

مثال 2)

در این مثال، نحوه کپی کردن همه فایل‌ها از یک مکان به مکان دیگر بررسی می‌شوند و در واقع چند نوع فایل مختلف در پوشه Source، با استفاده از cmdlet در PowerShell Copy-Item، از پوشه منبع در پوشه مقصد کپی می‌گردند.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination"
کپی کردن تمام فایل ها

نحوه کپی کردن تمام فایل ها

آموزش دستور PowerShell Copy Item recurse subfolders

برای کپی کردن زیر پوشه‌های بازیابی آیتم در PowerShell می‌توان از دستور زیر استفاده کرد. در این حالت در پوشه Source، یک پوشه فرعی وجود دارد که دارای چند پرونده است و وقتی دستور زیر را اجرا می‌شود، فقط پوشه را ایجاد می‌کند و پرونده‌هایی را که در پوشه فرعی ارائه شده‌اند کپی نمی‌کند.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination"

در حقیقت، اگر پوشه فرعی دارای زیر پوشه تو در تو باشد، هنگام اجرای cmdlet در Copy-Item PowerShell، زیر پوشه تو در تو ایجاد نمی‌شود.

نحوه کپی کردن subfolder در پاورشل
آموزش کپی کردن subfolder در پاورشل

برای کپی کردن آیتم‌ها به صورت بازگشتی، باید از پارامتر -Recurse با cmdlet Copy-Item PowerShell استفاده کرد.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse

پس از اجرای دستور بالا، می توان مشاهده کرد که پوشه فرعی شامل پوشه های فرعی تو در تو و پرونده ها را در پوشه مقصد ایجاد می کند.

coppy item در powershell
نحوه coppy item در powershell

آموزش دستور PowerShell Copy Item create folder

با استفاده از دستور زیر می‌توان آیتم‌ها را از پوشه منبع کپی و در یک پوشه جدید (NewFolder جدید) در مقصد ذخیره کرد. در اینجا می‌بایست در پارامتر Destination ، باید نام پوشه‌ای مانند زیر را ارائه کرد.

Copy-Item "D:\Source" -Destination "D:\Bijay\Destination\NewFolder" –Recurse
coppy iitem

کپی در فولدر جدید

آموزش دستور PowerShell copy item without folder

به منظور کپی آیتم‌ها و فایل‌ها، بدون پوشه می‌توان از اسکریپت زیر استفاده نمود. باید اشاره کرد که دستور زیر موارد یا پرونده‌ها را فقط از پوشه اصلی کپی می‌نماید و فایل‌ها را از پوشه‌های فرعی کپی نمی‌کند.

Get-ChildItem D:\Source\ -File | Copy-Item -Destination D:\Bijay\Destination

در صورتی که قصد کپی کردن فایل‌ها به صورت بازگشتی از زیرفولدر‌ها باشد، باید از پارامتر -Recurse مانند زیر استفاده کرد.

Get-ChildItem D:\Source\ -File -Recurse | Copy-Item -Destination D:\Bijay\Destination

آموزش دستور PowerShell copy specific file type

برای کپی کردن فایل‌های خاص (به عنوان مثال فایل‌هایی با فرمت PDF) می‌توان از نمونه اسکریپت زیر استفاده کرد.

Copy-Item -Path D:\Source\* -Destination D:\Bijay\Destination -Filter '*.pdf'

کپی فایل با پسوند مشخص
نحوه کپی فایل ها با پسوندی مشخص

آموزش دستور PowerShell copy-item exclude files

هنگامی که از دستور PowerShell copy-item cmdlets برای کپی کردن آیتم‌ها استفاده می‌شود، به وسیله اسکریپت زیر می‌توان برخی از فایل‌ها و بخش‌ها را حذف کرد و مانع از انتقال شد.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude TestPDF.pdf,Test.docx

با استفاده از اسکریپت PowerShell فوق فایل TestPDF.pdf و Test.docx از فهرست حذف و Copy-Item نیز پرونده‌ها را از زیر پوشه‌ها و زیر پوش‌های تو در تو حذف می‌کند. علاوه بر این اسکریپت مربوطه را می‌توان مانند موارد زیر وارد کرد.

مثال1)

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude @("TestPDF.pdf","Test.docx")

مثال 2)

$exclusionFiles = @("TestPDF.pdf","Test.docx")

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles

آموزش دستور PowerShell copy item exclude folder

با استفاده از اسکریپت زیر می‌توان در هنگام کپی کردن آیتم‌ها و فولدرها، برخی از فولدرها را در صورت خواست خارج و حذف کرد.

Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Subfolder')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force

به این ترتیب هنگام کپی کردن، پوشه فرعی از Source حذف می‌شود. اما اگر بخواهیم چندین پوشه را حذف کنیم، (مثلاً می‌خواهیم نام پوشه‌ها را به عنوان Folder1 ،Folder2 حذف کنیم) ،باید از اسکریپت زیر استفاده شود.

Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Folder1', 'Folder2')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force

item exclude
آموزش حذف چند فولدر در حین کپی

آموزش دستور PowerShell copy item exclude (Files and Folders)

در این دستور نیز می‌توان در هنگام کپی کردن، فایل‌ها و فولدرها را به همراه هم در میان آنها خارج و حذف کرد.

Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Folder1', 'Test.docx')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force

آموزش دستور PowerShell copy-item exclude file types

برای حذف کردن یا به قولی مستثنی کردن انواعی از فایل‌ها در کپی کردن می‌توان از اسکریپت زیر استفاده نمود. در مثال زیر اسکریپت به شکلی نوشته شده است که امکان کپی کردن فایل‌های PDF وجود نداشته باشد.

$exclusionFiles = @("*.pdf")

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles

در اینجا فایل های pdf از پوشه‌های فرعی و زیر پوشه‌های تو در تو در هنگام کپی کردن پرونده‌ها حذف می‌شوند.

حذف چند فایل و فولدر در حین کپی
حذف چند فایل و فولدر در حین کپی

همچنین اگر بخواهیم بیشتر از یک نوع فایل را مستثنی یا حذف نماییم، می‌توان از اسکریپت زیر استفاده نمود. در اینجا برای مثال فایل‌هایی با پسوند pdf و txt حذف شده‌اند.

$exclusionFiles = @("*.pdf","*.txt")
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles

آموزش دستور PowerShell copy-item exclude empty folders

در این اسکریپت در هنگام کپی کردن پوشه خالی به مقصد انتقال نمی‌یابد. به این ترتیب این اسکریپت همه پوشه‌ها و فولدرها ارزیابی می‌کند و مانع از انتقال نمونه‌های خالی می‌شود.

$Source = "D:\Source\"

$items = Get-ChildItem $Source -Force
$Destination="D:\Bijay\Destination\"
ForEach ($item in $items)
{
if((Get-ChildItem -Path $($item.FullName)).Count -gt 0)
{
Copy-Item -Path $item.FullName -Destination $Destination -Force -Recurse
}
}

عدم کپی فولدر های خالی
عدم کپی فولدر های خالی

آموزش دستور PowerShell copy-item exclude hidden files

در بسیاری از مواقع که نمی‌خواهیم فایل‌های مخفی شده و یا به اصطلاح hidden شده کپی گردد، می‌توان از اسکریپت زیر استفاده کرد. به این ترتیب فولدرهای مخفی کپی نمی‌شوند.

ForEach ($FileItem in (gci -Path 'D:\Source' -Recurse))
{ Copy-Item $FileItem.FullName -Destination 'D:\Bijay\Destination' }

آموزش دستور PowerShell copy item exclude existing files

این دستور فرآیند کپی کردن را بررسی می‌کند و در صورتی که فایل یا پوشه‌ای در مقصد وجود داشته باشند، آن فایل یا پوشه را کپی نمی‌کند و تنها در صورتی که در مقصد این مورد نباشد، انجام می‌گردد. برای انجام این دستور می‌توان از اسکریپت زیر استفاده نمود.

$sourceFile = 'D:\Source\Test.docx'
$destinationFile = 'D:\Bijay\Destination\Test.docx'
if (-not (test-path $destinationFile))
{
Copy-Item $sourceFile -Destination $destinationFile
}

اسکریپت PowerShell زیر هر فایل موجود در پوشه را بررسی می‌نماید و اگر پرونده در پوشه مقصد وجود داشته باشد، آن را کپی نمی‌کند. در غیر این صورت پرونده در پوشه مقصد کپی می‌گردد. همچنین پرونده‌ها از نظر پوشه ها و زیر پوشه ها نیز بررسی می‌شوند.

$Source = "D:\Source\"

$items = Get-ChildItem $Source -Force
$Destination="D:\Bijay\Destination\"
ForEach ($item in $items)
{
$destinationFile = $Destination+$item.FullName
if (-not (test-path $destinationFile))
{
Copy-Item -Path $item.FullName -Destination $Destination -Force -Recurse
}
}

آموزش دستور PowerShell copy item overwrite

به طور پیش فرض، وقتی با استفاده از دستور زیر آیتمی کپی شود، آن مورد در مقصد انتقال می‌یابد.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse

این اسکریپت برای فایل‌ها کاملا درست به کار می‌رود، اما برای فولدرها خطا ایجاد می‌کند.

coppy کردن فایل های تکراری با پاورشل
نحوه overwrite file در پاورشل

می‌توان با افزودن پارامتر Confirm: $ true مانند زیر یک پیام تأیید اضافه کرد و به این ترتیب وقتی اسکریپت PowerShell زیر اجرا می‌گردد، سیستم درخواست تایید می‌کند.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse -Confirm:$true -Force

آموزش دستور PowerShell copy-item overwrite directory

برای برطرف کردن خطای فوق در دستور PowerShell copy-item overwrite directory می‌توان از اسکریپت زیر استفاده کرد.

Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse -Force

آموزش دستور PowerShell copy-item progress

در صورتی که از دستور PowerShell copy-item استفاده شود و قصد ایجاد یک نوار پیشرفت یا progress bar را داشته باشیم، از اسکریپت زیر استفاده می‌گردد.

Function Copy-WithProgress
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Source,
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Destination
)

$Source=$Source.tolower()
$Filelist=Get-Childitem "$Source" –Recurse
$Total=$Filelist.count
$Position=0

foreach ($File in $Filelist)
{
$Filename=$File.Fullname.tolower().replace($Source,'')
$DestinationFile=($Destination+$Filename)
Write-Progress -Activity "Copying data from '$source' to '$Destination'" -Status "Copying File $Filename" -PercentComplete (($Position/$total)*100)
Copy-Item $File.FullName -Destination $DestinationFile
$Position++
}
}

$src="D:\Data\Songs"
$dest="D:\Bijay\Destination"

Copy-WithProgress -Source $src -Destination $dest

به این ترتیب progress bar یا نوار پیشرفت به شکل زیر به وجود می‌آید.

نمایش progress bar در پاورشل حین کپی
نمایش progress bar در پاورشل حین کپی

آموزش دستور PowerShell copy item from network share

با استفاده از اسکریپت زیر ، اجازه کپی آیتم از شبکه داده می‌شود.

$Session = New-PSSession -ComputerName "Server01" -Credential "Domain\username"
Copy-Item "D:\SourceFolder\" -Destination "C:\DestinationFolder\" -ToSession $Session

همچین اگر بخواهیم به صورت بازگشتی کپی کنیم باید پارامتر -Recurse اضافه گردد.

$Session = New-PSSession -ComputerName "Server01" -Credential "Domain\username"
Copy-Item "D:\SourceFolder\" -Destination "C:\DestinationFolder\" -ToSession $Session -Recurse

آموزش دستور PowerShell copy item Merge multiple folders

حال با کاربرد اسکریپت زیر می‌توان چندین پوشه را هنگام استفاده از cmdletهای PowerShell Copy-Item ادغام کرد.

Copy-Item -Path D:\Source\*,D:\Source1\*,D:\Source2\* -Destination D:\Bijay\Destination\

اسکریپت PowerShell فوق همه پرونده‌ها را از پوشه های Source ، Source1 و Source2 در پوشه Destination کپی می کند.

آموزش دستور PowerShell copy item and rename the file

هنگام کپی کردن فایل با استفاده از Copy-Item، می‌توان نام آن را نیز تغییر داد و این کار با اسکریپت PowerShell زیر را انجام می‌شود.

Copy-Item -Path D:\Source\Test.docx -Destination D:\Bijay\Destination\NewTest.docx

در اینجا فایل Test.docx در پوشه Destination با نام جدید کپی می‌شود و نام فایل NewTest.docx خواهد بود.

جمع بندی

در این مقاله آموزش ویندوز از سری مقالات آموزش سیستم عامل نحوه کار با کپی آیتم در پاورشل را آموزش دادیم، امیدواریم با استفاده از این دستورات بتوانید از این ابزار بیشترین استفاده را داشته باشید.