Этот меня поставил в тупик. Я уже искал «копируемый элемент не может привязать аргумент к параметру '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», но я не могу его найти. Пожалуйста, не стесняйтесь продемонстрировать мое невежество ....