我有一个简单的任务,即从一个路径获取文件,然后使用PowerShell脚本将其复制到另一个路径。现在,我知道使用Get-ChildItem
,如果未指定-Path
,它将获得当前目录。我正在使用此代码,设置文件所在的目录,但仍在获取当前目录:
$file = Get-ChildItem -Path "\\w102xnk172\c$\inetpub\wwwroot\PC_REPORTS\exemplo\DCT\Files\STC" | Sort-Object LastWriteTime | Select-Object -Last 1
Copy-Item $file -Destination "\\Brhnx3kfs01.vcp.amer.dell.com\brh_shipping$\DEMAND_MONITOR\"
cmd /c pause | out-null
暂停时返回此错误:
这是脚本,遵循Get-ChildItem和Copy-Item的文档中的规则。我想念什么吗?为什么仍然获取当前目录?我尝试了多种语法差异,使路径脱离逗号,而不是设置-Path或-Destination,直接在Copy-Item中设置文件,而不使用$file
变量...
答案 0 :(得分:2)
Copy-Item
期望将[string]
作为第一个位置参数-因此它将尝试将$file
转换为字符串,这将导致文件的 name
引用文件的FullName
属性值(完整路径):
Copy-Item $file.FullName -Destination "\\Brhnx3kfs01.vcp.amer.dell.com\brh_shipping$\DEMAND_MONITOR\"
或将$file
对象传送到Copy-Item
,然后让管道绑定为您完成其神奇的工作:
$file |Copy-Item -Destination "\\Brhnx3kfs01.vcp.amer.dell.com\brh_shipping$\DEMAND_MONITOR\"
如果您想亲自了解Powershell在内部如何处理此问题,请使用Trace-Command
:
Trace-Command -Name ParameterBinding -Expression {Copy-Item $file -Destination "\\Brhnx3kfs01.vcp.amer.dell.com\brh_shipping$\DEMAND_MONITOR\"} -PSHost