Snadné zjištění informací ze vzdáleného počítače

V předchozím zaměstnání byla naprostou prioritou bezpečnost.  Pracovali jsme tak s izolovanými ostrůvky domén, které byly ze všech stran obehnány firewally. Jako SPLA provider jsme využívali vždy poslední, maximálně předposlední verze všech MS produktů. Oproti tomu v současné firmě se jedná o globální Active Directory forest, se spoustou stromů. Zároveň jsou používány rozličné verze produktů, od nejnovějších i po ty, které jsou těsně před koncem podpory, je nutné poskytovat funkčnost MAC OS X a dalším Apple produktům. Takže je pravda, že se musím učit spoustu nových věcí. Například dnes jsem potřeboval najít nejsnazší způsob, jak zjistit, zdali je nějaký doménový server v LatAm virtuální nebo fyzický.

Jelikož se používají W2003-W2012, u W2003 a W2008 může jít i o x86 systémy, nelze spoléhat na nainstalovaný PowerShell (jakékoliv verze), zjistil jsem, že nejlepším, nejjednodušším řešením je WMI. Konzoli WMI, resp. wmic.exe má snad každý systém od dob WXP, W2003. Díky funkčnímu forestu nemusím řešit autentizaci/autorizaci a koneckonců ani firewall prostupy, protože se pohybuji po vnitřní síti, kde jsou lokality propojeny VPN tunely.

Zpět ke zjištění, zdali je vzdálený počítač virtuálem. V předchozím zaměstnání jsme si identifikaci usnadnili vhodným pojmenováním serveru. Tady je však prioritou v názvu serveru určit lokalitu, v níž se server nachází, poté určení toho serveru a v případě kolize s jiným jménem též číselný identifikátor. Suma sumárum informace o tom, zdali se jedná o virtuál či fyzický stroj, se již do názvu nedostala, nehledě na to, že v rozšiřujícím se počtu P2V či V2V migrací by to stejně ztratilo smysl. Mohl bych totiž chtít rozlišovat, jestli tento virtuál běží pod Hyper-V, ESX či KVM atd. Zjištění tak musí být provedeno ad-hoc.

Vytvořil jsem si jednoduchý baťáček nazvaný getHW,cmd. Obsahuje:

@echo off
rem %1 is server FQDN
rem USAGE: getHW.cmd FQDN
wmic /NODE:"%1" computersystem get Manufacturer, Model

V případě, že bych chtěl tuto informaci získat z nedoménového počítače, musím přidat ještě parametr /USER:domena\uzivatel.

Když jsem se po delší době opět k WMI dostal, tak mi to nedalo, abych se nepodíval, co dalšího zajímavého by se takto dalo zjišťovat – a našel jsem výborný článek na Ask the Performance Team BloguUseful WMIC Queries. Jelikož se mi už mnohokrát stalo, že užitečné informace z uloženého linku zmizely při naprosto nepochopitelném redesignu odkazovaného webu, tak tentokráte nehodlám riskovat a i když se to nemá, tak tu tabulku prostě sprostě ukradnu.

baseboard

get Manufacturer, Model, Name, PartNumber, slotlayout, serialnumber, poweredon

bios

get name, version, serialnumber

bootconfig

get BootDirectory, Caption, TempDirectory, Lastdrive

cdrom

get Name, Drive, Volumename

computersystem

get Name, domain, Manufacturer, Model, NumberofProcessors, PrimaryOwnerName,Username, Roles, totalphysicalmemory /format:list

cpu

get Name, Caption, MaxClockSpeed, DeviceID, status

datafile

where name='c:\\boot.ini' get Archive, FileSize, FileType, InstallDate, Readable, Writeable, System, Version

dcomapp

get Name, AppID /format:list

desktop

get Name, ScreenSaverExecutable, ScreenSaverActive, Wallpaper /format:list

desktopmonitor

get screenheight, screenwidth

diskdrive

get Name, Manufacturer, Model, InterfaceType, MediaLoaded, MediaType

diskquota

get User, Warninglimit, DiskSpaceUsed, QuotaVolume

environment

get Description, VariableValue

fsdir

where name='c:\\windows' get Archive, CreationDate, LastModified, Readable, Writeable, System, Hidden, Status

group

get Caption, InstallDate, LocalAccount, Domain, SID, Status

idecontroller

get Name, Manufacturer, DeviceID, Status

irq

get Name, Status

job

get Name, Owner, DaysOfMonth, DaysOfWeek, ElapsedTime, JobStatus, StartTime, Status

loadorder

get Name, DriverEnabled, GroupOrder, Status

logicaldisk

get Name, Compressed, Description, DriveType, FileSystem, FreeSpace, SupportsDiskQuotas, VolumeDirty, VolumeName

memcache

get Name, BlockSize, Purpose, MaxCacheSize, Status

memlogical

get AvailableVirtualMemory, TotalPageFileSpace, TotalPhysicalMemory, TotalVirtualMemory

memorychip

get BankLabel, Capacity, Caption, CreationClassName, DataWidth, Description, Devicelocator, FormFactor, HotSwappable, InstallDate, InterleaveDataDepth, InterleavePosition, Manufacturer, MemoryType, Model, Name, OtherIdentifyingInfo, PartNumber, PositionInRow, PoweredOn, Removable, Replaceable, SerialNumber, SKU, Speed, Status, Tag, TotalWidth, TypeDetail, Version

memphysical

get Manufacturer, Model, SerialNumber, MaxCapacity, MemoryDevices

netclient

get Caption, Name, Manufacturer, Status

netlogin

get Name, Fullname, ScriptPath, Profile, UserID, NumberOfLogons, PasswordAge, LogonServer, HomeDirectory, PrimaryGroupID

netprotocol

get Caption, Description, GuaranteesSequencing, SupportsBroadcasting, SupportsEncryption, Status

netuse

get Caption, DisplayType, LocalName, Name, ProviderName, Status

nic

get AdapterType, AutoSense, Name, Installed, MACAddress, PNPDeviceID,PowerManagementSupported, Speed, StatusInfo

nicconfig

get MACAddress, DefaultIPGateway, IPAddress, IPSubnet, DNSHostName, DNSDomain

nicconfig

get MACAddress, IPAddress, DHCPEnabled, DHCPLeaseExpires, DHCPLeaseObtained, DHCPServer

nicconfig

get MACAddress, IPAddress, DNSHostName, DNSDomain, DNSDomainSuffixSearchOrder, DNSEnabledForWINSResolution, DNSServerSearchOrder

nicconfig

get MACAddress, IPAddress, WINSPrimaryServer, WINSSecondaryServer, WINSEnableLMHostsLookup, WINSHostLookupFile

ntdomain

get Caption, ClientSiteName, DomainControllerAddress, DomainControllerName, Roles, Status

ntevent

where (LogFile='system' and SourceName='W32Time') get Message, TimeGenerated

ntevent

where (LogFile='system' and SourceName='W32Time' and Message like '%timesource%') get Message, TimeGenerated

ntevent

where (LogFile='system' and SourceName='W32Time' and EventCode!='29') get TimeGenerated, EventCode, Message

onboarddevice

get Description, DeviceType, Enabled, Status

os

get Version, Caption, CountryCode, CSName, Description, InstallDate, SerialNumber, ServicePackMajorVersion, WindowsDirectory /format:list

os

get CurrentTimeZone, FreePhysicalMemory, FreeVirtualMemory, LastBootUpTime, NumberofProcesses, NumberofUsers, Organization, RegisteredUser, Status

pagefile

get Caption, CurrentUsage, Status, TempPageFile

pagefileset

get Name, InitialSize, MaximumSize

partition

get Caption, Size, PrimaryPartition, Status, Type

printer

get DeviceID, DriverName, Hidden, Name, PortName, PowerManagementSupported, PrintJobDataType, VerticalResolution, Horizontalresolution

printjob

get Description, Document, ElapsedTime, HostPrintQueue, JobID, JobStatus, Name, Notify, Owner, TimeSubmitted, TotalPages

process

get Caption, CommandLine, Handle, HandleCount, PageFaults, PageFileUsage, PArentProcessId, ProcessId, ThreadCount

product

get Description, InstallDate, Name, Vendor, Version

qfe

get description, FixComments, HotFixID, InstalledBy, InstalledOn, ServicePackInEffect

quotasetting

get Caption, DefaultLimit, Description, DefaultWarningLimit, SettingID, State

recoveros

get AutoReboot, DebugFilePath, WriteDebugInfo, WriteToSystemLog

Registry

get CurrentSize, MaximumSize, ProposedSize, Status

scsicontroller

get Caption, DeviceID, Manufacturer, PNPDeviceID

server

get ErrorsAccessPermissions, ErrorsGrantedAccess, ErrorsLogon, ErrorsSystem, FilesOpen, FileDirectorySearches

service

get Name, Caption, State, ServiceType, StartMode, pathname

share

get name, path, status

sounddev

get Caption, DeviceID, PNPDeviceID, Manufacturer, status

startup

get Caption, Location, Command

sysaccount

get Caption, Domain, Name, SID, SIDType, Status

sysdriver

get Caption, Name, PathName, ServiceType, State, Status

systemenclosure

get Caption, Height, Depth, Manufacturer, Model, SMBIOSAssetTag, AudibleAlarm, SecurityStatus, SecurityBreach, PoweredOn, NumberOfPowerCords

systemslot

get Number, SlotDesignation, Status, SupportsHotPlug, Version, CurrentUsage, ConnectorPinout

tapedrive

get Name, Capabilities, Compression, Description, MediaType, NeedsCleaning, Status, StatusInfo

timezone

get Caption, Bias, DaylightBias, DaylightName, StandardName

useraccount

get AccountType, Description, Domain, Disabled, LocalAccount, Lockout, PasswordChangeable, PasswordExpires, PasswordRequired, SID

Zdroj: http://blogs.technet.com/b/askperf/archive/2012/02/17/useful-wmic-queries.aspx