copy-item не может привязать аргумент к параметру 'path', потому что он равен нулю

Этот меня поставил в тупик. Я уже искал «копируемый элемент не может привязать аргумент к параметру 'path', потому что он равен нулю» и нашел несколько сообщений, в которых ответ включал исправление синтаксиса, чтобы первый параметр не был нулевым. Насколько мне известно, мой первый параметр не равен нулю, а также имеет правильный тип, и я все еще получаю ту же ошибку. У меня также есть очень похожий скрипт, который без проблем работает на другом сервере, и это был шаблон, на основе которого я его разработал.

Сценарий находится в файле с именем «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
}

А вот итоговый результат для первого $ _ в $ 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, являются необязательными. Если я заменю «$ sourcepathname» в строке копируемого элемента в скрипте буквальной строкой, ошибки не будет.

Наконец, следующие строки, введенные непосредственно в консоль PowerShell, отлично работают:

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

Итак, что-то явно не так с моим использованием «$ sourcepathname», но я не могу его найти. Пожалуйста, не стесняйтесь продемонстрировать мое невежество ....


person dave_mystic    schedule 05.10.2013    source источник


Ответы (1)


В строке сценария, посвященной копируемому элементу, есть опечатка. У вас есть $sourchpathname, а должно быть $sourcepathname.

person Keith Hill    schedule 05.10.2013
comment
Аххх. Я знаю, что проверял орфографию несколько раз. Извините, что беспокою всех за такую ​​очевидную ошибку. (ускользает ....) - person dave_mystic; 05.10.2013
comment
Вы можете включить строгий режим, чтобы найти и избежать подобных проблем. См. technet.microsoft.com/en-us/library/hh849692.aspx - person Lars Truijens; 07.10.2013
comment
Спасибо @Lars за указание на строгий режим. Я попробовал, и похоже, что это помогло бы. - person dave_mystic; 09.12.2013