0

我正在使用以下代码:

$Folder="C:\Perflogs\BBCRMLogs" # Change the bit in the quotation marks to whatever directory you want the log file stored in

$Computer = $env:COMPUTERNAME
$1GBInBytes = 1GB
$p = "LOTS OF COUNTERS";

# If you want to change the performance counters, change the above list. However, these are the recommended counters for a client machine. 

$dir = test-path $Folder 

IF($dir -eq $False) 
{
New-Item $Folder -type directory
$num  = 0
$file = "$Folder\SQL_log_${num}.csv"
Get-Counter -counter $p -SampleInterval 2 -Continuous | 
    Foreach {
        if ((Get-Item $file).Length -gt 1MB) {
            $num +=1;$file = "$Folder\SQL_log_${num}.csv"
        }
        $_
    } | 
    Export-Counter $file -Force -FileFormat CSV
}
Else
{
$num  = 0
$file = "$Folder\SQL_log_${num}.csv"
Get-Counter -counter $p -SampleInterval 2 -Continuous | 
    Foreach {
        if ((Get-Item $file).Length -gt 1MB) {
            $num +=1;$file = "$Folder\SQL_log_${num}.csv"
        }
        $_
    } | 
    Export-Counter $file -Force -FileFormat CSV
}

但是,即使((Get-Item $file).Length -gt 1MB)is TRUE,它也不会增加文件。我的想法是,Foreach在每次采样时都不会调用循环,因为 Get-Counter 只是被调用一次(然后是持续的)。我不确定我应该使用什么构造来确保它通过那个循环。我是否应该将该特定Foreach语句隔离到另一个部分,而不是依赖它在get-counter? 此 Powershell 脚本由批处理文件调用,然后该get-counter部分在后台运行,收集信息。

4

1 回答 1

1

问题是 $file 变量 onExport-Counter仅在Export-Counter执行时评估一次。将结果通过管道Get-Counter传输到Foreach-Object其中并在其中导出(强制 $file 重新评估),但这将在每次迭代中覆盖输出文件,不幸Export-Counter的是没有 Append 开关。

在我的脑海中,您可以使用 导出到 csv Export-Csv,在 v3 中它支持附加到文件。也就是说,你不会得到相同的 csv 结构。

还有两件事。在脚本的第一次执行中,第一个文件尚未创建,然后您检查它的长度。这会给文件未找到错误,请使用 ErrorAction 参数来抑制错误。

您无需重复代码两次。检查输出目录是否存在,如果不存在则创建它,然后继续执行脚本的其余部分。

$Folder = 'D:\temp'
$num  = 0
$file = "$Folder\SQL_log_${num}.csv"

if( !(test-path $folder)) {New-Item $Folder -type directory}

Get-Counter -counter $p -SampleInterval 2 -Continuous | Foreach {

    if ((Get-Item $file -ErrorAction SilentlyContinue ).Length -gt 1mb) 
    {
        $num +=1
        $file = "$Folder\SQL_log_${num}.csv"
    }

    $_

} | Foreach-Object { $_ | Export-Csv $file -Append} 
于 2013-05-29T19:48:16.157 回答