あなたの例では:
$logged_on_user = get-wmiobject win32_computersystem | select username
単一のプロパティ(username)を使用して新しいPSCustomObjectを作成します。次のことを行う場合:
$A = $logged_on_user.username
PSCustomObjectのusernameプロパティの戻り値を変数$Aに割り当てています。usernameプロパティの戻りタイプは文字列であるため、$Aも文字列になります。
以下を実行する場合:
$cs = get-wmiobject win32_computersystem
次のように$csを新しい変数に割り当てる場合:
$newVariable = $cs
次に、$newVariableは$csが参照するのと同じオブジェクトを参照するため、$csでアクセス可能なすべてのプロパティとメソッドは$newVariableでもアクセス可能になります。
別の変数に戻り値を割り当てるときにプロパティを指定したり、オブジェクトのメソッドを呼び出したりしない場合、戻り値はオブジェクト自体であり、オブジェクトのプロパティまたはメソッドの1つの戻り値ではありません。
追加情報ですが、質問に直接関連していません:
次のように、get-wmiobjectの出力をselect-objectにパイプする場合:
$cs = get-wmiobject win32_computersystem | select-object *
変数$csのタイプはPSCustomObjectであり、(Select-Objectにパイプしない場合のように)ManagementObjectとは対照的に、パイプされたManagementObjectと同じプロパティとその値がすべて含まれます。
したがって、ManagementObjectに含まれるプロパティ値のみが必要な場合は、MangementObjectの値を使用して(PSCustomObject型の)新しいオブジェクトを作成するだけなので、出力をSelect-Objectにパイプする必要はありません。Select-Objectは、パイプインされるオブジェクトのプロパティのサブセットを選択する場合、または式を介して計算されるさまざまなプロパティを使用して新しいPSCustomObjectを作成する場合に役立ちます。