如何在Powershell中区分空参数和零值参数?

时间:2013-09-04 07:23:42

标签: powershell if-statement null zero

我希望能够将单个int传递给powershell脚本,并且能够告诉何时没有传递任何变量。我的理解是,以下内容应该确定参数是否为空:

if (!$args[0]) { Write-Host "Null" }
else { Write-Host "Not null" }

这很好用,直到我尝试将0作为int传递。如果我使用0作为参数,Powershell会将其视为null。什么是能够区分参数为空或零值的正确方法?

3 个答案:

答案 0 :(得分:8)

您只需测试$args变量或$args.count即可查看将多少变量传递给脚本。

另一件事$args[0] -eq $null$args[0] -eq 0!$args[0]不同。

答案 1 :(得分:1)

如果变量在param()中声明为整数,则即使未为参数指定值,其值也将为'0'。为防止您必须将其声明为可为空:

param([AllowNull()][System.Nullable[int]]$Variable)

这将允许您使用If ($Variable -eq $null) {}进行验证

答案 2 :(得分:0)

如果像我这样的用户来自 Google 并且想知道如何处理空命令行参数,这里有一个可能的解决方案:

if (!$args) { Write-Host "Null" }

这会检查 $args 数组。如果要检查数组的第一个元素(即第一个 cmdline 参数),请使用 OP 中的解决方案:

if (!$args[0]) { Write-Host "Null" }