Это меня заводит. Я уже искал «copy-item не может привязать аргумент к параметру« путь », потому что он равен нулю» и нашел несколько сообщений, в которых ответ включал исправление синтаксиса, чтобы первый параметр не был нулевым. Насколько я знаю, мой первый параметр не является нулевым, а также имеет правильный тип, и я все равно получаю ту же ошибку. У меня также есть очень похожий скрипт, работающий на другом сервере без проблем, и который был тем шаблоном, с которого я это разработал.copy-item не может связывать аргумент с параметром «путь», потому что он равен нулю
Сценарий находится в файле под названием 'weekly-archive.ps1' и вызывается в консоли PowerShell на. \ Weekly-archive.ps1 '.
Я бегу PowerShell 2.0 на Windows Server 2008 R2
Вот сегмент сценария в вопросе, в комплекте с дополнительным материалом для печати переменных перед использованием:
$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
}
А вот результирующий выходной первый $ _ в $ изображений, показывая, что ни один из аргументов имеет нулевое значение, и оба аргумента фактически строки:
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, являются необязательными. Если я заменил '$ sourcepathname' на строку экземпляра экземпляра в скрипте с литеральной строкой, ошибки не будет.
Наконец, следующие строки непосредственно ввести в консоли PowerShell работает отлично:
$sourcepathname = "\\domainname\backup\servers\windowsimagebackup\DC-1"
$pathtodest = "G:\backup\servers\"
copy-item $sourcepathname $pathtodest -recurse
Итак, что-то явно не так с моим использованием «$ sourcepathname», но я не могу найти его. Пожалуйста, не стесняйтесь продемонстрировать свое невежество ....
Arghh. Я знаю, что несколько раз проверял орфографию. Извините, что беспокою всех за такую очевидную ошибку. (отключение ....) –
Вы можете включить строгий режим, чтобы найти и избежать таких проблем. См. Http://technet.microsoft.com/en-us/library/hh849692.aspx –
Спасибо @Lars за указание строгого режима. Это исходило, и похоже, это помогло бы. –