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
が存在するパスで失敗します。ここでは、スクリプトの抜粋です。私はこれで怒っています。
私はそれを修正するために何ができますか?
PSの実際のオブジェクトを扱っていることを忘れないでください。一般的に言えば、コマンドレットにオブジェクトを渡すとき、コマンドレットは適切なプロパティを選択することができます。この場合、System.IO.FileSystemInfo.FileInfoオブジェクトをCopy-Itemコマンドレットに渡しています。私は、コマンドレットがおそらくデフォルトの.Nameプロパティを使用していると思うし、それはコピーが動作するのに十分な情報ではない。 .FullNameプロパティを明示的にコマンドレットに指定すると、必要な情報が表示されます。 – EBGreen
ええと、それはエラーを説明するだろうが、駄目なエラーメッセージではない。ターゲットの場所が存在しないというエラーとして報告するのはなぜですか? – AndreasKnudsen
Copy-Itemが実行された時点の現在の作業ディレクトリは何ですか?私の推測はD:\ ServerDeploy \ TestMachine1 \ websiteです。 EBGreenと同様に、Copyは$ configを相対パスとして扱います。したがって、(join-path(pwd)$ config.Name)*は完全なソースの場所だと考えます。 –