9

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

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

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

4

3 回答 3

12

您可以只测试$args变量或$args.count查看传递给脚本的变量数量。

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

于 2013-09-04T07:35:37.037 回答
2

如果变量被声明param()为整数,那么即使没有为参数指定值,它的值也将为“0”。为防止您必须将其声明为可为空:

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

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

于 2019-04-17T15:32:17.873 回答
2

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

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

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

if (!$args[0]) { Write-Host "Null" }
于 2021-02-23T15:09:52.047 回答