2017-04-21 29 views
0

私は分析のためのログを収集する関数を書いています。関数内のforeach foreach

私は可能な限りタイトに保つために変数を使用しようとしていますが、何らかの理由で関数が作成されず、かっこと変数についてうわさされます。

どのような援助をいただければ幸いです。

FUNCTION GetLogs ($CompName) 
{ 
$LOGS = "CcmExec.log,Scheduler.log,WUAHandler.log" 
$CCMPath = "C$\Windows\CCM\Logs" 
$Target = "C:\Temp\Logs" 

foreach (file$ IN $LOGS) {file$ = Copy-Item \\$CompName\$CCMPath\$LOGS $Target\$CompName-$LOGS}  
} 
+0

ファイルの代わりに$ファイル$ –

答えて

0

このコードは動作しません... Copy-LogsToLocalか何かにあなたの関数の名前を変更する必要があります。

あなたは$ LOGSで配列を定義するつもりですが、実際にはただ1つの文字列を定義していると思います。あなたがどこかにこれらの3つのファイルをコピーしようとしているが、何をやっていることのvar $ファイルに何か他のものへの各ターンを設定しているようにもそれが見えます$LOGS = "CcmExec.log", "Scheduler.log", "WUAHandler.log"

はこれを試してみてください。ステートメント$file In $LOGSは、変数$ fileがループの最初に "CcmExec.log"になり、 "Scheduler.log"などとなることを意味します。

だから私はあなたがやりたいと思う何これです:私もいくつかのタイプミスを削除

Function GetLogs ($CompName) { 

$LOGS = "CcmExec.log","Scheduler.log","WUAHandler.log" 
$CCMPath = "C$\Windows\CCM\Logs" 
$Target = "C:\Temp\Logs" 

foreach ($file In $LOGS) { 
     Copy-Item -Path \\$CompName\$CCMPath\$file -Destination $Target\$CompName-$file 
    }  
} 

これは正しいですか?

+0

はい、私は並べ替えについて知っていましたが、私が知らなかったことを知るのに十分ではありませんでした! – RJC

+0

Np。私の答えを受け入れ、それはMartin Brandl'sよりも美しいです;) 冗談で、どちらも好きなものを選んでください。 – 30000MONKEYS

+0

私は立っていないし、これらの素敵な答えをプッシュすることはできません!それは素晴らしい答えであり、私はこれらのコンセプトの周りに頭を浮かべるでしょう。 – RJC

0

あなた$Logsは単なる文字列、文字列ではありません配列ので、あなたはそれを反復処理することができませんです。

$LOGS = "CcmExec.log", "Scheduler.log","WUAHandler.log" 

はまた、あなたが不正な変数に CopyItemの結果を代入され、現在のループ変数を使用しないでください:あなたは、使用していることを修正することができます。あなたの関数は、おそらく次のようになります。

function Get-Logs 
{ 
    Param 
    (
     [string]$CompName 
    ) 

    $logs = "CcmExec.log", "Scheduler.log","WUAHandler.log" 
    $ccmPath = "C$\Windows\CCM\Logs" 
    $target = "C:\Temp\Logs" 

    $logs | ForEach-Object { 
     Copy-Item -Path "\\$CompName\$ccmPath\$_" -Destination "$target\$CompName-$_" 
    } 
} 

注:おそらく

+0

ありがとう、マーティン、私は間違ったことをしていて、あなたの説明と訂正されたコードは素晴らしく働いていることを知っていました。 – RJC

+0

ようこそ。答えを受け入れることを検討してください。 –