Author Posts

October 20, 2013 at 1:52 am

Hi I'm trying to change value of DelayedAckFrequency property from Set-NetTCPSetting function. But it gives an error saying the property is Read-Only. how can I change the property's attributes? Is there a way around it? How can I Fix This problem?

October 20, 2013 at 5:57 am

There's no DelayedAckFrequency property in the MSFT_NetTCPSetting class that I can see. There is a DelayedAckTimeout property, which you set with the -DelayedAckTimeoutMs parameter to the Set-NetTCPSetting cmdlet:

Set-NetTCPSetting -DelayedAckTimeoutMs 10 -SettingName Custom

There is a per-interface registry value called "TcpAckFrequency"; see http://support.microsoft.com/kb/328890 . Is that what you are trying to modify?

October 20, 2013 at 10:05 am

Actually I'm using windows 8.1 RTM. I should have mentioned that but I forgot. in this version TcpAckFrequency doesn't seem to work anymore but instead it's been added to MSFT_NetTCPSetting class. but the problem is that both DelayedAckTimeoutMs and DelayedAckFrequency are read-only and their values can't be changed.
this is what I get with Get-NetTCPSetting :

`
SettingName                   : Automatic
MinRto(ms)                    : 
InitialCongestionWindow(MSS)  : 
CongestionProvider            : 
CwndRestart                   : 
DelayedAckTimeout(ms)         : 
DelayedAckFrequency           : 
MemoryPressureProtection      : 
AutoTuningLevelLocal          : 
AutoTuningLevelGroupPolicy    : 
AutoTuningLevelEffective      : 
EcnCapability                 : 
Timestamps                    : 
InitialRto(ms)                : 
ScalingHeuristics             : 
DynamicPortRangeStartPort     : 
DynamicPortRangeNumberOfPorts : 
AutomaticUseCustom            : 
NonSackRttResiliency          : 
ForceWS                       : 
MaxSynRetransmissions         : 

SettingName                   : InternetCustom
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
DelayedAckFrequency           : 2
MemoryPressureProtection      : Disabled
AutoTuningLevelLocal          : HighlyRestricted
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384
AutomaticUseCustom            : Disabled
NonSackRttResiliency          : Enabled
ForceWS                       : Enabled
MaxSynRetransmissions         : 2

SettingName                   : DatacenterCustom
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
DelayedAckFrequency           : 2
MemoryPressureProtection      : Disabled
AutoTuningLevelLocal          : HighlyRestricted
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384
AutomaticUseCustom            : Disabled
NonSackRttResiliency          : Enabled
ForceWS                       : Enabled
MaxSynRetransmissions         : 2

SettingName                   : Compat
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 2
CongestionProvider            : Default
CwndRestart                   : False
DelayedAckTimeout(ms)         : 200
DelayedAckFrequency           : 2
MemoryPressureProtection      : Disabled
AutoTuningLevelLocal          : HighlyRestricted
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384
AutomaticUseCustom            : Disabled
NonSackRttResiliency          : Enabled
ForceWS                       : Enabled
MaxSynRetransmissions         : 2

SettingName                   : Datacenter
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
DelayedAckFrequency           : 2
MemoryPressureProtection      : Disabled
AutoTuningLevelLocal          : HighlyRestricted
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384
AutomaticUseCustom            : Disabled
NonSackRttResiliency          : Enabled
ForceWS                       : Enabled
MaxSynRetransmissions         : 2

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
DelayedAckFrequency           : 2
MemoryPressureProtection      : Disabled
AutoTuningLevelLocal          : HighlyRestricted
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384
AutomaticUseCustom            : Disabled
NonSackRttResiliency          : Enabled
ForceWS                       : Enabled
MaxSynRetransmissions         : 2
`

and this is the cmdlet that I should use to change the values:

`

Set-NetTCPSetting -DelayedAckFrequency 1 -DelayedAckTimeoutMs 10 -SettingName internetcustom`

Internet and Database Settings are Read-only and I should use InternetCustom Instead. But even in InternetCustom Setting it still doesn't let me change some properties.


Set-NetTCPSetting : Property DelayedAckTimeout is read-only
At line:1 char:1
+ Set-NetTCPSetting -DelayedAckFrequency 1 -DelayedAckTimeoutMs 10 -SettingName in ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (MSFT_NetTCPSett...ystemName = ""):ROOT/StandardCimv2/MSFT_NetTCPSetting) [Set-NetTCPSetting], CimException
+ FullyQualifiedErrorId : Windows System Error 87,Set-NetTCPSetting

October 20, 2013 at 1:30 pm

Ah, I haven't started using Windows 8.1 yet. In Windows 8 / Server 2012, Set-NetTCPSetting only allows you to change the "Custom" setting; all others are read-only. This may be what you're running into in Windows 8.1 when you attempt to modify the "InternetCustom" setting, unless they've changed that limitation.

October 20, 2013 at 11:09 pm

well MSFT_NetTCPSetting is still the same thing. all they've done are mostly modifications and limitations. they've increased the number of setting names for more scenarios. for example instead of custom we now have internetcustom and Datacentercustom and DatacenterCustom can't be modified unless windows is installed on a server. but what bugs me is they've almost made every property in InternetCustom read-only

AutomaticUseCustom, CongestionProvider, CwndRestart, InitialCongestionWindow, MemoryPressureProtection, InitialRto, MinRto, DelayedAckTimeout and DelayedAckFrequency are all read-only. what's funny is people who use Set-NetTCPSetting usually want to change these properties only.

Is there a way I can modify MSFT_NetTCPSetting Class entirely or add another SettingName and force windows to use it or change a specific property's read-only attribute?

October 21, 2013 at 8:04 am

Hopefully someone who's got Windows Server 2012 R2 or Windows 8.1 handy can help out with this. Until I get around to building VMs with those operating systems, I'm really just making guesses.

November 16, 2014 at 12:33 pm

hi I'm bringing this topic up again.
recently I tried to change those properties with Set-wmiInstance and set-CimInstance with no luck. it still doesn't let you change those values.
when I used Set-wmiInstance to modify DelayedAckFrequency in MSFT_NetTCPSetting it gave me something like this:

[blockquote]error: cannot convert property from system.string to system.collections.hashtable[/blockquote]

it gave me the same thing for set-cimInstance with the difference that instead of saying cannot convert from property from system.string to system.collections.hashtable it says:

[blockquote]cannot convert property from system.string to system.collections.IDictionary[/blockquote]

what does that mean?? I'm not trying to convert anything. I'm just trying to change the value of the property that's all.
am I using the wrong commands? if I wanted to change a property that's written in system.string (whatever that means) what commands should I use?
has Microsoft written their whole windows in read-only? why aren't I allowed to change this damn property?? this is so frustrating. I've been stuck at this point forever... since windows 7 to 8 to 8.1 and windows 10 is definitely going to be the same a gauntlet of read-only properties.

November 16, 2014 at 12:39 pm

You didn't post the commands that you entered when you got those errors, but best guess is that you're passing a string value to either the -Arguments parameter (for Set-WmiInstance) or the -Property parameter (for Set-CimInstance). Those parameters take hashtable and IDictionary types, respectively.