PowerShell — Исследуя WMI

Сейчас попробую показать как можно на лету исследовать WMI из PoSH.

Сначала посмотрим доступные классы WMI на этом компьютере:

PS \\vista\PowerShell> Get-WmiObject -List

__SecurityRelatedClass                                      __NTLMUser9X
__PARAMETERS                                                __SystemSecurity
__NotifyStatus                                              __ExtendedStatus
Win32_PrivilegesStatus                                      Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError                           Win32_TSEnvironmentSettingError
Win32_TSSessionDirectoryError                               Win32_TSLogonSettingError
...

Список вообще говоря не маленький, и даже прорисовка его в консоли может отнять порядочно времени🙂 Ctrl+C если надоест😉

Настало время определится с тем что мы хотим получить🙂 Пусть это будет информация о сетевых шарах🙂
Уточняем запрос (конструкция $_ обозначает обьект передаваемый по пайпу, в данном случае сюда будет по очереди подставлятся каждый обьект WMI выдаваемый командой Get-WmiObject и сравниваться с маской):

PS \\vista\PowerShell> Get-WmiObject -List|where{$_ -like "*share*"}

Win32_ShareToDirectory                                      Win32_Share
Win32_LogicalShareAccess                                    Win32_LogicalShareSecuritySetting
Win32_SecuritySettingOfLogicalShare                         Win32_ConnectionShare
Win32_PrinterShare                                          Win32_LogicalShareAuditing

Уже легче, посмотрим например на Win32_Share:

PS \\vista\PowerShell> Get-WmiObject win32_share

Name                                    Path                                    Description
----                                    ----                                    -----------
IPC$                                                                            Remote IPC
ADMIN$                                  C:\WINDOWS                              Remote Admin
C$                                      C:\                                     Default share

Почти как net use?😉 Но на самом деле тут есть еще кое-что… Но вот как бы выяснить что?😉
Get-Member позволяет посмотреть устройство чего угодно — он выводит доступные свойства и методы любого объекта передаваемого по пайпу.

PS \\vista\PowerShell> Get-WmiObject win32_share | Get-Member

   TypeName: System.Management.ManagementObject#root\cimv2\Win32_Share

Name                MemberType   Definition
----                ----------   ----------
GetAccessMask       Method       System.Management.ManagementBaseObject GetAccessMask()
SetShareInfo        Method       System.Management.ManagementBaseObject SetShareInfo(Syste...
AccessMask          Property     System.UInt32 AccessMask {get;set;}
AllowMaximum        Property     System.Boolean AllowMaximum {get;set;}
Caption             Property     System.String Caption {get;set;}
Description         Property     System.String Description {get;set;}
InstallDate         Property     System.String InstallDate {get;set;}
MaximumAllowed      Property     System.UInt32 MaximumAllowed {get;set;}
Name                Property     System.String Name {get;set;}
Path                Property     System.String Path {get;set;}
Status              Property     System.String Status {get;set;}
...

Если что то не слишком понятно, можно легко ознакомиться на примере:

PS \\vista\PowerShell> Get-WmiObject win32_share | select -First 1 | Format-List *

Status           : OK
Type             : 2147483651
Name             : IPC$
...

Сначала был выбран только первый объект (вместо всей кучи шар которая нам сейчас пока не нужна) а затем выведены все (так как маска «*») его свойства, в виде списка.

Ну и теперь что нибудь осмысленное (шары с компьютера 2k3r2, указывающие на раздел c:\):

PS \\vista\PowerShell> Get-WmiObject win32_share -ComputerName 2k3r2 | where {$_.path -like "c:\*"}

Name                                    Path                                    Description
----                                    ----                                    -----------
C$                                      C:\                                     Default share
CertEnroll                              C:\WINDOWS\system32\CertSrv\CertEnroll  Certificate Services share
ADMIN$                                  C:\WINDOWS                              Remote Admin
DLOAgent                                C:\Program Files\Symantec\Backup Exe... Symantec DLO Share
Shared documents                        C:\Shared documents
Public                                  C:\DFSRoots\Public
SYSVOL                                  C:\WINDOWS\SYSVOL\sysvol                Logon server share
NETLOGON                                C:\WINDOWS\SYSVOL\sysvol\xdomain.loc... Logon server share

Да, и кстати, иногда удобно посмотреть какие то вещи в виде обычной, не текстовой таблицы, для этого можно применить скрипт Out-DataGridView, взять можно вот отсюда:

Опубликовано в PowerShell. Комментарии к записи PowerShell — Исследуя WMI отключены
%d такие блоггеры, как: