Powershell 当列出的对象不存在时,使用通配符没有错误
在执行以下命令时:Powershell 当列出的对象不存在时,使用通配符没有错误,powershell,powershell-4.0,Powershell,Powershell 4.0,在执行以下命令时:get process-name nosuchprocess,我获取并出错找不到名为“nosuchprocess”的进程,这很好 但是在这之后:getprocess-name nosuchprocess*,没有错误,没有输出,只有空提示 其他命令也可以观察到相同的行为(get item,get childitem,select string) 这背后的想法是什么?在这两种情况下都找不到对象,那么为什么输出不同呢?这只是惯例 假设您知道一个对象的实际名称,并且试图获取该对象,您希
get process-name nosuchprocess
,我获取并出错找不到名为“nosuchprocess”
的进程,这很好
但是在这之后:getprocess-name nosuchprocess*
,没有错误,没有输出,只有空提示
其他命令也可以观察到相同的行为(get item
,get childitem
,select string
)
这背后的想法是什么?在这两种情况下都找不到对象,那么为什么输出不同呢?这只是惯例 假设您知道一个对象的实际名称,并且试图获取该对象,您希望该对象已经存在。您将获得的预期结果数为1。所以你要么得到1要么得到一个错误。如果您不确定它是否存在,可以使用
测试路径
或使用获取子项[…]-ErrorAction SilentlyContinue
如果您使用的是通配符,则假定您得到的是一个对象集合或一个名称不确定的对象。您甚至可能正在寻找不存在的对象,如gci*.txt
。因此,获取0、1或多个对象通常是完全合乎逻辑的。如果需要测试以查看是否有结果,可以使用Count
属性,如:
$x = Get-ChildItem *.txt;
if ($x.Count -gt 0) { [...] }
不过,请注意,在旧版本的PowerShell(v1、v2)中,即使使用
$x=@(Get ChildItem*.txt)找到0或1个结果,也必须强制将结果设置为数组代码>我猜是因为它无法命名不存在的项,因为它没有特定的进程/文件名