您对帖子进行了重大更改。以前是:
$name = Read-Host "Please enter the name of person $count"
$length = $name.Length
$pos = $name.IndexOf('\s')
print $pos
让我们忽略$length 行,因为您不使用它。看起来您正在尝试使用正则表达式在第一个空格上进行拆分。您正在使用.IndexOf(),如果您检查重载会看到它需要字符串或字符。不是惊天动地,但关键是它正在寻找字符串文字并且不支持正则表达式。考虑以下陈述
PS C:\Users\Cameron> "John Smith".IndexOf('\s')
-1
PS C:\Users\Cameron> "John\sSmith".IndexOf('\s')
4
第一个返回-1,因为没有找到字符串\s。然后我们把那个字符串放在 John 和 Smith 之间,我们现在得到一个正返回,因为字符串 literal 被匹配了。
您可能尝试做的是使用-split,我基于您的原始问题和编辑。 -split 支持正则表达式。
PS C:\Users\Cameron> $name = "John Smith"
PS C:\Users\Cameron> ($name -split '\s+')[0]
John
第二行代码所做的是将字符串$name 拆分到组 空白处。我们返回了第一个元素,即“John”。第二个没有显示,因为它应该很明显是'Smith'。两个元素都没有尾随或前导空格(仅基于此示例。里程因其他字符串而异。)
另外,命令print 是Out-Printer 的别名。怀疑您的意思是该命令,并且很可能像 Dane Boulton 建议的那样寻找Write-Host 或Write-Output。注意:查找它们以了解重要的区别。前者写入控制台,梯形图写入输出流。
最后一个好的猜测是该错误是由于在调用 $name.IndexOf('\s') 时 $name 为 null 引起的。也很容易模拟。
PS C:\Users\Cameron> $something = $null
PS C:\Users\Cameron> $something.Method()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $something.Method()
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull