これは私の現在のスクリプトがどのように見えるかです:
$cpu = Get-WmiObject win32_processor | select LoadPercentage
logwrite $cpu #this fuction writes $cpu into a .txt file
ファイルの出力は次のとおりです。
@{LoadPercentage=4}
計算できるように数字だけにしてほしい。
これは私の現在のスクリプトがどのように見えるかです:
$cpu = Get-WmiObject win32_processor | select LoadPercentage
logwrite $cpu #this fuction writes $cpu into a .txt file
ファイルの出力は次のとおりです。
@{LoadPercentage=4}
計算できるように数字だけにしてほしい。
qbanet359 の役立つ回答では、結果オブジェクトで直接プロパティ アクセス( ) を使用.LoadPercentage
しています。これは、この場合、最も単純で最も効率的なソリューションです。
PowerShell v3 以降では、メンバー列挙と呼ばれる機能を使用して、オブジェクトのコレクションからプロパティ値を抽出する場合でも機能します。
たとえば、2019 年に実行すると、配列内の各インスタンスのプロパティ値であるand((Get-Date), (Get-Date).AddYears(-1)).Year
が返されます。2019
2018
.Year
[datetime]
大きな入力コレクションitem を item ごとに処理する場合などSelect-Object
、(またはその組み込みエイリアス)を使用したい場合:select
を使用Select-Object
して単一のプロパティ値を抽出するには、次を使用する必要があります-ExpandProperty
。
Get-WmiObject win32_processor | Select-Object -ExpandProperty LoadPercentage
背景:
Select-Object
デフォルトでは
、パラメータを介して指定したプロパティを持つカスタム オブジェクト([pscustomobject]
インスタンス[1]-Property
) を作成します (オプションで、第 1 引数として暗黙的に)。
これは、単一のプロパティ[2]を指定する場合にも適用されるため、select LoadPercentage
(略して: Select-Object -Property LoadPercentage
) は次のオブジェクトのようなものを作成します。
$obj = [pscustomobject] @{ LoadPercentage = 4 } # $obj.LoadPercentage yields 4
Add-Content
ログ ファイルへの書き込みを使用しているため.ToString()
、展開可能な文字列でオブジェクトを使用した場合 (try "$([pscustomobject] @{ LoadPercentage = 4 })"
) と同様に、書き込まれるのはそのカスタム オブジェクトの文字列表現です。
対照的に、単一のプロパティにのみ-ExpandProperty
適用できるparameter は、カスタム オブジェクトを作成せず、代わりに入力オブジェクトからそのプロパティの値を返します。
[1] 厳密に言えば、それらは[System.Management.Automation.PSCustomObject]
インスタンスです。タイプ アクセラレータは、紛らわしいことに、歴史的な理由[pscustomobject]
からタイプを指します。この GitHub の問題[System.Management.Automation.PSObject]
を参照してください。
[2] GitHubSelect-Object
では、単一のプロパティのみを使用して のデフォルトの動作を変更するという、熱く議論されている要求があります。議論は興味深いものですが、現在の動作が変わる可能性は低いです。