标题: [求助]这个关于xml文本的操作怎么用脚本实现
[打印本页]
作者: lfzzj
时间: 2008-7-24 16:12
标题: [求助]这个关于xml文本的操作怎么用脚本实现
我想对iis的配置文件进行操作,比如文本内某一些内容如下,这是2个站点test1.com test2.com,同属于一个进程池AppPool #10,我想用一个脚本将下面的2个站点重新分配下,使每一个站点对应一个进程池,比如使站点test1.com划为进程池test1.com #10;把站点test2.om划为进程池test2.com #10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~begin
<IIsWebServer Location ="/LM/W3SVC/1692685952"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test1.com"
ServerComment="test1.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1692685952/filters"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1692685952/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="AppPool #10"
AppRoot="/LM/W3SVC/1692685952/Root"
>
</IIsWebVirtualDir>
<IIsWebServer Location ="/LM/W3SVC/1796746353"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test2.com"
ServerComment="test2.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1796746353/filters"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1796746353/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="AppPool #10"
AppRoot="/LM/W3SVC/1796746353/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="E:\dbbackup"
>
</IIsWebVirtualDir>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~end
实现后的结果如下
<IIsWebServer Location ="/LM/W3SVC/1692685952"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test1.com"
ServerComment="test1.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1692685952/filters"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1692685952/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="test1.com #10"
AppRoot="/LM/W3SVC/1692685952/Root"
>
</IIsWebVirtualDir>
<IIsWebServer Location ="/LM/W3SVC/1796746353"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test2.com"
ServerComment="test2.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1796746353/filters"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1796746353/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="test2.com #10"
AppRoot="/LM/W3SVC/1796746353/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="E:\dbbackup"
>
</IIsWebVirtualDir>
[
Last edited by lfzzj on 2008-7-25 at 11:43 AM ]
作者: lfzzj
时间: 2008-7-24 16:55
其实主要是我不知道怎么把同属AppPool #10的2个或者多个站点名都提出来,比如提出名称 test1.com和test2.com等。
然后还不知道怎么能替换AppPool #10为test1.com #10以及test2.com #10等
作者: bat-zw
时间: 2008-7-24 18:25
如下:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('findstr /n .* iis.ini') do (
set "str=%%i"
if "!str:ServerComment=!" neq "%%i" call :lp
if not defined flag (
set "flag=a"&echo %%i>iis.ini
) else (
if "!str:PoolId=!" neq "%%i" (
echo AppPool="!var! ^#10">>iis.ini
) else (
echo.%%i>>iis.ini
)))
start iis.ini&goto :eof
:lp
for /f "tokens=2 delims==" %%i in ("%str%") do set "var=%%~i"
[
Last edited by bat-zw on 2008-7-24 at 06:32 PM ]
作者: lfzzj
时间: 2008-7-24 19:20
很感谢bat-zw。请你再看下
我之前提出的问题不够完整,现在我从新整理了一份:
a.txt 文件 为我从实际文件中提取的一部分内容
b.txt文件 为我想实现的结果
a.txt内容如下:
<?xml version ="1.0"?>
<configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0">
<MBProperty>
<IIS_Global Location ="."
BINSchemaTimeStamp="251a765c4d99c801"
ChangeNumber="32763"
HistoryMajorVersionNumber="287"
SessionKey="49634b62980000004c00000040000000010200000168000000a40000562eac418683ad5dbacdcc0d5597e0a196c4f05c2179a088555682bd980277c5eb1d7c9f4549930d09dd3f466
a63942bc764e88a8ee577f36571d23de94d239effff4e005a3f7fc4d3657f011ae03ac72b2f03416fbe9bff88920d14a4bb87df4c69f1369c9408767988169fdc5a8ce267ee56b80dd96c8338ed52
cc326cd8e7dd7ec59c"
XMLSchemaTimeStamp="7f7c785c4d99c801"
>
</IIS_Global>
~~~~~~~~~~~~~~~~~~站点test1.com~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<IIsWebServer Location ="/LM/W3SVC/1692685952"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test1.com"
ServerComment="test1.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1692685952/filters"
AdminACL="49634462f0000000a400000040000000c18618ef8781fc29d0feeb5cc6685376b01fc41fe08d8245f4f702bfbd9f7ae1f74429e9e507f6f5729ef4a3e634126cb486569210f10310c4c
a0b701d02120f72f3a72e5339c7a367273ce8b4fdc590417c3457c795c314f6ff9669ad8de29f6957debdf4551e7f01a5a000972deea05104d5c284b1e47d057d04fd8de14c8e817460be132da8d7
674a6b10dd788033c8347c98faa64c9fdf844fa581210c615790dc15e48328f89b00f269c098ace7ccebaa144d961451ca649afa782301085ffc374c71c4205fa8f1420f673bf7ce4eae3a16758a7
f1db3ea1cc322266185ed75916cce3d9112"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1692685952/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="AppPool #10"
AppRoot="/LM/W3SVC/1692685952/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="F:\perl"
UNCPassword="49634462500000000600000040000000c18618ef86813600e050d39feb134cf3024228de33bd68f2be421a4acacb679900d66487abbb6bf4023b221cb811d48ca890d75d9a5d26fa
271b0d2978ed22733177004f7d762e76"
>
</IIsWebVirtualDir>
~~~~~~~~~~~~~~~~~~站点test2.com~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<IIsWebServer Location ="/LM/W3SVC/1796746353"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test2.com"
ServerComment="test2.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1796746353/filters"
AdminACL="49634462f0000000a400000040000000c18618ef8781fc29d0feeb5cc6685376b01fc41fe08d8245f4f702bfbd9f7ae1f74429e9e507f6f5729ef4a3e634126cb486569210f10310c4c
a0b701d02120f72f3a72e5339c7a367273ce8b4fdc590417c3457c795c314f6ff9669ad8de29f6957debdf4551e7f01a5a000972deea05104d5c284b1e47d057d04fd8de14c8e817460be132da8d7
674a6b10dd788033c8347c98faa64c9fdf844fa581210c615790dc15e48328f89b00f269c098ace7ccebaa144d961451ca649afa782301085ffc374c71c4205fa8f1420f673bf7ce4eae3a16758a7
f1db3ea1cc322266185ed75916cce3d9112"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1796746353/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="AppPool #10"
AppRoot="/LM/W3SVC/1796746353/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="E:\dbbackup"
UNCPassword="49634462500000000600000040000000c18618ef86813600e050d39feb134cf3024228de33bd68f2be421a4acacb679900d66487abbb6bf4023b221cb811d48ca890d75d9a5d26fa
271b0d2978ed22733177004f7d762e76"
>
</IIsWebVirtualDir>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~进程池AppPool #10~~~~~~~~~~~~~~~~~
<IIsApplicationPool Location ="/LM/W3SVC/AppPools
/AppPool #10"
AppPoolAutoStart="TRUE"
>
</IIsApplicationPool>
b.txt内容如下:
<?xml version ="1.0"?>
<configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0">
<MBProperty>
<IIS_Global Location ="."
BINSchemaTimeStamp="251a765c4d99c801"
ChangeNumber="32763"
HistoryMajorVersionNumber="287"
SessionKey="49634b62980000004c00000040000000010200000168000000a40000562eac418683ad5dbacdcc0d5597e0a196c4f05c2179a088555682bd980277c5eb1d7c9f4549930d09dd3f466
a63942bc764e88a8ee577f36571d23de94d239effff4e005a3f7fc4d3657f011ae03ac72b2f03416fbe9bff88920d14a4bb87df4c69f1369c9408767988169fdc5a8ce267ee56b80dd96c8338ed52
cc326cd8e7dd7ec59c"
XMLSchemaTimeStamp="7f7c785c4d99c801"
>
</IIS_Global>
<IIsWebServer Location ="/LM/W3SVC/1692685952"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test1.com"
ServerComment="test1.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1692685952/filters"
AdminACL="49634462f0000000a400000040000000c18618ef8781fc29d0feeb5cc6685376b01fc41fe08d8245f4f702bfbd9f7ae1f74429e9e507f6f5729ef4a3e634126cb486569210f10310c4c
a0b701d02120f72f3a72e5339c7a367273ce8b4fdc590417c3457c795c314f6ff9669ad8de29f6957debdf4551e7f01a5a000972deea05104d5c284b1e47d057d04fd8de14c8e817460be132da8d7
674a6b10dd788033c8347c98faa64c9fdf844fa581210c615790dc15e48328f89b00f269c098ace7ccebaa144d961451ca649afa782301085ffc374c71c4205fa8f1420f673bf7ce4eae3a16758a7
f1db3ea1cc322266185ed75916cce3d9112"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1692685952/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="test1.com #10"
AppRoot="/LM/W3SVC/1692685952/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="F:\perl"
UNCPassword="49634462500000000600000040000000c18618ef86813600e050d39feb134cf3024228de33bd68f2be421a4acacb679900d66487abbb6bf4023b221cb811d48ca890d75d9a5d26fa
271b0d2978ed22733177004f7d762e76"
>
</IIsWebVirtualDir>
<IIsWebServer Location ="/LM/W3SVC/1796746353"
AuthFlags="0"
ServerAutoStart="TRUE"
ServerBindings=":80:test2.com"
ServerComment="test2.com"
>
</IIsWebServer>
<IIsFilters Location ="/LM/W3SVC/1796746353/filters"
AdminACL="49634462f0000000a400000040000000c18618ef8781fc29d0feeb5cc6685376b01fc41fe08d8245f4f702bfbd9f7ae1f74429e9e507f6f5729ef4a3e634126cb486569210f10310c4c
a0b701d02120f72f3a72e5339c7a367273ce8b4fdc590417c3457c795c314f6ff9669ad8de29f6957debdf4551e7f01a5a000972deea05104d5c284b1e47d057d04fd8de14c8e817460be132da8d7
674a6b10dd788033c8347c98faa64c9fdf844fa581210c615790dc15e48328f89b00f269c098ace7ccebaa144d961451ca649afa782301085ffc374c71c4205fa8f1420f673bf7ce4eae3a16758a7
f1db3ea1cc322266185ed75916cce3d9112"
>
</IIsFilters>
<IIsWebVirtualDir Location ="/LM/W3SVC/1796746353/root"
AccessFlags="AccessRead"
AppFriendlyName="默认应用程序"
AppIsolated="2"
AppPoolId="test1.com #10"
AppRoot="/LM/W3SVC/1796746353/Root"
AuthFlags="AuthAnonymous | AuthNTLM"
DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate |
EnableDefaultDoc"
Path="E:\dbbackup"
UNCPassword="49634462500000000600000040000000c18618ef86813600e050d39feb134cf3024228de33bd68f2be421a4acacb679900d66487abbb6bf4023b221cb811d48ca890d75d9a5d26fa
271b0d2978ed22733177004f7d762e76"
>
</IIsWebVirtualDir>
<IIsApplicationPool Location ="/LM/W3SVC/AppPools/
test1.com #10"
AppPoolAutoStart="TRUE"
>
</IIsApplicationPool>
<IIsApplicationPool Location ="/LM/W3SVC/AppPools
/test2.com #10"
AppPoolAutoStart="TRUE"
>
</IIsApplicationPool>
上面的内容只是提取的一少部分,所以和实际运用会有点差别。a.txt中的2个站点有相同的特征都是同属AppPool #10。所以需要提取出来建对应的进程池 test1.com #10和test2.com #10,最后修改原来的AppPoolId中的 AppPool #10 为 test1.com #10和test2.com #10
作者: lfzzj
时间: 2008-7-24 20:48
麻烦各位帮忙解决下
作者: lxmxn
时间: 2008-7-24 22:36
你需要的是xmlStarlet
http://xmlstar.sourceforge.net/
作者: lfzzj
时间: 2008-7-24 23:01
请老大再多给点思路
作者: bat-zw
时间: 2008-7-25 00:59
我给出的代码,楼主是不是修改下就能达到了啊。
作者: lfzzj
时间: 2008-7-25 09:55
我熟悉了下xmlStarlet,但始终无法完成对同属AppPool #10进程池的所有站点进行提取,比如提取出 test1.com和test2.com
作者: lfzzj
时间: 2008-7-25 17:26
没有高人解答我就只有用vbs试试了
作者: slore
时间: 2008-7-25 18:45
vbs多好……这种操作就用VBS……快有准
作者: yishanju
时间: 2008-7-25 23:41
iis 不是有几个相应的VBS,用来操作控制IIS的状态么、
比如添加站点之类的这种操作。
作者: suntb
时间: 2008-7-26 09:52
版版有空写个xmlStarlet的中文教程吗?
最好给几个实例参考下
作者: yishanju
时间: 2008-8-1 09:31
百度 xmlStarlet