1

这个让我难住了。我已经搜索过“copy-item cannot bind argument to parameter 'path' because it is null”,并找到了几篇帖子,其中的答案涉及修复语法以使第一个参数不为空。据我所知,我的第一个参数不为空,而且类型也正确,但我仍然遇到同样的错误。我还有一个非常相似的脚本在另一台服务器上运行而没有问题,这就是我开发它的模板。

该脚本位于名为“weekly-archive.ps1”的文件中,并由“.\weekly-archive.ps1”在 PowerShell 控制台中调用。

我在 Windows Server 2008 R2 上运行 PowerShell 2.0

这是有问题的脚本段,在使用前包含额外的东西来打印变量:

$pathtosource = "\\domainname\backup\servers\windowsimagebackup\"
$pathtodest = "G:\backup\servers\"
$images = Get-ChildItem $pathtodest
foreach ($_ in $images)
{
    $sourcepathname = $pathtosource + $_
    $destpathname = $pathtodest + $_
    $logresult += "`tSaving '" + $sourcepathname + "' to '" + $destpathname + "' at " + (Get-Date).ToShortTimeString() + ".`n"
    $sourcepathname
    $sourcepathname.GetType()
    $pathtodest
    $pathtodest.GetType()
    Copy-Item $sourchpathname $pathtodest -recurse
    $count += 1
}

这是 $images 中第一个 $_ 的结果输出,显示两个参数都不是 null,并且两个参数实际上都是字符串:

PS D:\Administration> .\weekly-archive.ps1
\\domainname\backup\servers\windowsimagebackup\DC-1

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
G:\backup\servers\
True     True     String                                   System.Object
Copy-Item : Cannot bind argument to parameter 'Path' because it is null.
At D:\Administration\weekly-archive.ps1:80 char:12
+         Copy-Item <<<<  $sourchpathname $pathtodest -recurse
    + CategoryInfo          : InvalidData: (:) [Copy-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CopyItemCommand

我还尝试使用 '-path' 和 '-destination' 标志,因为 AFAIK 是可选的。如果我用文字字符串替换脚本中 copy-item 行中的 '$sourcepathname' ,则不会出现错误。

最后,直接输入 PowerShell 控制台的以下行完美运行:

$sourcepathname = "\\domainname\backup\servers\windowsimagebackup\DC-1"
$pathtodest = "G:\backup\servers\"
copy-item $sourcepathname $pathtodest -recurse

所以,我对“$sourcepathname”的使用显然有问题,但我找不到。请不要犹豫,证明我的无知......

4

1 回答 1

2

脚本的 copy-item 行有错字。你有$sourchpathname而且应该是$sourcepathname

于 2013-10-05T01:22:13.447 回答