1

次のコードを使用します。

$logged_on_user = get-wmiobject win32_computersystem | select username

値を新しい文字列に出力したい場合は、次のようにします。

$A = $logged_on_user.username

ただし、次のようにすると:

$logged_on_user = get-wmiobject win32_computersystem | select *

..すべての値を新しい「オブジェクト」に割り当てようとするのですか?:

$logged_on_user.items
$logged_on_user.value
$logged_on_user.text
$logged_on_user.propertry

私はそれらすべてを試しましたが、うまくいきません。

誰かアイデアはありますか?

ありがとう

PSこの質問のタイトルが間違っている可能性があります。

4

2 に答える 2

3

あなたの例では:

$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を作成する場合に役立ちます。

于 2012-10-05T17:28:51.473 に答える
0

Get-WmiObjectまたは PowerShell オブジェクトの結果のコピー全般について質問されているかどうかはわかりません。前者の場合、メソッドを提供するインターフェースを実装するクラスGet-WmiObjectのインスタンスを返します。こんな風に使える...ManagementObjectICloneableClone

$computerSystem = Get-WmiObject -Class 'Win32_ComputerSystem';
$computerSystemCopy = $computerSystem.Clone();

上記のコードが実行された後、$computerSystem$computerSystemCopyは同一になりますが、完全に別のManagementObjectインスタンスになります。これを実行して確認できます...

$areSameValue = $computerSystem -eq $computerSystemCopy;
$areSameInstance = [Object]::ReferenceEquals($computerSystem, $computerSystemCopy);

...そして、とで$areSameValueあることに注意してください。$true$areSameInstance$false

于 2012-10-05T20:22:26.833 に答える