以下のPowerShell 3スクリプトの場合、Format-Tableはすべてのプロパティを列として一覧表示しませんが (スキップしますNoRemove
)、Format-Listは一覧表示し、 Select-Objectを使用してプロパティをそこに強制できます。
Out-GridViewは と同じように動作し、Format-Table
スキップもしますNoRemove
何故ですか?
注:これは、列を推測するために配列内の最初のオブジェクト以上のものを検査するWhere-Object
ように見える、はるかに制限の少ない句からのものです。Format-Table
この例は、Channel 9 のハウツー: Print/List installed programs/application s sorted by dateGet-ItemProperty
で、最初の( ) を配列として初期化するのを忘れたため、次gp
のようなエラーが発生しました。
Method invocation failed because [Microsoft.Win32.RegistryKey] doesn't contain a method named 'op_Addition'.
コード例:
$nonUninstallableSoftwareRegistryKeys = (@(Get-Item HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*)) +
(Get-Item HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*) +
(Get-Item HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*) |
Where-Object { $_.ValueCount -eq 1 }
$nonUninstallableSoftwareRegistryKeys.GetType().FullName
$nonUninstallableSoftwareRegistryKeys | Get-Member
$nonUninstallableSoftwareRegistryNameValues = $nonUninstallableSoftwareRegistryKeys |
Get-ItemProperty
$nonUninstallableSoftwareRegistryNameValues.GetType().FullName
$nonUninstallableSoftwareRegistryNameValues | Get-Member
$nonUninstallableSoftwareRegistryNameValues |
Format-Table
$nonUninstallableSoftwareRegistryNameValues |
Format-List
$nonUninstallableSoftwareRegistryNameValues |
Select-Object SystemComponent, NoRemove, PSPath, PSParentPath, PSChildName, PSProvider |
Format-Table
GetType()を使用しました。FullNameおよびGet-Memberを使用して、基になる型を検査します。
$nonUninstallableSoftwareRegistryKeys
インストールされているすべてのソフトウェア (ユーザー、システム x64、およびシステム x86) が、値が 1 つしかないレジストリ キーによってフィルター処理された状態で開始されます (経験的に、これらはアンインストールできないものです)。
出力の最初の部分は、すべての適切なメンバーを持つMicrosoft.Win32.RegistryKey型$nonUninstallableSoftwareRegistryKeys
であることを示しています。したがって、コード補完では表示されなくても、 ValueCountプロパティでWhere-Objectフィルターを実行できます。System.Object[]
$nonUninstallableSoftwareRegistryKeys
また、いくつかのPowerShell "Extended Type System"NoteProperty
プロパティも公開します。Property
これには、キーの下にあるレジストリの名前と値のペアとPS*
、レジストリ プロバイダーからの一連のものが含まれます。
$nonUninstallableSoftwareRegistryNameValues
もSystem.Management.Automation.PSCustomObjectSystem.Object[]
型
になっています。これは、各項目の名前/値のペアをプロパティに展開するGet-ItemPropertyのためです。出力の最初の項目では、SystemComponentプロパティが追加されます。2 番目の項目にはNoRemoveが追加されます。そして、レジストリ プロバイダーからの一連の情報が追加されます。Property
$nonUninstallableSoftwareRegistryKeys
PS*
Format-Table
出力:
SystemComponent PSPath PSParentPath
--------------- ------ ------------
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager Microsoft.PowerShell.Core\Registr...
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\WIC Microsoft.PowerShell.Core\Registr...
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager Microsoft.PowerShell.Core\Registr...
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\WIC Microsoft.PowerShell.Core\Registr...
Format-List
出力:
SystemComponent : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
PSChildName : Connection Manager
PSProvider : Microsoft.PowerShell.Core\Registry
NoRemove : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\WIC
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
PSChildName : WIC
PSProvider : Microsoft.PowerShell.Core\Registry
SystemComponent : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
PSChildName : Connection Manager
PSProvider : Microsoft.PowerShell.Core\Registry
NoRemove : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\WIC
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
PSChildName : WIC
PSProvider : Microsoft.PowerShell.Core\Registry
Select-Object
出力:
SystemComponent NoRemove PSPath PSParentPath
--------------- -------- ------ ------------
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager Microsoft.PowerShell.Cor...
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\WIC Microsoft.PowerShell.Cor...
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager Microsoft.PowerShell.Cor...
1 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\WIC Microsoft.PowerShell.Cor...
編集:私の環境
PS C:\Users\Developer> Get-CimInstance Win32_OperatingSystem | Select-Object Version, Caption | Format-List
$PSVersionTable
Version : 6.2.9200
Caption : Microsoft Windows 8 Pro
Name Value
---- -----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.18051
BuildVersion 6.2.9200.16628
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
これら 2 つは同じテーブルを返します。
$nonUninstallableSoftwareRegistryNameValues |
Format-Table
$nonUninstallableSoftwareRegistryNameValues |
Format-Table *