2013-10-05 3 views
1

Celui-ci m'a bloqué. J'ai déjà cherché sur "copy-item ne peut pas lier l'argument au paramètre 'path' car il est nul", et a trouvé plusieurs messages où la réponse impliquait de corriger la syntaxe pour que le premier paramètre ne soit pas nul. Au meilleur de ma connaissance, mon premier paramètre n'est pas nul, et est également du type correct, et je reçois toujours la même erreur. J'ai aussi un script très similaire fonctionnant sur un autre serveur sans problèmes, et qui était le modèle que j'ai développé.copy-item ne peut pas lier l'argument au paramètre 'path' car il est nul

Le script se trouve dans un fichier appelé 'weekly-archive.ps1' et est appelé dans la console PowerShell par '. \ Weekly-archive.ps1'.

Je courais PowerShell 2.0 sur Windows Server 2008 R2

Voici le segment de script en question, avec des choses supplémentaires pour imprimer les variables avant de les utiliser:

$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 
} 

Et est ici la sortie résultante pour la première $ _ $ en images, ce qui montre que ni argument est nul, et les deux arguments sont en fait des chaînes:

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 

J'ai aussi essayé d'utiliser le « -path » et les drapeaux «-destination», qui sont AFAIK sont facultatifs. Si je remplace '$ sourcepathname' dans la ligne copy-item dans le script avec une chaîne littérale, il n'y a pas d'erreur.

Enfin, les lignes suivantes dactylographiées directement dans la console PowerShell fonctionnent parfaitement:

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

Donc, quelque chose est clairement mal à mon utilisation de « sourcepathname de $ », mais je ne peux pas le trouver. S'il vous plaît, n'hésitez pas à démontrer mon ignorance ....

Répondre

2

Il y a une faute de frappe sur la ligne de copie du document. Vous avez $sourchpathname et il devrait être $sourcepathname.

+0

Arghh. Je sais que j'ai vérifié l'orthographe plusieurs fois. Désolé de déranger tout le monde pour une erreur aussi évidente. (slinking off ....) –

+3

Vous pouvez activer le mode strict pour trouver et éviter ce genre de problèmes. Voir http://technet.microsoft.com/en-us/library/hh849692.aspx –

+0

Merci @Lars pour souligner le mode strict. Itried it, et il semble que cela aurait aidé. –

Questions connexes