Как изменить параметры Tomcat с помощью Powershell?

Я разрабатываю (скромный) скрипт для редактирования параметров Tomcat в powershell. Он установлен как служба, и я запускаю ее как администратор (пока).

Я думаю, проблема в том, что я запускаю Set-ItemProperty с несколькими параметрами.

После этого служба никогда не запускается. Это происходит, когда я вручную перехожу в каталог Tomcat /bin, запускаю tomcat6w и вырезаю/вставляю вручную свои параметры на вкладке Java. Затем я нажимаю ок, и служба отвечает.

Не могли бы вы представить, что мне не хватает? Разочаровывающий материал, потому что мой сценарий выглядит почти нормально.

PS: вам не нужно понимать французский здесь, но спросите, если нужно.

#Script de configuration des options Tomcat :

Set-ExecutionPolicy Bypass

#Variables :
#nom du serveur : 
$servername=hostname

#$memoirelibre=(Get-WmiObject -Class "Win32_OperatingSystem").freephysicalmemory*1024/1MB
$pathtomcat = "HKLM:\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat6\*"
$pathtomcatjava = "HKLM:\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java"
$pathtomcatstart = "HKLM:\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Start"
$pathtomcatstop = "HKLM:\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Stop"
$optionsTomcatJava = Get-ItemProperty -Path $pathtomcatjava -Name "Options" | Select-Object -ExpandProperty "Options" -ErrorAction Stop
$runningtomcat = Get-Service | Where { $_.Status -eq "Running"} | findstr Tomcat6
$lecteur = "D:"
#$urlsetaclexe = ""
[string] $oui = "oui"
[string] $non = "non" 

#Variables pour les options Tomcat par défaut : 
$XmsValue=384
$XmxValue=1024
$MaxMetaspaceSizeValue=384
$XssValue=256
$esbport=1100

#Renommage du service :
Set-Service Tomcat6 -DisplayName "mycompany-Tomcat"
    #echo "Le service Tomcat6 est renommé en mycompany-Tomcat."

#Gestion des paramètres du service : 
Set-ItemProperty -Path $pathtomcatstart -Name "Class" -Value "org.apache.catalina.startup.Bootstrap"
Set-ItemProperty -Path $pathtomcatstart -Name "WorkingPath" -Value "$lecteur\mycompany\Tomcat"
Set-ItemProperty -Path $pathtomcatstart -Name "Arguments" -Value "start"
Set-ItemProperty -Path $pathtomcatstart -Name "Mode" -Value "jvm"

Set-ItemProperty -Path $pathtomcatstop -Name "Class" -Value "org.apache.catalina.startup.Bootstrap"
Set-ItemProperty -Path $pathtomcatstop -Name "WorkingPath" -Value "$lecteur\mycompany\Tomcat"
Set-ItemProperty -Path $pathtomcatstop -Name "Arguments" -Value "stop"
Set-ItemProperty -Path $pathtomcatstop -Name "Mode" -Value "jvm"

Set-ItemProperty -Path $pathtomcatjava -Name "Java Virtual Machine" -Value "$lecteur\mycompany\Java\jdk-8u45-windows-x64-security\jre\bin\server\jvm.dll"
Set-ItemProperty -Path $pathtomcatjava -Name "Java Classpath" -Value "$lecteur\mycompany\Tomcat\bin\bootstrap.jar;$lecteur\mycompany\Tomcat\bin\tomcat-juli.jar"
    #echo "Le service mycompany-Tomcat est configuré."

#Récupération des options JAVA existantes / modifications
#Si les options sont vides 
#    alors : je les rajoute toutes en posant des questions
#Sinon je demande de nouvelles valeurs


if ( $optionsTomcatJava -eq {} ) 
{
#Questions pour les options : 

[int] $XmsValue = Read-Host "Quelle valeur pour l'option Xms (réponse en chiffres) ? Exemple : 384"

[int] $XmxValue = Read-Host "Quelle valeur pour l'option Xmx (réponse en chiffres) ? Exemple 1024" 

[int] $MaxMetaspaceSizeValue = Read-Host "Quelle valeur pour l'option MaxMetaspace (réponse en chiffres) ? Exemple : 384" 

[int] $XssValue = Read-Host "Quelle valeur pour l'option Xss (réponse en chiffres) ? Exemple : 256" 

[int] $esbport = Read-Host "Quel numéro de port pour RMIFop ? (base 1100)"

Set-ItemProperty -Path $pathtomcatjava -Name "Options" -Value "-Dcatalina.home=$lecteur\mycompany\Tomcat `
-Dcatalina.base=$lecteur\mycompany\Tomcat`
-Djava.endorsed.dirs=$lecteur\mycompany\Tomcat\endorsed`
-Djava.io.tmpdir=$lecteur\mycompany\Tomcat\temp`
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager`
-Djava.util.logging.config.file=$lecteur\mycompany\Tomcat\conf\logging.properties`
-Dorg.apache.camel.jmx.disabled=False`
-Dorg.apache.camel.jmx.rmiConnector.registryPort=$esbport`
-Dorg.apache.camel.jmx.createRmiConnector=True`
-Dorg.apache.camel.jmx.mbeanObjectDomainName=mycompany.esb.camel`
-Dsun.rmi.activation.execTimeout=1800000`
-Xms$XmsValue`m`
-Xmx$XmxValue`m`
-Djava.awt.headless=true`
-XX:MaxMetaspaceSize=$MaxMetaspaceSizeValue`m`
-Xss$XssValue`k`
-Dsolr.solr.home=$lecteur\mycompany\solr`
-Dmycompany.licence.dir=$lecteur\mycompany\licences" -Force
}

#}

else {
    $questionXms = Read-Host -prompt "L'option Xmsvalue est à $XmsValue, faut il la modifier [o/n] ?" 
        if ( $questionXms -eq "o" ) 
            {
            [int] $XmsValue = Read-Host -prompt "Quelle valeur pour l'option Xms (réponse en chiffres) ? Exemple : 384"
            }

    $questionXmx = Read-Host -prompt "L'option Xmxvalue est à $XmxValue, faut il la modifier [o/n] ?" 
        if (  [string] $questionXmx -eq "o" ) 
            {
            [int] $XmxValue = Read-Host -prompt "Quelle valeur pour l'option Xmx (réponse en chiffres) ? Exemple 1024" 
            }

    $questionMaxmeta = Read-Host -prompt "L'option MaxMetaspaceSizeValue est à $MaxMetaspaceSizeValue, faut il la modifier [o/n] ?" 
        if (  [string] $questionMaxmeta -eq "o" ) 
            {
            [int] $MaxMetaspaceSizeValue = Read-Host -prompt  "Quelle valeur pour l'option MaxMetaspace (réponse en chiffres) ? Exemple : 384" 
            }

    $questionXss = Read-Host -prompt "L'option Xssvalue est à $XssValue, faut il la modifier [o/n] ?" 
        if (  [string] $questionXss -eq "o" ) 
            {
            [int] $XssValue = Read-Host -prompt  "Quelle valeur pour l'option Xss (réponse en chiffres) ? Exemple : 256" 
            }

    $questionesbport = Read-Host -prompt "L'option de port RMIFop est à $esbport, faut il la modifier [o/n] ?" 
        if (  [string] $questionesbport -eq "o" ) 
            {
            [int] $esbport = Read-Host -prompt  "Quel numéro de port ESB ? (base 1100)"
            }

    Set-ItemProperty -Path $pathtomcatjava -Name "Options" -Value "-Dcatalina.home=$lecteur\mycompany\Tomcat `
-Dcatalina.base=$lecteur\mycompany\Tomcat`
-Djava.endorsed.dirs=$lecteur\mycompany\Tomcat\endorsed`
-Djava.io.tmpdir=$lecteur\mycompany\Tomcat\temp`
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager`
-Djava.util.logging.config.file=$lecteur\mycompany\Tomcat\conf\logging.properties`
-Dorg.apache.camel.jmx.disabled=False`
-Dorg.apache.camel.jmx.rmiConnector.registryPort=$esbport`
-Dorg.apache.camel.jmx.createRmiConnector=True`
-Dorg.apache.camel.jmx.mbeanObjectDomainName=mycompany.esb.camel`
-Dsun.rmi.activation.execTimeout=1800000`
-Xms$XmsValue`m`
-Xmx$XmxValue`m`
-Djava.awt.headless=true`
-XX:MaxMetaspaceSize=$MaxMetaspaceSizeValue`m`
-Xss$XssValue`k`
-Dsolr.solr.home=$lecteur\mycompany\solr`
-Dmycompany.licence.dir=$lecteur\mycompany\licences" -Force

       }





#(Re)démarrage du service :
#Si le service Tomcat n'est pas en running, je le redémarre.



    if ($runningtomcat -eq $false)
            {
            Write-Host "Le service mycompany-Tomcat n'est pas démarré. On le démarre."
            get-service Tomcat6 | Start-Service -Verbose
            }

    else    { 
            Write-Host "Le service mycompany-Tomcat n'est pas encore redémarré. On le redémarre."
            get-service Tomcat6 | restart-Service -Verbose

            }

Вот ошибка, я получаю:

**Restart-Service : Impossible de démarrer le service « mycompany-Tomcat (Tomcat6) ».
Au caractère C:\Users\mycompany\Documents\scripteditiontomcat.ps1:159 : 35
+             get-service Tomcat6 | Restart-Service -Verbose
+                                   ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Restart-Service], ServiceCom 
   mandException
    + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.RestartServiceCommand**

Еще одним поводом может быть прямое издание конфигурационных файлов Tomcat. Мне просто нужно найти, где находятся мои переменные параметров ....


person ant    schedule 03.10.2017    source источник
comment
Вероятно, это не ваша проблема, но это кажется странным выбором: $runningtomcat = Get-Service | Where { $_.Status -eq "Running"} | findstr Tomcat6 почему бы и нет $runningtomcat = Get-Service Tomcat6 | Where { $_.Status -eq "Running"}   -  person Mark Wragg    schedule 03.10.2017
comment
Действительно, не вопрос, но вы имеете дело.   -  person ant    schedule 03.10.2017
comment
Должен ли быть * в конце $pathtomcat?   -  person James C.    schedule 03.10.2017
comment
Не совсем так, но эта переменная все равно не вызывается, я ее удалил.   -  person ant    schedule 04.10.2017
comment
Хорошо, есть развитие. Я понял, что не ввожу правильное текстовое значение в параметры Java (или параметры jvm). Когда я стер свои escape-символы, он снова начал работать. Это все еще не идеально, потому что я хотел бы как-то это инкапсулировать, и я все еще работаю над этой частью.   -  person ant    schedule 06.10.2017


Ответы (1)


Для записи я решил это, введя значения в текстовый файл и вернув их с помощью get-content.

$tomcatproperties = Get-Content -Path "d:\mycompany\install\scripts\tomcat-properties.txt"

echo $jvmopts >> "d:\artis\install\scripts\tomcat-properties.txt"
Set-ItemProperty -Path $pathtomcatjava -Name "Options" -Value $tomcatproperties

И вуаля !

person ant    schedule 09.10.2017
comment
также см. stackoverflow.com/questions/7738794/add-jvm -options-in-tomcat - person m1m1k; 05.05.2020