2013-10-05 2 views
1

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

ответ

2

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

+0

Arghh. Я знаю, что несколько раз проверял орфографию. Извините, что беспокою всех за такую ​​очевидную ошибку. (отключение ....) –

+3

Вы можете включить строгий режим, чтобы найти и избежать таких проблем. См. Http://technet.microsoft.com/en-us/library/hh849692.aspx –

+0

Спасибо @Lars за указание строгого режима. Это исходило, и похоже, это помогло бы. –

Смежные вопросы