在您的示例中:
$logged_on_user = get-wmiobject win32_computersystem | select username
使用单个属性 - 用户名创建一个新的 PSCustomObject。当您执行以下操作时:
$A = $logged_on_user.username
您将 PSCustomObject 的用户名属性的返回值分配给变量 $A。因为用户名属性的返回类型是字符串,所以 $A 也将是字符串。
执行以下操作时:
$cs = get-wmiobject win32_computersystem
如果您将 $cs 分配给一个新变量,如下所示:
$newVariable = $cs
然后 $newVariable 将引用与 $cs相同的对象,因此在 $cs 上可访问的所有属性和方法也将在 $newVariable 上访问。
如果在将返回值分配给另一个变量时未指定对象的任何属性或调用任何方法,则返回值是对象本身,而不是对象的某个属性或方法的返回值。
附加信息,但与问题没有直接关系:
当您将 get-wmiobject 的输出通过管道传输到 select-object 时,如下所示:
$cs = get-wmiobject win32_computersystem | select-object *
变量 $cs 的类型是:PSCustomObject 而不是 ManagementObject(当您不通过管道传输到 Select-Object 时),它具有与通过管道传输的 ManagementObject 所做的所有相同的属性及其值。
因此,如果您只需要 ManagementObject 包含的属性值,则无需将输出通过管道传输到 Select-Object,因为这只会使用 MangementObject 中的值创建一个新对象(PSCustomObject 类型)。当您想要选择正在通过管道输入的对象的属性子集,或者想要创建具有通过表达式计算的不同属性的新 PSCustomObject 时,Select-Object 很有用。