脚本函数内部的Powershell Path-not-not-found错误

时间:2012-03-02 05:58:18

标签: powershell

我在Powershell中编写了一个简单的备份脚本,实际上是我的第一个PowerShell脚本,所以我可能会遗漏一些明显的东西。

在命令行中我运行:

PS C:\tmp> $source="C:\tmp\source"
PS C:\tmp> $dest="C:\tmp\dest"
PS C:\tmp> cp "$source\*.txt" "$dest\"

并且一切正常,表现如预期:将所有.txt文件从源代码传递到dest。

当我在script.ps1文件中时,有

copyBackupFiles ("C:\tmp\source", "C:\tmp\dest")
function copyBackupFiles($Source, $Dest)
{
  Copy-Item "$Source\name.*" -Destination "$Dest\"
}

我收到错误     Copy-Item:找不到路径' C:\ tmp \ source C:\ tmp \ dest'因为它不存在。

有关此问题的任何指示?已经花了几个小时上网,没有运气......

1 个答案:

答案 0 :(得分:2)

更改行
copyBackupFiles ("C:\tmp\source", "C:\tmp\dest")

copyBackupFiles "C:\tmp\source" "C:\tmp\dest"

这是因为您传递给参数$source数组有2个项目,但没有值到$ dest。

不幸的是,对于熟悉C#,Java等语言的人来说,这是一个潜在的陷阱。参数不是用逗号分隔的,而是用空格分隔的,就像在例如F#。

你可以看到使用Trace-Command发生的事情:

function test($a, $b) { write-host $a / $b }
Trace-Command -name parameterbinding { test (1, 2) } -PSHost
Trace-Command -name parameterbinding { test 1 2 } -PSHost