Examples of Queries + Function, with[out] arguments using [WMI] [WMISEARCHER] Tag and [GCIM -> ICIM], [GWMI-> IWMI] some main differences between gwmi - gcim iwmi doesn't support QUERY parameter we can short `-args...` to `-Ar`, `-Path` to `-P` Args in GCIM are like @{ProductKey=$KEY}, compared to $KEY in GWMI `G*** -filter` And Also `iwmi -path`, accept simple query, where A=B 'G' vs 'I', 'G' use for queries + Invoke, 'I' can be use to invoke only [WMISEARCHER] -> [WMI] Object -> can be use with iwmi Command to invoke function you can use only icim \ iwmi \ [WMI] to invoke instead of pipe [ QUERY | INVOKE ] gwmi \ gcim accept 'static class' as parameters, `iwmi` use -path, `icim` must use query [WMI] tag options: `([WMI]'Win32_OperatingSystem=@')`, `([WMI]"SoftwareLicensingService=''")` - scim `-Property`, can be short to `-A`. swmi `-Arguments`, can be short to `-Ar` *CIM `instance` doesn't allow direct invoke, compared to *WMI `instance`, you can do @(instance).Function() # Solution for Get-Set Static\Non-Static class Code: wmic UserAccount set PasswordExpires=false wmic path win32_UserAccount set PasswordExpires=false *** Static class only swmi Win32_WMISetting -Ar @{LoggingLevel=2} swmi -Path Win32_WMISetting -Ar @{LoggingLevel=2} swmi -Class Win32_WMISetting -Ar @{LoggingLevel=2} gcim win32_UserAccount | scim -Pr @{PasswordExpires=$false} gwmi win32_UserAccount | swmi -Ar @{PasswordExpires=$false} gwmi Win32_UserAccount | % {($_).PasswordExpires=$false;($_).Put()} gcim win32_UserAccount -filter "PasswordExpires=$true" | scim -Pr @{PasswordExpires=$false} gwmi win32_UserAccount -filter "PasswordExpires=$true" | swmi -Ar @{PasswordExpires=$false} gwmi win32_UserAccount -filter "PasswordExpires=$true" | % {($_).PasswordExpires=$false;($_).Put()} scim -Query "Select * from win32_UserAccount" -Pr @{PasswordExpires=$false} gcim -Query "Select * from win32_UserAccount" | scim -Pr @{PasswordExpires=$false} gwmi -Query "Select * from win32_UserAccount" | swmi -Ar @{PasswordExpires=$false} gwmi -Query "Select * from win32_UserAccount" | % {($_).PasswordExpires=$false;($_).Put()} ([WMISEARCHER]"Select * from win32_UserAccount").Get() | swmi -Ar @{PasswordExpires=$false} ([WMISEARCHER]"Select * from win32_UserAccount").Get() | % {($_).PasswordExpires=$False;($_).Put()} # Solution for Function with[out] args, for complex queries Code: ** `[WMI]` -and `iwmi` isn't supported in this case ** ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get().UninstallProductKey() ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get() | iwmi -Name UninstallProductKey ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get() | % {([WMI]$_).UninstallProductKey()} (gwmi -Query "select * from $($CLASS) where ($($FILTER))").UninstallProductKey() icim -Query "select * from $($CLASS) where ($($FILTER))" -Name UninstallProductKey gcim -Query "select * from $($CLASS) where ($($FILTER))" | icim -Name UninstallProductKey gwmi -Query "select * from $($CLASS) where ($($FILTER))" | iwmi -Name UninstallProductKey gwmi -Query "select * from $($CLASS) where ($($FILTER))" | % {$_.UninstallProductKey()} ** `[WMI]` -and `iwmi` isn't supported in this case ** ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get().SetKeyManagementServicePort(1688) ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get() | % {([WMI]$_).SetKeyManagementServicePort(1688)} ([WMISEARCHER]"select * from $($CLASS) where ($($FILTER))").Get() | iwmi -Name SetKeyManagementServicePort -Ar 1688 (gwmi -Query "select * from $($CLASS) where ($($FILTER))").SetKeyManagementServicePort(1688) icim -Query "select * from $($CLASS) where ($($FILTER))" -Name SetKeyManagementServicePort -Ar @{PortNumber=([UInt32]1688)} gcim -Query "select * from $($CLASS) where ($($FILTER))" | icim -Name SetKeyManagementServicePort -Ar @{PortNumber=1688} gwmi -Query "select * from $($CLASS) where ($($FILTER))" | iwmi -Name SetKeyManagementServicePort -Ar 1688 gwmi -Query "select * from $($CLASS) where ($($FILTER))" | % {$_.SetKeyManagementServicePort(1688)} Solution for Function with[out] args, with simple query [A=B do Func(XYZ)] Code: (gwmi $class | ? ID -EQ $ID).Activate() ([WMI]"$($CLASS).ID='$($ID)'").Activate() iwmi -P "$($CLASS).ID='$($ID)'" -Name Activate (gwmi $CLASS -filter "ID='$($ID)'").Activate() gwmi $CLASS -filter "ID='$($ID)'" | % {$_.Activate()} gwmi $CLASS -filter "ID='$($ID)'" | iwmi -Name Activate gcim $CLASS -filter "ID='$($ID)'" | icim -Name Activate (gwmi -Query "select * from $($CLASS) where ID='$($ID)'").Activate() icim -Query "select * from $($CLASS) where ID='$($ID)'" -Name Activate gwmi -Query "select * from $($CLASS) where ID='$($ID)'" | % {$_.Activate()} gcim -Query "select * from $($CLASS) where ID='$($ID)'" | icim -Name Activate gwmi -Query "select * from $($CLASS) where ID='$($ID)'" | iwmi -Name Activate ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get().Activate() ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get() | iwmi -Name Activate ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get() | % {([WMI]$_).Activate()} (gwmi $class | ? ID -EQ $ID).SetKeyManagementServicePort(1688) ([WMI]"$($CLASS).ID='$($ID)'").SetKeyManagementServicePort(1688) iwmi -P "$($CLASS).ID='$($ID)'" -Name SetKeyManagementServicePort -Ar 1688 (gwmi $CLASS -filter "ID='$($ID)'").SetKeyManagementServicePort(1688) gwmi $CLASS -filter "ID='$($ID)'" | % {$_.SetKeyManagementServicePort(1688)} gwmi $CLASS -filter "ID='$($ID)'" | iwmi -Name SetKeyManagementServicePort -Ar 1688 gcim $CLASS -filter "ID='$($ID)'" | icim -Name SetKeyManagementServicePort -Ar @{PortNumber=1688} (gwmi -Query "select * from $($CLASS) where ID='$($ID)'").SetKeyManagementServicePort(1688) icim -Query "select * from $($CLASS) where ID='$($ID)'" -Name SetKeyManagementServicePort -Ar @{PortNumber=([UInt32]1688)} gwmi -Query "select * from $($CLASS) where ID='$($ID)'" | % {$_.SetKeyManagementServicePort(1688)} gwmi -Query "select * from $($CLASS) where ID='$($ID)'" | iwmi -Name SetKeyManagementServicePort -Ar 1688 gcim -Query "select * from $($CLASS) where ID='$($ID)'" | icim -Name SetKeyManagementServicePort -Ar @{PortNumber=([UInt32]1688)} ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get().SetKeyManagementServicePort(1688) ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get() | % {([WMI]$_).SetKeyManagementServicePort(1688)} ([WMISEARCHER]"select * from $($CLASS) where ID='$($ID)'").Get() | iwmi -Name SetKeyManagementServicePort -Ar 1688 # Solution for Function with[out] args, for static `like` class, SoftwareLicensingService etc Code: ([WMI]"SoftwareLicensingService=''").RefreshLicenseStatus() ([WMISEARCHER]"select * from SoftwareLicensingService").Get().RefreshLicenseStatus() ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | % {([WMI]$_).RefreshLicenseStatus()} ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | iwmi -Name RefreshLicenseStatus icim -Query "select * from SoftwareLicensingService" -Name RefreshLicenseStatus (gwmi SoftwareLicensingService).RefreshLicenseStatus() gwmi SoftwareLicensingService | % {$_.RefreshLicenseStatus()} gwmi SoftwareLicensingService | iwmi -Name RefreshLicenseStatus gcim SoftwareLicensingService | icim -Name RefreshLicenseStatus iwmi -P "SoftwareLicensingService=''" -Name RefreshLicenseStatus iwmi -P "SoftwareLicensingService.Version=''" -Name RefreshLicenseStatus ([WMI]"SoftwareLicensingService=''").InstallProductKey($KEY) ([WMISEARCHER]"select * from SoftwareLicensingService").Get().InstallProductKey($KEY) ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | % {([WMI]$_).InstallProductKey($KEY)} ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | iwmi -Name InstallProductKey -Ar $KEY icim -Query "select * from SoftwareLicensingService" -Name InstallProductKey -Ar @{ProductKey=$KEY} (gwmi SoftwareLicensingService).InstallProductKey($KEY) gwmi SoftwareLicensingService | % {$_.InstallProductKey($KEY)} gwmi SoftwareLicensingService | iwmi -Name InstallProductKey -Ar $KEY gcim SoftwareLicensingService | icim -Name InstallProductKey -Ar @{ProductKey="$($KEY)"} iwmi -P "SoftwareLicensingService=''" -Name InstallProductKey -Ar $KEY iwmi -P "SoftwareLicensingService.Version=''" -Name InstallProductKey -Ar $KEY ([WMI]"SoftwareLicensingService=''").InstallLicense(@([IO.File]::ReadAllText($LicenseFile))) ([WMISEARCHER]"select * from SoftwareLicensingService").Get().InstallLicense(@([IO.File]::ReadAllText($LicenseFile))) ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | % {([WMI]$_).InstallLicense(@([IO.File]::ReadAllText($LicenseFile)))} ([WMISEARCHER]"select * from SoftwareLicensingService").Get() | iwmi -Name InstallLicense -Ar @([IO.File]::ReadAllText($LicenseFile)) icim -Query "select * from SoftwareLicensingService" -Name InstallLicense -Ar @{License="$([IO.File]::ReadAllText($LicenseFile))"} (gwmi SoftwareLicensingService).InstallLicense(@([IO.File]::ReadAllText($LicenseFile))) gwmi SoftwareLicensingService | % {$_.InstallLicense(@([IO.File]::ReadAllText($LicenseFile)))} gwmi SoftwareLicensingService | iwmi -Name InstallLicense -Ar @([IO.File]::ReadAllText($LicenseFile)) gcim SoftwareLicensingService | icim -Name InstallLicense -Ar @{License="$([IO.File]::ReadAllText($LicenseFile))"} iwmi -P "SoftwareLicensingService=''" -Name InstallLicense -Ar @([IO.File]::ReadAllText($LicenseFile)) iwmi -P "SoftwareLicensingService.Version=''" -Name InstallLicense -Ar @([IO.File]::ReadAllText($LicenseFile))
Update thread. Code: -- Add Get-Set class samples -- add samples of gwmi -filter [I didn't notice that option] -- Update references section with another option for [WMI] tag ([WMI]'$class=@'), ([WMI]"$class=''")
I think I found a bug in 'swmi -Path' similar code like this, work: Code: iwmi -P "$($CLASS).ID='$($ID)'" -Name Activate but instead use Invoke I use Set so it is supposed to work the same? nope ... forget it. how is it possible? Fail --> win32_UserAccount.PasswordExpires=False Fail --> win32_UserAccount.PasswordExpires=$False Fail --> win32_UserAccount.PasswordExpires='False' Fail --> win32_UserAccount.PasswordExpires='$False' Code: swmi -Path "win32_UserAccount.PasswordExpires=True" -Ar @{PasswordExpires=$false} swmi -Path "win32_UserAccount.PasswordExpires=$true" -Ar @{PasswordExpires=$false} swmi -Path "win32_UserAccount.PasswordExpires='True'" -Ar @{PasswordExpires=$false} swmi -Path "win32_UserAccount.PasswordExpires='$true'" -Ar @{PasswordExpires=$false} it did work with static-like Class instance Code: swmi Win32_WMISetting -Ar @{LoggingLevel=2} swmi -Path Win32_WMISetting -Ar @{LoggingLevel=2} swmi -Class Win32_WMISetting -Ar @{LoggingLevel=2}