如何编写PowerShell脚本从文件服务器复制最新文件到本地?
修复你的PowerShell文件复制脚本
嘿,我帮你梳理下现有脚本里的问题,再给你一个能正常运行的修正版本:
先说说原脚本里的几个小坑:
- 变量名不匹配:你定义了本地目标路径变量
$Path,但在Copy-Item里误用了$LocalPath,这会导致脚本找不到目标位置 Copy-Item参数格式错误:不需要用大括号{}包裹路径,直接用字符串拼接或变量组合即可- 网络共享路径格式问题:网络共享的正确写法是
\\IP地址\共享名,如果是访问磁盘的隐藏共享,要加$(比如D盘的隐藏共享是D$),所以你的远程路径应该写成\\IP_address\D$\Interfaces\(如果Interfaces是D盘下的文件夹) - 凭据未生效:你定义了用户名和密码,但没把它们应用到共享访问里,直接复制大概率会遇到权限问题
修正后的完整脚本(带详细注释)
# 定义网络共享路径:如果Interfaces文件夹是单独共享的,就改成\\IP_address\Interfaces\ [String]$RemoteSharePath = "\\IP_address\D$\Interfaces\" # 生成带当日日期的目标文件名 [String]$FileName = "MK." + (Get-Date).ToString("ddMMyy") + ".tar.gz" # 本地存储文件的目标文件夹 [String]$LocalDestinationPath = "C:\Localfolder" # 访问远程共享的账号信息 [String]$Username = "admin" [String]$Password = "Admin123" # 将明文密码转换为PowerShell认可的安全字符串 $SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force # 创建完整的凭据对象 $Credential = New-Object System.Management.Automation.PSCredential ($Username, $SecurePassword) # 用Join-Path拼接远程文件路径,避免手动加斜杠出现的格式问题 $RemoteFilePath = Join-Path -Path $RemoteSharePath -ChildPath $FileName # 执行文件复制,传入凭据确保权限,-Force参数会覆盖本地同名文件(不需要可删除) Copy-Item -Path $RemoteFilePath -Destination $LocalDestinationPath -Credential $Credential -Force
额外小提示:
- 如果你的远程共享是单独共享的
Interfaces文件夹(不是直接访问D盘),记得把$RemoteSharePath改成\\IP_address\Interfaces\ - 要是不想覆盖本地已有文件,去掉
Copy-Item里的-Force参数就行
内容的提问来源于stack exchange,提问作者Andrej Pit
相关产品推荐
相关产品推荐

