PowerShell - cmdlet如何返回值?

时间:2013-05-29 15:28:00

标签: powershell

请考虑以下PowerShell分配声明:

$rc = (gci -r -fi *.rar)

如果目录结构中存在rar文件,则echo $?将显示以下内容:

    Directory: C:\file tests

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         7/22/2012   7:09 PM    3699776 somefile.rar

精细。现在考虑这个PowerShell if语句:

if (gci -r -fi *.rar)
{
    echo "Rar files found"
}
else 
{
    echo "No rar files"
}

在if语句中,gci cmdlet的返回值被视为布尔值。但是,在早期赋值语句的情况下,来自同一cmdlet的返回产生了一个字符串输出。

我知道PS是一个对象shell。我理解cmdlet根据上下文采取不同的行为。但我不明白这是如何实现的,以及使用了什么机制。

具体来说: if 语句允许从gci返回的语法被用作布尔值的魔力是什么?如果我想在其他地方使用该机制(在if语句之外),我该怎么办?是否有某种“强制转换为布尔”运算符? E.g。

$rc = (Cast following to boolean)(gci -r -fi *.rar)

2 个答案:

答案 0 :(得分:8)

此表为您提供答案。

True                                         False
~~~~                                         ~~~~~
$TRUE                                        $FALSE
Any string of length > 0                     Empty string
Any number ≠ 0                               Any number = 0
Array of length > 1                          Array of length 0
Array of length 1 whose element is true      Array of length 1 whose element is false
A reference to any object  <<<<<             $NULL

这背后的想法是使用类似的检查来验证对象是否正确初始化。

答案 1 :(得分:1)

我认为Powershell只会将null和零视为false,如下所示:

PS > if(1) {"True"} else {"False"}
True
PS > if(0) {"True"} else {"False"}
False
PS > if($null) {"True"} else {"False"}
False

要投射使用以下格式:

PS > [Bool]"1"
True