You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Substring提取计算机名提示方法不存在如何解决

报错原因

报错核心是两点:

  1. Select-Object Name 不会返回Name属性的原始字符串值,而是生成一个仅携带Name属性的包装对象,类型为Selected.System.Management.ManagementObject,不属于字符串类型,自然没有字符串类专属的Substring()方法。
  2. 即使拿到正确的字符串,Substring(9,0)的第二个参数代表要截取的字符长度,传0只会返回空值,达不到截取效果。
正确写法

直接访问属性拿字符串值

直接通过对象属性访问拿到纯字符串格式的计算机名,再调用截取方法即可:

# 括号包裹命令后直接取Name属性,返回值为字符串类型
$compname = (Get-WmiObject -Class Win32_ComputerSystem).Name
$compname
# 从索引位置9开始截取到字符串末尾(PowerShell字符串索引从0开始计数)
$compname.Substring(9)
# 如果需要截取固定长度,比如从索引9开始截2个字符,写法为 $compname.Substring(9,2)

提示:Get-WmiObject在PowerShell 5.1及以上版本已被标记为弃用,可替换为更安全的Get-CimInstance,写法为(Get-CimInstance -ClassName Win32_ComputerSystem).Name,返回结果完全一致。

用ExpandProperty参数展开属性

如果习惯用管道传递对象,给Select-Object加-ExpandProperty参数,就能直接输出属性的原始值,而非包装对象:

$compname = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty Name
$compname
$compname.Substring(9)
避坑说明

只要变量的类型名以Selected.开头,就代表这是Select-Object生成的包装对象,无法直接调用原始属性类型的方法,必须先取出属性对应的原始值再操作。
Substring方法的第一个参数是截取起始索引(从0开始计数,不是从1开始),第二个参数为可选的截取长度,不传该参数时默认截取从起始位置到字符串结尾的所有内容。

内容的提问来源于stack exchange,提问作者Jonathan Blaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:27:17