Набор параметров по умолчанию не выполняется через оператор if - PullRequest
0 голосов
/ 06 июня 2019

Когда я запускаю эту функцию без указания параметра Count, он запрашивает источник, который ожидается, а затем не возвращает информацию, которую должен вернуть переключатель Count, но если я указываю переключатель Count, он возвращает информацию, которую язапрошено.

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
}

}

1 Ответ

0 голосов
/ 06 июня 2019

Похоже, вы пытаетесь выполнить код на основе имени набора параметров, а не когда используются переключатели.Если это так, то вы можете изменить свои условия оператора 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 отсутствует.

...