首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么参数为空或null

为什么参数为空或null
EN

Stack Overflow用户
提问于 2021-01-21 05:09:28
回答 1查看 49关注 0票数 0

各位,我是Powershell的新手。我的脚本收集Windows事件查看器日志并将数据导出到csv文件。如果输入为空,则使用默认值。但它崩溃了:"Export-Csv:无法验证"Path“参数的实参。该实参为空或为NULL。请指定一个非空、非空的实参,然后再次运行该命令。”能给我解释一下为什么吗?

代码语言:javascript
复制
function exportLogs
{
    [CmdletBinding()]
    param (
        $exportFolder=(Read-Host -prompt "exportFolder"),
        $applicatiomLogs=(Read-Host -prompt "applicationLogs"),
        $systemLogs=(Read-Host -prompt "systemLogs"),
        $fromDate=(Read-Host -prompt "fromDate"),
        $eventTypes=(Read-Host -prompt "eventTypes")
    )

    $comp = $env:computername
    $now=Get-Date

    #check empty input and assign default values
    if (!$exportFolder) { [String]$exportFolder="D:\temp\" }
    if (!$applicationLogs) {
        $applicationLogs="True"
        [System.Convert]::ToBoolean($applicationLogs)    
    }
    if (!$systemLogs) {
        $systemLogs="True"
        [System.Convert]::ToBoolean($systemLogs)
    }
    if (!$fromDate) { [DateTime]$fromDate=$now.AddDays(-30) }
    if (!$eventtypes) { [String[]]$eventtypes=("Error", "Warning") }

    if ($applicationLogs)
    {
        $exportFile = $exportFolder + "applicationLogs_" + $now.ToString("yyyyMMddHHmmss") + ".csv"
        $exportedLog = get-eventlog -ComputerName $comp -log "Application" -After $fromDate -EntryType $eventTypes
        exportCsv($exportedLog, $exportFile)
    }

    if ($systemLogs)
    {
        $exportFile = $exportFolder + "systemLogs_" + $now.ToString("yyyyMMddHHmmss") + ".csv"
        $exportedLog = get-eventlog -ComputerName $comp -log "System" -After $fromDate -EntryType $eventTypes
        exportCsv($exportedLog, $exportFile)
    }
   
}

function exportCsv([String]$exportedLog, [String]$exportFile)
    {
        $el_sorted = $exportedLog | Sort-Object TimeGenerated
        Write-Host Exporting to $exportFile
        $el_sorted|Select MachineName, TimeGenerated, EntryType, Source, Message | Export-CSV $exportFile -NoTypeInfo
    }
EN

Stack Overflow用户

发布于 2021-01-21 05:58:02

尝试此重构...(在Win10的默认Windows Sandbox上运行)

代码语言:javascript
复制
function New-LogExport
{
    Param
    (
        [String]$exportedLog, 
        [String]$exportFile
    )

    $el_sorted = $exportedLog | 
    Sort-Object TimeGenerated
    Write-Host "Exporting to $exportFile"
    
    $el_sorted | 
    Select-Object MachineName, 
    TimeGenerated, 
    EntryType, 
    Source, 
    Message | 
    Export-Csv -Path $exportFile -NoTypeInfo
}

function Start-ExportLogs
{
    [CmdletBinding()]
    param 
    (
        $exportFolder    = (Read-Host -prompt 'exportFolder'),
        $applicatiomLogs = (Read-Host -prompt 'applicationLogs'),
        $systemLogs      = (Read-Host -prompt 'systemLogs'),
        $fromDate        = (Read-Host -prompt 'fromDate'),
        $eventTypes      = (Read-Host -prompt 'eventTypes')
    )

    $comp = $env:computername
    $now  = Get-Date

    if (!$exportFolder) 
    {[String]$exportFolder = 'C:\temp'}

    if (!$applicationLogs) 
    {
        $applicationLogs = 'True'
        [System.Convert]::ToBoolean($applicationLogs)    
    }

    if (!$systemLogs)
    {
        $systemLogs = 'True'
        [System.Convert]::ToBoolean($systemLogs)
    }

    if (!$fromDate)
    {[DateTime]$fromDate = $now.AddDays(-30)}

    if (!$eventtypes)
    {[String[]]$eventtypes = ('Error', 'Warning')}

    if ($applicationLogs)
    {
        $exportFile = "$exportFolder\applicationLogs_$($now.ToString('yyyyMMddHHmmss')).csv"

        $getEventLogSplat = @{
            ComputerName  = $comp
            LogName       = 'Application'
            EntryType     = $eventTypes
            After         = $fromDate
        }
        $exportedLog      = Get-EventLog @getEventLogSplat
        New-LogExport -exportedLog $exportedLog, -exportFile $exportFile
    }

    if ($systemLogs)
    {
        $exportFile = "$exportFolder\systemLogs_$($now.ToString('yyyyMMddHHmmss')).csv"

        $getEventLogSplat = @{
            ComputerName  = $comp
            LogName       = 'System'
            EntryType     = $eventTypes
            After         = $fromDate
        }
        $exportedLog      = Get-EventLog @getEventLogSplat
    }
    New-LogExport -exportedLog $exportedLog -exportFile $exportFile
}

# Results
<#
exportFolder: 
applicationLogs: 
systemLogs: 
fromDate: 
eventTypes: 
True
True
Exporting to C:\temp\applicationLogs_20210120143659.csv
Exporting to C:\temp\systemLogs_20210120143659.csv
#>
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65817696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档