默认参数集不是 运行 通过 if 语句

The Default Parameter Set isn't is running through the if Statement

当我运行这个函数没有指定计数参数时,它要求源,这是预期的,然后return计数开关应该return,但如果我指定计数开关,它 return 就是我请求的信息。

function Get-EventCounts
{
[CmdletBinding(DefaultParameterSetName = "Count")]
param (
    [Parameter(ParameterSetName = "Count", Mandatory = $false)]
    [Switch]$Count,
    [Parameter(ParameterSetName = "Message", Mandatory = $false)]
    [Switch]$Message,
    [Parameter(ParameterSetName = "Message", Mandatory = $true)]
    [String]$EventID,
    [Parameter(ParameterSetName = "Message", Mandatory = $true)]
    [Parameter(ParameterSetName = "Count", Mandatory = $true)]
    [String]$Source,
    [String[]]$DaysBack = ("7", "30", "60")
)

If ($Message)
{
    foreach ($int in $DaysBack)
    {
        $EventList = Get-EventLog System -Source $Source -After (Get-Date).AddDays(- $int) | select EventID, EntryType, TimeGenerated, Message
        $MessageReturn = $EventList | Sort-Object -Property EventID | Where-Object -Property EventID -EQ $EventID
    }
    Return $MessageReturn.Message | Select-Object -Unique
}

If ($Count)
{
    foreach ($int in $DaysBack)
    {
        $EventList = Get-EventLog System -Source $Source -After (Get-Date).AddDays(- $int) | select EventID, EntryType, TimeGenerated, Message

        $UniqueID = $EventList.EventID | Sort | Get-Unique

        foreach ($Event in $UniqueID)
        {
            $Counting = $EventList | Where-Object -Property EventID -Like $Event

            $EventArray += @(
                [PSCustomObject]@{
                    EventID = $Event; TimeFrame = $int; Rate = $Counting.Count; PossibleMessage = $($($eventlist | where-object { $_.EventID -eq $event }))[0].Message
                }
            )
        }
    }
    Return $EventArray
}

}

您似乎在尝试根据参数集名称而不是在使用开关时执行代码。如果是这种情况,那么您可以更改 if 语句条件。

function Get-EventCounts
{
[CmdletBinding(DefaultParameterSetName = "Count")]
param (
    [Parameter(ParameterSetName = "Count", Mandatory = $false)]
    [Switch]$Count,
    [Parameter(ParameterSetName = "Message", Mandatory = $false)]
    [Switch]$Message,
    [Parameter(ParameterSetName = "Message", Mandatory = $true)]
    [String]$EventID,
    [Parameter(ParameterSetName = "Message", Mandatory = $true)]
    [Parameter(ParameterSetName = "Count", Mandatory = $true)]
    [String]$Source,
    [String[]]$DaysBack = ("7", "30", "60")
)

If ($PSCmdlet.ParameterSetName -eq "Message")
{
    foreach ($int in $DaysBack)
    {
        $EventList = Get-EventLog System -Source $Source -After (Get-Date).AddDays(- $int) | select EventID, EntryType, TimeGenerated, Message
        $MessageReturn = $EventList | Sort-Object -Property EventID | Where-Object -Property EventID -EQ $EventID
    }
    Return $MessageReturn.Message | Select-Object -Unique
}

If ($PSCmdlet.ParameterSetName -eq "Count")
{
    foreach ($int in $DaysBack)
    {
        $EventList = Get-EventLog System -Source $Source -After (Get-Date).AddDays(- $int) | select EventID, EntryType, TimeGenerated, Message

        $UniqueID = $EventList.EventID | Sort | Get-Unique

        foreach ($Event in $UniqueID)
        {
            $Counting = $EventList | Where-Object -Property EventID -Like $Event

            $EventArray += @(
                [PSCustomObject]@{
                    EventID = $Event; TimeFrame = $int; Rate = $Counting.Count; PossibleMessage = $($($eventlist | where-object { $_.EventID -eq $event }))[0].Message
                }
            )
        }
    }
    Return $EventArray
}
}

如果您真的想根据开关做出决定,那么您需要为 $Count 设置一个默认值,或者在 $Count 不存在时添加额外的逻辑。