Set WMI property

Welcome Forums General PowerShell Q&A Set WMI property

This topic contains 5 replies, has 4 voices, and was last updated by

2 years, 4 months ago.

  • Author
  • #23529

    Points: 0
    Rank: Member


    What is the best way of setting a WMI property?

    I am trying to enable remote desktop connections using PowerShell. So far I've used this command:

    Get-WMIObject -class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices

    I can see AllowTSConnections = 0, and I want to change this to 1

    I tried using Set-WMIInstance

    Set-WMIInstance -class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices -argument @{AllowTSConnections=1}

    but this throws an error

    format-default : The following exception occurred while retrieving members: "Operation is not valid due to the current state of the object."
        + CategoryInfo          : NotSpecified: [:] [format-default], ExtendedTypeSystemException
        + FullyQualifiedErrorId : CatchFromBaseGetMembers,Microsoft.PowerShell.Commands.FormatDefaultCommand

    Is there another way of doing this? I can see the property AllowTSConnections has options of {get;set;} – can I use these to set the value?

  • #23533

    Points: 21
    Rank: Member

    Hi Nick,
    This is what I use to enable remote desktop

    (Get-WmiObject -Namespace "root\cimv2\TerminalServices" -Class Win32_TerminalServiceSetting -ComputerName XXXX).setallowtsconnections(1)

    Or to be a bit more legible you could use

    $computer = Get-WmiObject -Namespace "root\cimv2\TerminalServices" -Class Win32_TerminalServiceSetting -ComputerName XXXX
  • #23534

    Points: 0
    Rank: Member

    Hey Nick

    Try this

    Function Enable-RemoteDesktop {
    [string]$computer = $env:COMPUTERNAME
    $RDP = Get-WmiObject -Class Win32_TerminalServiceSetting `
                -Namespace root\CIMV2\TerminalServices `
                -Computer $Computer `
                -Authentication 6 `
                -ErrorAction Stop
    $result = $RDP.SetAllowTsConnections(1,1)
       if($result.ReturnValue -eq 0) {
       Write-Host "$Computer : Enabled RDP Successfully"
     } else {
       Write-Host "$Computer : Failed to enable RDP"
    } }
    Enable-RemoteDesktop -computer 'pc01'
  • #23583

    Points: 0
    Rank: Member

    Hi, and thanks both for your input – that's exactly what I needed. I have one question though.

    Both use SetAllowTSConnections() – why does one include one number and the other use two eg. SetAllowTSConnections(1) vs SetAllowTSConnections(1,1)

  • #23589

    Points: 21
    Rank: Member

    Hi Nick,
    That's a good question and put me into research mode! I couldn't remember what the Parms were on that so I found this:

    In a nutsell the second number is to set the "ModifyFirewallException" parameter. I don't use it since I have another little patch o logic that handles firewall rules for our desktops/laptops

  • #49983

    Points: 0
    Rank: Member

    I'd just like to update for others that find this post.. I had the same issue with set-wmiinstance and I had success if I piped the gwmi output through to the swmi command. eg:

    Get-WMIObject -class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices | Set-WMIObject -Arguments @{AllowTSConnections=1}

    hope it helps someone

The topic ‘Set WMI property’ is closed to new replies.