我正在编写一个收集日志进行分析的函数。
我正在尝试使用变量来保持尽可能紧,但由于某种原因,该函数不会创建,关于括号和变量的呻吟声。
任何帮助都将不胜感激。
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"
此外,您将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
或其他内容......
答案 1 :(得分:0)
该代码不起作用。
我认为你的意思是在$ LOGS中定义一个数组,但实际上你只定义了一个String。
试试这个:$LOGS = "CcmExec.log", "Scheduler.log", "WUAHandler.log"
此外,您似乎正在尝试将这3个文件复制到某处,但您正在做的是将var $文件设置为其他内容。语句$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
}
}
我也删除了一些错别字。
那是对的吗?