PowerShell foreach 函数内

PowerShell foreach within function

我正在编写一个函数来收集日志以供分析。

我正在尝试使用变量使其尽可能紧凑,但由于某些原因该函数无法创建,关于括号和变量的抱怨。

如有任何帮助,我们将不胜感激。

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}    
}

$Logs 只是一个字符串,而不是一个字符串 array 因此你不能迭代它。您可以使用以下方法修复该问题:

$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 或其他名称...

该代码无效。

我认为您打算在 $LOGS 中定义一个数组,但实际上您只定义了一个字符串。

试试这个:$LOGS = "CcmExec.log", "Scheduler.log", "WUAHandler.log"

另外,您似乎正试图将这 3 个文件复制到某处,但您所做的是每次将 var $file 设置为其他内容。语句 $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
    }    
}

我还删除了一些拼写错误。

差不多吧?