这个让我难住了。我已经搜索过“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”的使用显然有问题,但我找不到。请不要犹豫,证明我的无知......