检查sqlserver服务器的各个分区的剩余空间

为方便管理多个SQLServer服务器的硬盘空间,作者编写了一个简单的脚本。脚本分为两部分:serverinfo.txt用于存储服务器信息,diskcheck.bat使用bcp命令远程查询服务器磁盘状态,并将结果输出到新文件。serverinfo内容包含服务器类型、IP、名称、用户名、密码和驱动信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手头SQL-Server服务器多的时候,
查看硬盘容量每次都得进入各个服务器敲入相同的命令。
花了点时间,写了个简单的脚本,先凑合着用。

大体的思路是,
1)先做serverinfo.txt,用来保存所有需要处理的服务器的信息。
2)另写diskcheck.bat文件,
    使用bcp的命令,远程访问各个服务器,
    得到的结果输出到一个server_当前时间串的文件,每次生成新文件。
serverinfo内容的格式如下(各个字段用分号分隔)
type;serverIP;serverName;user;password;driver
其中type是wmic或者其他。
注意,serverinfo.txt的前3行不要写入实际SQLServer服务器信息

例)

type;serverIP;serverName;user;password;driver
type:wmic/dir
↓↓↓↓↓↓↓↓↓写各个SQLServer信息↓↓↓↓↓↓↓
wmic;172.18.10.101;SQLServer-Live;sa;sapasword;c:\
dir;192.168.1.200;SQLServer_Old;sa;sapassword;c:\
dir;192.168.1.200;SQLServer_Old;sa;sapassword;d:\
dir;192.168.1.200;SQLServer_Old;sa;sapassword;e:\
dir;192.168.1.200;SQLServer_Old;sa;sapassword;f:\

分 wmic和dir的原因在于windows服务器上可能没有安装wmic命令
已经安装了wmic命令的服务器,如SQLServer-Live
一条语句就可以抽出所有硬盘的容量和剩余空间
没有安装wmic命令的服务器,如SQLServer_Old,
就只能一个盘一个盘的指定了。
(调查了一下,在dos下没有可以简单的得到所有盘符的命令。)

以下是表示服务器各个硬盘空间的处理

REM 打开防止延迟选项
SETLOCAL ENABLEDELAYEDEXPANSION

set datestring=%date:/=%_%time::=%
REM echo %datestring%

echo disk    freespace    disksize >> "server_%datestring%.txt"

REM type;serverIP;serverName;user;password;driver
for /f "skip=3 tokens=1-6 delims=;" %%a in (serverinfo.txt) do (
    set type=%%a
    set serverIP=%%b
    set serverName=%%c
    set user=%%d
    set password=%%e
    set driver=%%f

    echo !serverIP!    !serverName!    %datestring% >> "server_%datestring%.txt"
    
    if !type! equ wmic  (
        bcp  "set fmtonly off exec master.dbo.xp_cmdshell 'wmic logicaldisk get caption, freespace,size '" queryout abc.txt -c -S !serverIP! -U !user! -P !password!
        type abc.txt | find ":" >> "server_%datestring%.txt"
    ) else (
        echo !driver!  >> "server_%datestring%.txt"    
        bcp  "set fmtonly off exec master.dbo.xp_cmdshell 'dir !driver!'" queryout abc.txt -c -S !serverIP! -U !user! -P !password!
	REM find "free bytes"  需要根据不同语言的windows服务器来写,比如中文,日文等等
        type abc.txt | find "free bytes" >> "server_%datestring%.txt"    
    )    
 )

del abc.txt

执行diskcheck.bat就可以在当前路径下得到想要的结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值