PowerShell copy local files recursively to target server

这是一个PowerShell脚本,用于挂载远程目标服务器共享,并使用指定的用户名/密码凭据将所有文件递归复制到目标共享。最后,它会清理目标共享中的所有孤儿目录和文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A PowerShell script which provides the following:

  • Mount remote/target server share with given username/password credentials.
  • Copy all $SourcePath files to target share ($TargetServer / $TargetShare) recursively.
  • Finally, clean up all orphaned directories/files from target share.

Usage example

Param (
	[string]$SourcePath = ".",
	[Parameter(Mandatory = $true)] [string]$TargetServer,
	[Parameter(Mandatory = $true)] [string]$TargetShare,
	[Parameter(Mandatory = $true)] [string]$Username,
	[Parameter(Mandatory = $true)] [string]$Password
)

Set-StrictMode -Version Latest

$DEPLOY_DRIVE_NAME = "DEPLOY_DRIVE"


# build canonical path to source, target server file share and create user credentials object
$sourceFullPath = (Resolve-Path -LiteralPath $SourcePath).ProviderPath
$targetServerSharePath = Join-Path `
	-Path "\\" `
	-ChildPath (Join-Path -Path $TargetServer -ChildPath $TargetShare)

$userCredential = New-Object `
	-TypeName "System.Management.Automation.PSCredential" `
	-ArgumentList $Username,(ConvertTo-SecureString -String $Password -AsPlainText -Force)

# mount file share
$driveItem = New-PSDrive `
	-Credential $userCredential `
	-Name $DEPLOY_DRIVE_NAME `
	-PSProvider "FileSystem" `
	-Root $targetServerSharePath

# copy source files to target server mount
Copy-Item `
	-LiteralPath (Get-ChildItem -LiteralPath $sourceFullPath).FullName `
	-Destination $targetServerSharePath `
	-Recurse -Force

Write-Output "Copied files from [$sourceFullPath] to [$targetServerSharePath]"

# clean up orphan files/directories from target
$sourceFileList = (Get-ChildItem -LiteralPath $sourceFullPath -Recurse).FullName
$targetServerSharePathLength = $targetServerSharePath.Length

# work over target file list - if target item not in source then delete
foreach ($targetFileItem in (Get-ChildItem -LiteralPath $targetServerSharePath -Recurse)) {
	$targetFilePath = $targetFileItem.FullName

	# translate target path to source path for existance matching
	$translatedTargetToSourcePath = Join-Path `
		-Path $sourceFullPath `
		-ChildPath $targetFilePath.Substring($targetServerSharePathLength)

	if (
		($sourceFileList -notcontains $translatedTargetToSourcePath) -and
		(Test-Path -LiteralPath $targetFilePath -PathType Any)
	) {
		# remove directory/file item
		if ($targetFileItem.PSIsContainer) {
			Remove-Item -LiteralPath $targetFilePath -Recurse -Force
			Write-Output "Deleted orphan directory [$targetFilePath]"

		} else {
			Remove-Item -LiteralPath $targetFilePath -Force
			Write-Output "Deleted orphan file [$targetFilePath]"
		}
	}
}

# unmount file share
Remove-PSDrive -Name $DEPLOY_DRIVE_NAME
Write-Output "Finished"
./remotecopy.ps1 `
	-SourcePath "." `
	-TargetServer "localhost" -TargetShare "myshare" `
	-Username "USERNAME" -Password "PASSWORD"

Copied files from [C:\scripts\myfiles] to [\\localhost\myshare]
Deleted orphan directory [\\localhost\myshare\blurg]
Deleted orphan file [\\localhost\myshare\old-file.txt]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值