2017-04-21 87 views
0

我在寫一個函數來收集日誌進行分析。功能內的PowerShell 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

該代碼將無法正常工作。

我想你的意思是在$ LOGS中定義一個數組,但實際上只定義了一個字符串。

試試這個:$LOGS = "CcmExec.log", "Scheduler.log", "WUAHandler.log"

而且它看起來像你想的地方複製這些3個文件,但你正在做的是設置變量$文件中的每個轉向別的東西。聲明$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。接受我的回答,它比馬丁·布蘭德的更漂亮;) 只是在開玩笑,兩種工作,選擇一個你喜歡的。 – 30000MONKEYS

+0

我沒有立場,不能推動這些可愛的答案!這是一個很好的答案,並且在一個月的午餐時間裏閱讀Powershell,我會把我的頭腦放在這些概念上。 – 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-$_" 
    } 
} 

注:您應該在功能可能重命名爲Copy-LogsToLocal或東西...

+0

謝謝Martin,我知道我做錯了什麼,你的解釋和更正的代碼奇妙地工作。 – RJC

+0

不客氣。請考慮接受答案。 –