SQL利用CMD以及IIS命令APPCMD 实现一些IIS操作
2014-04-01 13:09
405 查看
--列出本机的IIS的网站以及对应的应用程序池的所有相关信息 --EXEC P_SELECT_IIS_SITE_APPPOOLSALLMESSAGE CREATE PROC P_SELECT_IIS_SITE_APPPOOLSALLMESSAGE AS SET NOCOUNT ON BEGIN TRY --开启CMDSHELL EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1 RECONFIGURE EXEC SP_CONFIGURE 'XP_CMDSHELL', 1 RECONFIGURE IF OBJECT_ID('TEMPDB.DBO.#APPPOOLLIST') IS NOT NULL DROP TABLE #APPPOOLLIST CREATE TABLE #APPPOOLLIST(COL NVARCHAR(MAX)) INSERT INTO #APPPOOLLIST EXEC MASTER.DBO.XP_CMDSHELL 'DIR %SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD.EXE'--判断是否有IIS的APPCMD文件--可以用master..xp_fileexist IF EXISTS(SELECT 1 FROM #APPPOOLLIST WHERE COL IS NOT NULL AND COL LIKE '%APPCMD.EXE%') BEGIN --EXEC MASTER.DBO.XP_CMDSHELL '%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD LIST SITES /text:name'--读取所有网站 --/text:[path=''/''].applicationpool 不能两个同时 --TRUNCATE TABLE #SITELIST IF OBJECT_ID('TEMPDB.DBO.#SITE_apppool_LIST') IS NOT NULL--最终结果网站名---应用程序池名 DROP TABLE #SITE_apppool_LIST CREATE TABLE #SITE_apppool_LIST(NAME NVARCHAR(1024),APPPOOLNAME NVARCHAR(256) DEFAULT '') IF OBJECT_ID('TEMPDB.DBO.#apppool_LIST') IS NOT NULL--应用程序池 DROP TABLE #apppool_LIST CREATE TABLE #apppool_LIST(APPPOOLNAME NVARCHAR(256) DEFAULT '') declare @NAME NVARCHAR(1024),@sql nvarchar(4000) IF OBJECT_ID('TEMPDB.DBO.#SITELIST') IS NOT NULL--网站 DROP TABLE #SITELIST CREATE TABLE #SITELIST(NAME NVARCHAR(1024)) insert into #SITELIST(NAME) EXEC MASTER.DBO.XP_CMDSHELL '%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD LIST SITES /text:name'--读取所有网站 IF @@ROWCOUNT>0 BEGIN --SELECT * FROM #SITELIST declare cur_site cursor fast_forward for SELECT * FROM #SITELIST WHERE NAME IS NOT NULL open cur_site fetch next from cur_site into @NAME while @@FETCH_STATUS=0 begin set @sql='%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD LIST SITE /name:"'+@name+'" /text:[path=''/''].applicationpool' --SELECT @SQL; INSERT INTO #apppool_LIST EXEC MASTER.DBO.XP_CMDSHELL @sql--读取网站的应用程序池 INSERT INTO #SITE_apppool_LIST SELECT @NAME,APPPOOLNAME FROM #apppool_LIST WHERE APPPOOLNAME IS NOT NULL--将网站与应用程序池存在临时表 TRUNCATE TABLE #apppool_LIST fetch next from cur_site into @NAME end close cur_site deallocate cur_site END --读取应用程序池的相关信息 TRUNCATE TABLE #APPPOOLLIST INSERT INTO #APPPOOLLIST EXEC MASTER.DBO.XP_CMDSHELL '%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD LIST APPPOOL' SELECT --APPPOOLHASH, APPPOOLNAME, REPLACE(PARSENAME(VMS,3),'|','.') AS MGDVERSION, REPLACE(PARSENAME(VMS,2),'|','.') AS MGDMODE, REPLACE(PARSENAME(VMS,1),'|','.') AS STATE INTO #POOLS FROM ( SELECT SUBSTRING(COL,CHARINDEX('"',COL)+1,CHARINDEX('"',COL,CHARINDEX('"',COL)+1)-(CHARINDEX('"',COL)+1)) AS APPPOOLNAME, REPLACE(REPLACE(SUBSTRING(COL,CHARINDEX('(',COL)+1,LEN(COL)-(CHARINDEX('(',COL)+1 )+1-1 ),'.','|'),',','.') AS VMS --RIGHT(LOWER(SYS.FN_VARBINTOHEXSTR(HASHBYTES('MD5',COL))),256) AS APPPOOLHASH FROM #APPPOOLLIST WHERE COL IS NOT NULL )T SELECT S.*, ISNULL(P.MGDVERSION,'')MGDVERSION, ISNULL(P.MGDMODE,'')MGDMODE, isnull(P.STATE,'')STATE FROM #SITE_apppool_LIST S LEFT JOIN #POOLS P ON S.APPPOOLNAME=P.APPPOOLNAME--返回最终结果 END ELSE BEGIN SELECT '失败' --return END END TRY BEGIN CATCH SELECT ERROR_MESSAGE()+' '+ERROR_PROCEDURE(); END CATCH --关闭CMDSHELL EXEC SP_CONFIGURE 'XP_CMDSHELL', 0 RECONFIGURE EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 0 RECONFIGURE
--回收IIS指定的应用程序池 --EXEC P_RECYCLE_APPPOOLSBYNAME 'wzzhmb.api.hys.com',0 CREATE PROC P_RECYCLE_APPPOOLSBYNAME(@POOLNAME NVARCHAR(256)=NULL,@ISEXEC BIT=0) AS SET NOCOUNT ON BEGIN TRY EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1 RECONFIGURE EXEC SP_CONFIGURE 'XP_CMDSHELL', 1 RECONFIGURE DECLARE @SQL NVARCHAR(4000) IF ISNULL(@POOLNAME,'')='' BEGIN DECLARE @APPPOOLNAME NVARCHAR(1024) DECLARE CUR_APP CURSOR FAST_FORWARD FOR SELECT APPPOOLNAME FROM APPPOOLS WHERE UPDATEDISRECYCLE=1 --AND STATE='STATE:STOPPED' OPEN CUR_APP FETCH NEXT FROM CUR_APP INTO @APPPOOLNAME WHILE @@FETCH_STATUS=0 BEGIN SET @SQL='%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD RECYCLE APPPOOL /APPPOOL.NAME:"'+@APPPOOLNAME+'"'; IF(ISNULL(@ISEXEC,0)=0) SELECT @SQL; ELSE BEGIN EXEC MASTER.DBO.XP_CMDSHELL @SQL IF @@ERROR=0 SELECT '应用程序池:'+@APPPOOLNAME+':已回收'; END FETCH NEXT FROM CUR_APP INTO @APPPOOLNAME END CLOSE CUR_APP DEALLOCATE CUR_APP; END ELSE BEGIN SET @SQL='%SYSTEMROOT%\SYSTEM32\INETSRV\APPCMD RECYCLE APPPOOL /APPPOOL.NAME:"'+@POOLNAME+'"';--最好是加上检查这个名字的 IF(ISNULL(@ISEXEC,0)=0) SELECT @SQL; ELSE BEGIN EXEC MASTER.DBO.XP_CMDSHELL @SQL IF @@ERROR=0 SELECT '应用程序池:'+@APPPOOLNAME+':已回收'; END END END TRY BEGIN CATCH SELECT ERROR_MESSAGE()+' '+ERROR_PROCEDURE(); END CATCH --关闭CMDSHELL EXEC SP_CONFIGURE 'XP_CMDSHELL', 0 RECONFIGURE EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 0 RECONFIGURE
相关文章推荐
- SQL利用CMD及RAR命令实现将某一压缩文件解压到指定的路径
- 二叉树的建立与输出以及其他一些相关操作(递归算法实现) C语言
- MySql:操作数据库以及一些常用的命令
- Linux学习记录(3)认识终端以及一些基本的操作命令
- JAVAWEB开发之mybatis详解(一)——mybatis的入门(实现增删改查操作)、自定义别名、抽取代码块以及动态SQL的使用
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- 使用osql来处理一些sql脚本以及做一些其他操作
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- 利用Word的宏录制来反查一些菜单操作的命令
- 利用C语言实现一些简单的栈操作
- MapReduce实现基本SQL操作的原理-join和group by,以及Dinstinct
- sql操作一些命令总结
- Linux下一些文件操作和一些简单命令的自己实现
- 利用hashtable模拟实现权限验证(同map思想-->只能有一个用户名,可重复密码)以及增删查改操作
- 利用MCI命令进行 播放录制音乐,以及弹出光驱,音量控制获得播放进度等等操作。。。开发必备。
- 利用jquery实现动态表格的相关操作以及列表全选功能
- Robotium学习(七)- 实现用shell命令执行一些操作的方法
- 一些开源搜索引擎实现——倒排使用原始文件,列存储Hbase,KV store如levelDB、mongoDB、redis,以及SQL的,如sqlite或者xxSQL
- sql中的关键字以及相关的一些操作(1)