【发布时间】:2016-10-07 21:06:41
【问题描述】:
我已经编写这个脚本很长一段时间了,但由于我无法花时间在上面,所以不得不搁置它。我现在可以更加专注于它,但它似乎不太正常,希望我能得到一些帮助。
此脚本旨在首先删除 machine.config 中的一个部分,即 ,ProcessModel autoConfig="true"/> 行
$node = $machineConfig.SelectNodes("/configuration/system.web")
$node.RemoveChild(($node.SelectSingleNode("processModel"))) | Out-Null
然后将以下内容写回processModel
<system.web>
<processModel maxWorkerThreads="370" maxIoThreads="370" minWorkerThreads="50" minIoThreads="50"/>
<httpRuntime minFreeThreads="90" minLocalRequestFreeThreads="80"/>
然后这里就有点棘手了,我希望它乘以虚拟机上的 CPU 核心数,然后乘以 90 和 80。例如,如果机器有 4 个内核,它将读取
<system.web>
<processModel maxWorkerThreads="370" maxIoThreads="370" minWorkerThreads="50" minIoThreads="50"/>
<httpRuntime minFreeThreads="360" minLocalRequestFreeThreads="320"/>
之后,在文件的底部,我希望它添加以下行
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "200" />
</connectionManagement>
</system.net>
和上一个一样,我需要将 200 乘以虚拟机的 CPU 内核数。例如,如果机器有 4 个核心,它会读取
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "800" />
</connectionManagement>
</system.net>
我的代码所做的是它写出了 processModel 部分,但它对我来说并没有相乘,而且它似乎没有添加最大连接数,只是留下了一个空格。这是我到目前为止的代码
$numberOfCores = Get-WmiObject -class win32_processor numberOfCores | Select-Object -ExpandProperty numberOfCores
$path = "c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config"
[xml]$machineConfig = Get-Content $path
$node = $machineConfig.SelectNodes("/configuration/system.web")
$node.RemoveChild(($node.SelectSingleNode("processModel"))) | Out-Null
$processModelxml = $machineConfig.CreateElement("processModel")
$processModelxml.setAttribute("maxWorkerThreads",370)
$processModelxml.setAttribute("maxWorkerThreads",370)
$processModelxml.setAttribute("maxIoThreads",370)
$processModelxml.setAttribute("minWorkerThreads",50)
$processModelxml.setAttribute("minIoThreads",50)
$node.AppendChild($processModelxml) | Out-Null
$httpRuntimexml = $machineConfig.CreateElement("httpRuntime")
$httpRuntimexml.setAttribute("minFreeThreads",90 * $numberOfCores)
$httpRuntimexml.setAttribute("minLocalRequestFreeThreads",80 * $numberOfCores)
$node.AppendChild($httpRuntimexml) | Out-Null
[xml]$systemnetxml = @"
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "$(200 * $numberOfCores)" />
</connectionManagement>
</system.net>
"@
$machineConfig.configuration.AppendChild($machineConfig.ImportNode($systemnetxml."system.net",$true)) | Out-Null
$machineConfig.Save("c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config")
我已经为此苦苦挣扎了将近一年,我不得不摆脱它,而回到它却发现它不起作用。
出现如下错误
此外,它还会扭曲 machine.config 文件的原始格式。 Machine.config 位于 Windows Server 2012 R2 文件系统中,因此如果您想在自己的机器上测试该文件,请确保先备份该文件。我讨厌你弄乱你自己的机器来帮助我。
【问题讨论】:
标签: powershell