博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Powershell 更新 Nagios Windows客户端
阅读量:6231 次
发布时间:2019-06-21

本文共 3055 字,大约阅读时间需要 10 分钟。

豆子今天在一个新配置的Nagios服务器上发现对Windows服务器的内存检查仍然使用的是check_nt, check_nt检查的是物理内存和虚拟内存之和;而我需要查看的只是物理内存,因此我需要改成check_nrpe。 Nagios服务器上的配置不多说了,下载安装相关插件,配置command.cfg和windows.cfg, 然后客户端修改对应的NSClient的配置文件,测试通过。

然后问题来了,我有80多台Windows服务器需要修改对应的配置文件,还有10多台Windows服务器根本就没有安装NSClient,我可不想手动去一一安装配置,写了个简单的脚本统一修改。

基本思路,从AD里面获取Windows服务器名字,判断是否在线。对于在线的服务器进行扫描,判断是否安装了NSClient;如果已经安装过的,判断是否已经备份,否则备份之后更新配置文件;如果没有安装的,拷贝安装文件到本地的temp文件夹,进行安装然后更新配置文件。

值得一提的有几点:

1.使用invoke-command远程操作的时候,默认的安全机制会禁止访问网络资源!因此我需要把MSI文件拷贝到本地才能安装。

2.Powershell里面使用msiexec安装msi文件的时候,需要使用start-process 的格式,列如

1
start-Process 
-FilePath msiexec.exe -ArgumentList 
"/i c:\temp\NSCP.msi /q" 
-Wait -PassThru

如果是远程使用,需要注意第一不能访问网络资源,第二不能使用交互式安装,第三这个MSI文件本身不能创建任何和用户档案相关的文件,比如快捷方式等等;任何一条违反了都会导致失败。

3. 拷贝文件的时候我使用了 copy ... | out-null 的格式,这个作用和 start-process copy.exe -wait 是一样的,都是为了保证当前命令成功结束之后才会进行下一条命令。

4. 这个脚本写的并不完善,比如我没有对有对操作系统是64位或者32位进行判断,也没有异常报错处理等等,我稍后有空进行完善,不过已经可以处理我需要的内容了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Write-Host 
"Scanning Online Servers ..."
$a
=
get-adcomputer 
-
filter 
{operatingsystem 
-like 
"*20*"
}
$computers
=@()
foreach 
(
$b 
in 
$a 
){
if
(
Test-Connection 
-computername 
$b
.name -Count 1 -Quiet){
$temp
=
[psobject]
@{
'name'
=
$b
.name}
$computers
+=
$temp
}
}
Write-Host 
"Scanning Nagios Clients ..."
$c2
=@()
$computers 
ForEach-Object 
{
$path
=
"\\"
+
$_
.name+
"\c$\Program Files\NSClient++\nsclient.ini"
$bakpath
=
"\\"
+
$_
.name+
"\c$\Program Files\NSClient++\nsclient.ini.bak"
 
if 
((
Test-Path 
-Path 
$path
-and 
!(
Test-Path 
-Path 
$bakpath
))
{
 
 
copy 
$path 
$bakpath
 
copy 
"\\sydav01\c`$\program files\NSClient++\nsclient.ini" 
$path 
 
#"Restart nscp service on "+$_.name
 
Invoke-Command 
-ComputerName 
$_
.name {
restart-service 
nscp}
}
else
{
$path 
" Folder doesn't Esixt"
$temp
=
[psobject]
@{'name
'=$_.name}
$c2+=$temp
}
}
$end=$false
while ( $end -eq $false){
Write-Host "Following servers don'
t have Nagios Client Installed. "
$c2
.name
$option
read-host 
"Do you want to Install ? ( Y/N ) "
switch
(
$option
)
{
"Y"
    
$c2
foreach-object 
{
    
$path2
=
"\\"
+
$_
.name+
"\c$\temp\NSCP.msi"
    
if
Test-Path 
$path2
){}
    
else 
{
    
New-Item 
$path2 
-Force
    
}
    
Write-host 
"Copying NSCP.msi files to "
$path2
    
copy 
'\\sydit01\c$\Temp\NSCP-0.4.4.15-x64.msi' 
$path2 
Out-Null
    
Write-host 
"Copying is completed and start to install"
    
Invoke-Command 
-ComputerName 
$_
.name -ScriptBlock {
    
Start-Process 
-FilePath msiexec.exe -ArgumentList 
"/i c:\temp\NSCP.msi /q" 
-Wait -PassThru
    
}
    
$path3
=
"\\"
+
$_
.name+
"\c$\Program Files\NSClient++\nsclient.ini"
    
Write-host 
"Installation is completed and now is updting config file"
    
copy 
"\\sydav01\c$\program files\NSClient++\nsclient.ini" 
$path3
    
Invoke-Command 
-ComputerName 
$_
.name {
restart-service 
nscp}
}
$end
=
$true
;
}
"N"
{
    
$end
=
$true
    
}
default
{
    
"Please answer Y or N"
}
}
}

运行片段,拷贝文件到某台服务器,安装,更新文件,重启服务

从Nagios服务器上测试成功获取内存信息

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1741051,如需转载请自行联系原作者
你可能感兴趣的文章
Python 字符串格式化输出(format/printf)
查看>>
Bzoj3781 小B的询问
查看>>
洛谷P1372 a/b problem
查看>>
UVa11762 Race to 1
查看>>
SQL类型转换和数学函数
查看>>
vue.js的学习
查看>>
插入排序的应用
查看>>
Retrofit2.0中注解使用方式
查看>>
Key-Value Coding Accessor 及其与KVC的关系
查看>>
把购买数据添加到购物车
查看>>
[磁盘空间]lsof处理文件恢复、句柄以及空间释放问题
查看>>
C#操作Control异步工具类
查看>>
由两个栈组成队列
查看>>
VirtrualBox使用已存在的镜像创建虚拟机
查看>>
python 拼图验证码
查看>>
JSOI2017 Round1 Day0
查看>>
Java面试题复习笔记(Web方向)
查看>>
第二次冲刺站立会议(3)
查看>>
java中的object... args参数
查看>>
笔试之大整数相乘
查看>>