2016-10-20 6 views
0

Powershellのルーキーなので、ファイルをコピーする必要があります。これはサーバーAまたはB(どちらも決して両方ではない)上にある可能性があります これはどちらのサーバーにもあります。私はそれをserverXにコピーする必要があります2〜4台のサーバのどれがファイルを持っているかを確認します。それをpowershellを使ってコピーしてください。

これまでのところ、これは私が知っていることではありませんが、誰も私を正しい方向に向けることができますか?

$source = "\\serverA\path\file.txt" 
$source2 = "\\serverB\path\file.txt" 
$destination = "\\serverX\path\file.txt" 

IF (!(Test-Path $source) 
{Copy-Item -Path $source -Destination $destination 
} 
ELSE 
(!(Test-Path $source2) 
{Copy-Item -Path $source2 -Destination $destination 
} 

ありがとうございました!

+0

このコードは機能しませんか?そうでない場合、どのように壊れていますか?どのような方法であなたは立ち往生していますか?ある時点で – alroc

+0

。サーバーAまたはBまたはCまたはDのいずれかにファイルが存在する可能性があります。 ServerXに見つけてコピーして、2つを見つけて、4つの可能なソースを調べることができます。 – user3191894

+1

'@($ source、$ source2、)| {test-path $ _})'はあなたにアクセス可能なパスの収集これを 'copy-item'に直接渡すこともできますし、最後に明示的な' [0] 'を追加して最初のものだけを取得することもできます。 –

答えて

1

test-pathステートメントで "not"演算子を使用すると、ファイルがでない場合は、が存在する場合、条件の評価は真です。したがって、コピーするファイルがないため、copy-itemコマンドは失敗しています。

IF (Test-Path $source){} 
ELSE (Test-Path $source2){} 
+0

おかげで帽子は私が最初に試したことです、他のresoinsesのおかげで、あまりにもpocessを改善し、学ぶ – user3191894

1
#Don't use the Not operator 
IF (Test-Path $source) instead of 
IF (!(Test-Path $source) 
#otherwise it returns false and you don't come to the part where the file 
#would get copied 

私はこのようにそれを行うだろう:

評価は、ファイルが存在する場合、次のコードブロックを実行するとなるようならば、他から「ない」演算子を削除

$paths = @("\\serverA\path\file.txt","\\serverB\path\file.txt") 
$destination = "\\serverX\path\file.txt" 

foreach ($path in $paths){ 
    if (Test-Path $path){ 
     Copy-Item -Path $path -Destination $destination 
     break 
    } 
} 

すべてのパスを配列にスローし、foreachを使用してパスを反復処理します。ファイルがすでに見つかってコピーされている場合は、このループからブレークする必要があります。

関連する問題