Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 当列出的对象不存在时,使用通配符没有错误_Powershell_Powershell 4.0 - Fatal编程技术网

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个结果,也必须强制将结果设置为数组

我猜是因为它无法命名不存在的项,因为它没有特定的进程/文件名