wmi in PS *AIO* examples.

Discussion in 'Scripting' started by Dark Dinosaur, Jan 15, 2024.

  1. Dark Dinosaur

    Dark Dinosaur X Æ A-12

    Feb 2, 2011
    4,189
    6,018
    150
    #1 Dark Dinosaur, Jan 15, 2024
    Last edited: Jan 17, 2024
    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))
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  2. Dark Dinosaur

    Dark Dinosaur X Æ A-12

    Feb 2, 2011
    4,189
    6,018
    150
    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=''")
    
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  3. Dark Dinosaur

    Dark Dinosaur X Æ A-12

    Feb 2, 2011
    4,189
    6,018
    150
    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}
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  4. abbodi1406

    abbodi1406 MDL KB0000001

    Feb 19, 2011
    17,281
    91,251
    340
    ^ You must use Set-CimInstance for that