如何使用 Powershell 编辑 Tomcat 选项?
How can I edit Tomcat options using Powershell?
我正在开发一个(简陋的)脚本来编辑 powershell 中的 Tomcat 选项。
它作为一项服务安装,我 运行 作为管理员(目前)。
我认为问题出在我使用多个选项执行 Set-ItemProperty 时。
此后,服务再也没有启动。
它确实如此,当我手动进入 Tomcat /bin 目录时,启动 tomcat6w,然后 cut/paste 手动进入 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 配置文件的直接版本。我只需要找到我的选项变量所在的位置....
为了记录,我通过将值注入文本文件并使用 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
Et voilà !
我正在开发一个(简陋的)脚本来编辑 powershell 中的 Tomcat 选项。 它作为一项服务安装,我 运行 作为管理员(目前)。
我认为问题出在我使用多个选项执行 Set-ItemProperty 时。
此后,服务再也没有启动。 它确实如此,当我手动进入 Tomcat /bin 目录时,启动 tomcat6w,然后 cut/paste 手动进入 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 配置文件的直接版本。我只需要找到我的选项变量所在的位置....
为了记录,我通过将值注入文本文件并使用 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
Et voilà !