2016-10-11 3 views
-1

In dem folgenden Skript wird die Anzahl der CPU-Kerne auf einem Computer erfasst. Falls das Skript zuvor ausgeführt wurde, löscht es Teile des Skripts, die möglicherweise von fehlgeschlagenen Versuchen übrig geblieben sind, und schreibt sie dann zurück.Wie kann ich einen Abschnitt eines XML mithilfe von PowerShell entfernen?

Es schreibt die Httpruntime, Process zusammen mit den maxworker Fäden, maxWorkerThreads, maxIoThreads, minWorkerThreads, miniotheads, dann ist die minFreeThreads, minlocalrequestfreethreeads und dann ein Vielfaches den 90 und 80 von der minfreetheads und lokale requestfreethreads durch die Anzahl der CPU-Kerne .

Dann ich möchte es Trancen der zu löschen, wenn es existiert, dann schreibt es die Struktur, Hinzufügen von connectionmanagement, und fügen Sie Adresse zusammen mit der maxconnection Zeichenfolge, die die Zahl 200 addiert und multipliziert dann das 200-fache der Anzahl der CPU-Kerne . Hier

ist der Code unter

$numberOfCores = Get-WmiObject -class win32_processor | Measure-Object numberOfCores -Sum | Select-Object -ExpandProperty sum 
$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("httpRuntime"))) | Out-Null 
$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 
$node = $systemnetxml.SelectSingleNode('//system.net') 
$node.ParentNode.RemoveChild($node) 
[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") 

Hier ist das Update Teil der machine.config, dass diese berührt, und beachten Sie die extra system.nets

machine.config

<configuration> 
     <system.web> 
    <processModel maxWorkerThreads="370" maxIoThreads="370" minWorkerThreads="50" minIoThreads="50" /> 
    <httpRuntime minFreeThreads="180" minLocalRequestFreeThreads="160" /> 
    </system.web> 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="400" /> 
    </connectionManagement> 
    </system.net> 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="400" /> 
    </connectionManagement> 
    </system.net> 
</configuration> 

Zurück zu nur Ihrem Code, reproduziert immer noch den gleichen Abschnitt, aber nicht out setzt "connectionManagement: connectionManagement" wie ich bereits erwähnt

Antwort

2

Die kanonische Weise ist der Knoten aus dem übergeordneten zu entfernen:

[xml]$machineConfig = Get-Content $path 
... 
$node = $machineConfig.SelectSingleNode('//system.net') 
$node.ParentNode.RemoveChild($node) 
+0

Vielen Dank Ansgar für die Beantwortung, aber es scheint nicht zu funktionieren, bekomme ich diesen Fehler –

+0

ou eine Methode auf ein nicht nennen nullwertigen Ausdruck. Bei C: \ Benutzer \ ICastillo \ Desktop \ Pre - Finale-Alpha3.ps1: 141 Zeichen: 1 + $ Knoten = $ xml.SelectSingleNode ('// System.net') + ~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull –

+0

Annot konvertieren Argument "0", mit Wert: "System.Xml.XPathNodeList", für "RemoveChild" Typ "System.Xml.XmlNode": "Kann die" System.Xml.XPathNodeList "nicht konvertieren Wert vom Typ "System.Xml.XPathNodeList", um "System.Xml.XmlNode" einzugeben. " Bei C: \ Benutzer \ ICastillo \ Desktop \ Pre - Abschluss-Alpha3.ps1: 142 Zeichen: 1 + $ node.ParentNode.RemoveChild ($ node) + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodeException + FullyQualifiedErrorId: MethodArgumentConversionInvalidCastArgument –

Verwandte Themen