默认参数集不是 运行 通过 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
不存在时添加额外的逻辑。
当我运行这个函数没有指定计数参数时,它要求源,这是预期的,然后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
不存在时添加额外的逻辑。