2009-09-03 12 views
3

PowerShellは、リモートコンピュータ(管理者権限を持つ)からローカルコンピュータにファイルをコピーしようとしています。AD 奇妙な場所で失敗します。PowerShell:コピーアイテムがパスを見つけることができません

$configs = Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Filter "*.config" $serverUNCPath 
foreach($config in $configs){ 
    $config_target_dir = $dest.Path + $config.Directory.FullName.Replace($serverUNCPath,"") 
    if(Test-Path -Path $config_target_dir){ 
     Copy-Item $config -Destination $config_target_dir 
    } 
} 

それはメッセージ

Cannot find path 'D:\ServerDeploy\TestMachine1\website\web.config' because it does not exist. 
At :line:39 char:12 
+   Copy-Item <<<< $config -Destination $config_target_dir 

D:\ServerDeploy\TestMachine1\websiteが存在するパスで失敗します。ここでは、スクリプトの抜粋です。私はこれで怒っています。

私はそれを修正するために何ができますか?

答えて

7

eeeeh ....いいですか?私はそれが突然魔法働い

Copy-Item $config.FullName $config_target_dir 

とライン

Copy-Item $config -Destination $config_target_dir 

を交換した場合

....何が与える

+6

PSの実際のオブジェクトを扱っていることを忘れないでください。一般的に言えば、コマンドレットにオブジェクトを渡すとき、コマンドレットは適切なプロパティを選択することができます。この場合、System.IO.FileSystemInfo.FileInfoオブジェクトをCopy-Itemコマンドレットに渡しています。私は、コマンドレットがおそらくデフォルトの.Nameプロパティを使用していると思うし、それはコピーが動作するのに十分な情報ではない。 .FullNameプロパティを明示的にコマンドレットに指定すると、必要な情報が表示されます。 – EBGreen

+0

ええと、それはエラーを説明するだろうが、駄目なエラーメッセージではない。ターゲットの場所が存在しないというエラーとして報告するのはなぜですか? – AndreasKnudsen

+0

Copy-Itemが実行された時点の現在の作業ディレクトリは何ですか?私の推測はD:\ ServerDeploy \ TestMachine1 \ websiteです。 EBGreenと同様に、Copyは$ configを相対パスとして扱います。したがって、(join-path(pwd)$ config.Name)*は完全なソースの場所だと考えます。 –

関連する問題