如何对空变量使用PARAM?

时间:2019-06-19 16:26:45

标签: powershell

我需要通过参数将信息发送到我的脚本,在某些情况下,必须添加所有信息,如果符合此条件,脚本将起作用。如果缺少任何信息,脚本将给出错误。我希望脚本忽略丢失的信息。

示例:

  

script.ps1 -consultlog应用程序-id 1003 -level 4(确定)
  script.ps1 -consultlog应用程序-级别4(失败)

param($consultlog,$id,$level)
$event = Get-WinEvent -FilterHashtable @{
   LogName= $consultlog
   ID= $id
   Level= $level
   StartTime=(Get-Date).AddHours(-24)
} 
$event

1 个答案:

答案 0 :(得分:0)

_ [edit-我最初发布的版本使用.Where()来过滤键/值对……并给出了 dictionary 而不是 hashtable。]

您可以在脚本中添加测试以检查$ Null输入。就像使用[{Get-Help about_Splatting]进行喷涂一样。

param ($consultlog,$id,$level)

# there is almost certainly a more graceful way to do this [*sigh ...*] 
$FilterHT = @{}
if ($consultlog) {$FilterHT.Add('LogName', $consultlog)}
if ($id) {$FilterHT.Add('ID', $id)}
if ($level) {$FilterHT.Add('Level', $level)}
$FilterHT.Add('StartTime', (Get-Date).AddHours(-24))

$event = Get-WinEvent -FilterHashtable $FilterHT

$event

如果您这样称呼...

$FileName.ps1 -consultlog security -id 4624

...此版本实际上返回事件。 [ grin ]注意,它处理了-Level参数。