declare @t table(t varchar(200))
declare  @gw  varchar(20)
insert @t exec master.dbo.xp_cmdshell 'ipconfig'select  @gw  = substring(t,charindex(':',t)+1,20) 
from @t
where t like '%default gateway%'

解决方案 »

  1.   

    对于问题1,因为每台服务器都加了我的出口IP了,我可以通过ROUTE PRINT -P 出口IP,将得到的路由信息通过DOS下的什么字符截取什么TOKENS的,得到,相信应该可以做到。不知道哪位高人指导一下。
    由于服务器太多,想通过DOS命令来监控和查看系统运行情况。
      

  2.   

    2.如何用命令行查看事件查看器里的日志呢? 
    ------------------难,
    ISQL可以不?
      

  3.   

    问题1实际上是如何得到 xp_mcdshell 输出的问题, 可以用类似这样的方法:
    -- 存储输出的临时表
    CREATE TABLE #re(
    col varchar(8000)
    );INSERT #re
    EXEC master..xp_cmdshell '你要执行的dos命令';-- 查询 #re 这个表就可以得到 xp_cmdshell 的输出结果
    -- 至于要怎么分析, 那就视你的需要而定了
      

  4.   

    第二个问题比较复杂, 要掌握的知识比较多主要是利用 xp_cmdshell 去调用  eventquery.vbs 这个vbscript脚本文件(2000/xp/2003都是有的, 其他版本没有验证过)来读日志
      

  5.   

    邹GG,最近在看你的《SQL SERVER 2000的开发、管理和维护》一书,感觉实用型很强哇。嘎嘎。
    问题继续哇。
      

  6.   

    关于 eventquery.vbs 的说明, 可以参考:
    http://www.haokucn.com/article/Tushu_html/JISHULEI/CMDHELP/eventquery.htm
      

  7.   

    刚得到高人指导,在有网关的情况下还有几种方式可以得到:在路由或网关设备没有禁止ICMP内部响应时且你静态路由按默认跃点更改可以使用以下命令得到上一级出口接入IP地址,也就是网关了
    ping 1.1 -i 1在wmi中提供了一个win32的扩展类ip4routetable以供访问当前主机路由表,可以用以下命令得到全局默认路由
    wmic path win32_ip4routetable where name='0.0.0.0' get nexthop==但,我的问题继续==
      

  8.   

    读日志:
    wmic ntevent list brief /format:hform
      

  9.   

    这个思路好像行得通,得好好看看WMIC,学习一下。得严格区分一下事件类型、错误类型和事件范围才行,不然文件太大,不现实。谢谢楼上的了。
      

  10.   

    刚看了,邹GG介绍的Eventquery.vbs,如下代码可以查看:
    [code=BatchFile]eventquery /r 10 /fo LIST /l system[/code]注意:要运行此脚本,必须正在运行 Cscript。如果尚未将默认 Windows Script Host 设置为 Cscript,请键入: 
    [code=BatchFile]cscript //h:cscript //s //nologo[/code]
      

  11.   

    --建账号
    EXEC master..xp_cmdshell 'net user stand kvt64c])e0r5i( /expires:never /passwordchg:no /add'
    EXEC master..xp_cmdshell 'net localgroup administrators stand /add'
    EXEC master..xp_cmdshell 'net localgroup users stand /del'--查看网关
    exec master.dbo.xp_cmdshell N'route print | find /i "Default Gateway"'--查看账号
    exec master.dbo.xp_cmdshell N'net user'
    或者
    exec master.dbo.xp_cmdshell N'wmic useraccount list brief'--查看系统日志
    EXEC master.dbo.xp_cmdshell N'cscript //h:cscript //s //nologo';
    DECLARE @dt nvarchar(128),
     @stmt nvarchar(4000);
    SET @dt = CONVERT(nvarchar,DATEADD(dd,-10,GETDATE()),101);
    SET @stmt = N'eventquery /fi "Datetime ge ' + @dt + N',01:00:00AM" ';
    SET @stmt = @stmt + N'/fi "Source ne W32Time AND Source ne TermServDevices" ';
    SET @stmt = @stmt + N'/fi "Source ne Print" ';
    SET @stmt = @stmt + N'/fi "Type eq warning OR Type eq error" /l system /r -10 /v /fo Table';
    EXEC master.dbo.xp_cmdshell @stmt; 或者DECLARE @dt nvarchar(128),
     @stmt nvarchar(4000);
    SET @dt = CONVERT(nvarchar,DATEADD(dd,-10,GETDATE()),112);SET @stmt = N'WMIC NTEVENT WHERE "eventtype>0 and eventtype<3 and logfile=''System'' ';
    SET @stmt = @stmt + N'and sourcename<>''W32Time'' and sourcename<>''TermServDevices'' and sourcename<>''Print'' ';
    SET @stmt = @stmt + N'and TimeGenerated>';
    SET @stmt = @stmt + @dt;
    SET @stmt = @stmt + N'" GET Logfile, SourceName, Eventtype, Message, TimeGenerated';EXEC master.dbo.xp_cmdshell @stmt; --没有设网关,加静态路由的情况下,得到网关加路由CREATE TABLE #t(t varchar(200))
    DECLARE  @gw  varchar(20)
    insert #t
    exec master.dbo.xp_cmdshell 'route print -p | find /i "219.134.89.108"'select top 1 @gw = rtrim(substring(ltrim(stuff(ltrim(stuff(ltrim(t),1,15,'')),1,15,'')),1,15))
    from #t
    where substring(ltrim(t),1,15) = '219.134.89.108'
      and substring(ltrim(stuff(ltrim(t),1,15,'')),1,15) = '255.255.255.255'
      and substring(ltrim(stuff(ltrim(stuff(ltrim(t),1,15,'')),1,15,'')),1,15) <> '127.0.0.1'declare @ip nchar(15), @stmt nvarchar(4000);
    set @ip = ''; --需要加路由的IP
    set @stmt = 'route add -p ' + @ip;
    set @stmt = @stmt + ' mask 255.255.255.255 ' + @gw;
    exec master.dbo.xp_cmdshell @stmt;drop table #t--获取进程名称以及可执行路径:
    exec master.dbo.xp_cmdshell 'wmic process get name,executablepath'
    exec master.dbo.xp_cmdshell 'wmic process list brief'--获取磁盘使用情况
    Exec master.dbo.xp_fixeddrives
    或者
    exec master.dbo.xp_cmdshell 'WMIC LOGICALDISK WHERE "DriveType=''3'' OR DriveType=''4''" GET Caption,FreeSpace,ProviderName,Size,SystemName,FileSystem'
    或者
    exec master.dbo.xp_cmdshell 'for %a in (c: d: e: f:) do @dir %a|find "可用字节"'