手头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就可以在当前路径下得到想要的结果了