powershell远程管理服务器磁盘空间的实现代码

一、启用远程管理

1、将管理服务器的trusthost列表改为*

运行Set-item wsman:localhost\client\trustedhosts –value *

2、在远程服务器上运行Enable-PSremoting

注:

在本地服务器上以Administrator运行“Enable-Psremoting 、 Winrm Quickconfig 、  Set-WSManQuickConfig”,均提示“访问被拒绝”,可能的原因如下:

1.在工作组计算机上,确认组策略: secpol.msc > Local Policies > Security Options > Network Access: Sharing and security model for local accounts - change to classic
2.修改注册表:Set-ItemProperty –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System –Name  LocalAccountTokenFilterPolicy –Value 1 –Type DWord
3.确认WinRM服务是否正在运行,Windows Firewall服务是否正在运行,网络位置是否不是“公用”,如果要启用PS远程管理,此时网络位置不能被设置为public,因为Windows 防火墙例外不能在网络位置是public时被启用。
4.Telnet localhost 47001是否可以连通
5.运行 winrm get winrm/config 是否会提示“访问被拒绝”
6.Administrator密码不能为空

远程启用开启之后可以在cmd命令窗口输入wbemtest测试是否可以连接远程服务器,如图:

连接成功的状态如下所示:

下面就可以来取每个服务器的磁盘空间了

二、脚本

$server = "."
$uid = "sa"
$db="master"
$pwd="数据库sa密码"
$mailprfname = "test" ---需要跟select name FROM msdb.dbo .sysmail_profile一致
$recipients = "接收邮箱,多个用;隔开"
$subject = "邮件标题"
$computernamexml = "E:\powershell\computername.xml"
$alter_xml = "E:\powershell\cpdisk.xml"
$pwd_xml = "E:\powershell\pwd.xml"
function GetServerName($xmlpath)
{
  $xml = [xml] (Get-Content $xmlpath)
  $return = New-Object Collections.Generic.List[string]
  for($i = 0;$i -lt $xml.computernames.ChildNodes.Count;$i++)
  {
    if ( $xml.computernames.ChildNodes.Count -eq 1)
    {
      $cp = [string]$xml.computernames.computername
    }
    else
    {
      $cp = [string]$xml.computernames.computername[$i]
    }
    $return.Add($cp.Trim())
  }
  $return
}
function GetAlterCounter($xmlpath)
{
  $xml = [xml] (Get-Content $xmlpath)
  $return = New-Object Collections.Generic.List[string]
  $list = $xml.counters.Counter
  $list
}
function Getpwd($xmlpath)
{
  $xml = [xml] (Get-Content $xmlpath)
  $returnpwd = New-Object Collections.Generic.List[string]
  for($i = 0;$i -lt $xml.pwd.ChildNodes.Count;$i++)
  {
    if ( $xml.pwds.ChildNodes.Count -eq 1)
    {
      $pw = [string]$xml.pwd.password
    }
    else
    {
      $pw = [string]$xml.pwd.password[$i]
    }
    $returnpwd.Add($pw.Trim())
  }
  $returnpwd
}
function CreateAlter($message)
{
  $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
  $CnnString ="Server = $server; Database = $db;User Id = $uid; Password = $pwd"
  $SqlConnection.ConnectionString = $CnnString
  $CC = $SqlConnection.CreateCommand();
  if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() } 

  $cc.CommandText=
      " EXEC msdb..sp_send_dbmail
       @profile_name = '$mailprfname'
      ,@recipients = '$recipients'
      ,@body = '$message'
      ,@subject = '$subject'
      "
  $cc.ExecuteNonQuery()|out-null
  $SqlConnection.Close();
}
$names = GetServerName($computernamexml)
$pfcounters = GetAlterCounter($alter_xml)
$upwd = Getpwd($pwd_xml)
$report = ""
for($m=0;$m -lt $names.count;$m++)
{
$cp=$names[$m]
$p=New-Object -TypeName System.Collections.ArrayList
$uname="administrator"--因为取的服务器用户名都是administrator,如果每台机器不一样,可以放在XML等文件中读取
$pw=$upwd[$m]
$upassword=convertto-securestring $pw -AsplainText -force;
foreach ($pfc in $pfcounters)
{
  $filter="deviceID='"+$pfc.get_InnerText().Trim()+"'"
  #$Disk =get-wmiobject win32_logicaldisk -computername $cp -Filter $filter
  #$counter=$Disk.Freespace/1024MB
  $cred=new-object system.management.automation.PSCredential($uname,$upassword);
  $counter=(get-wmiobject -credential $cred -class win32_logicaldisk -computername $cp -filter $filter).Freespace/1024MB
  $total=(get-wmiobject -credential $cred -class win32_logicaldisk -computername $cp -filter $filter).Size/1024MB
  #$pfc = $pfcounters[$i]
  $path = "机器名:"+$cp+"; 盘符:"+$pfc.get_InnerText()
  $diskFree=";总磁盘空间大小为:"+[math]::truncate($total).ToString()+"G;当前剩余空间大小为:"+[math]::truncate($counter).ToString()+"G!"
  $item = "{0} {1} " -f $path,$diskFree
  $report += $item + "`n"
}  

}
$report
if($report -ne "")
{
  CreateAlter $report
}

效果:

附:

xml文件格式:

1、computername.xml

<computername>
    <computername>
    test
    </computername>
</computernames>

2、cpdisk.xml

<Counters>
    <Counter>C:</Counter>
    <Counter>D:</Counter>
</Counters>

3、pwd.xml

<pwd>
    <password>
     helloworld
    </password>
<pwd>

完毕,欢迎拍砖!大笑

(0)

相关推荐

  • shell脚本连接并重启远程服务器的方法

    shell重启远程服务器 #connServer.sh 登陆服务器脚本 本地文件 #!/usr/bin/expect expect -c " spawn ssh ali@192.168.1.1 expect { \"*assword\" {set timeout 30; send \"123456\r\";} \"yes/no\" {send \"yes\r\"; exp_continue;} } send \&qu

  • 监控服务器swap并重启php的Shell脚本

    折中一下,写个脚本监控swap吧,放在crontab里面,2小时执行一次,世界安静了,再也没有烦人的报警短信了 复制代码 代码如下: #!/bin/bash function usage {         echo "Usage: $0"         echo "e.g. $0 1500"         exit } if [ $# -lt 1 ];then         usage fi typeset -i nowSwap limitSwap limi

  • java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器. SSH是Secure Shell的缩写,一种建立在应用层和传输层基础上的安全协议.SSH在连接和传送过程中会加密所有数据,可以用来在不同系统或者服务器之间进行安全连接.SSH提

  • 使用xp_cmdshell注销Windows登录用户(终端服务器超出最大连接数)

    公司日常项目更新使用TFP,服务器一般维护用远程桌面管理,所以经常登录到服务器, 但有时由于某种原因,登录到服务器后,帐号没有及时注销,致使后面无法登录到服务器, 显示错误如 出现这样的问题还真麻烦,跑机房光手续都要两三天才能搞好.还好公司一直保留有Sa帐号, 这就好办了,用SQL注销一个Windows登录用户即可. 首先打开xp_cmdshell--执行XP_CMDSHELL要开启xp_cmdshellEXEC sp_configure 'show advanced options', 1RE

  • 智能监测自动重启Apache服务器的Shell脚本

    由于需要监控某些要求高可用性的Apache服务器,除了专业的监控报警设备,低成本下在Apache服务器上写一个自动监测Apache状态的脚本是个不错的主意.在网上搜索了许多类似的脚本,但由于局限性较大,也都存在一些不完善的地方,所以自己写了一个. 脚本功能与特点 1.能够每隔一段时间监测Apache服务器的可用性(由于本脚本直接模拟了客户端的访问,因此这里的"可用性"是指切切实实的正常可访问) 2.在出现无法访问的情况下,能够自动重启Apache服务(强行重启) 3.在重启后仍然无法正

  • powershell远程管理服务器磁盘空间的实现代码

    一.启用远程管理 1.将管理服务器的trusthost列表改为* 运行Set-item wsman:localhost\client\trustedhosts –value * 2.在远程服务器上运行Enable-PSremoting 注: 在本地服务器上以Administrator运行"Enable-Psremoting . Winrm Quickconfig .  Set-WSManQuickConfig",均提示"访问被拒绝",可能的原因如下: 1.在工作组计

  • 关于Linux服务器磁盘空间占满问题的解决方法

    下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助. 今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件都删掉了,可硬盘空间依旧满.于是df -h查看了下各个挂载点的状况(如下图). /dev/sda3占用了100%,那么我们du -s -h ./*看下目录的占用情况(如下图). 在工作中,我们也许会遇到这样的问题,发现某个磁盘空间快满了,于是,找到一些无用的大文件将其删除后,发现磁盘空间还是没有释放掉,

  • linux服务器磁盘空间扩充方法

    目录 前言 步骤 前言 今天发现es日志未记录,检查了filebeat.elasticsearch.logstash之后发现es的索引都变成了只读状态,手动修改索引模式之后,过几分钟又变成了只读状态. 进一步翻阅资料,才知道原因是一旦在存储超过95%的磁盘中的节点上分配了一个或多个分片的任何索引,该索引将被强制进入只读模式.所以只能扩充磁盘空间了.下面简单描述下磁盘扩充的步骤. 步骤 磁盘原来已经有两个分区了,但是分配的空间都不大. 增加磁盘,通过管理端挂载新的磁盘sdc: 使用fdisk /d

  • phpstorm远程连接服务器并实时更新发布代码(thinkphp6.0.7)

    想要phpstrom 远程连接上服务器,需要通过以下 步骤操作,具体操作跟随一起看看吧! Step1 打开phpstorm Tools->Deployment->Configuration Step2 开始配置连接参数,我的是阿里云的服务器, 有一个 Test Sftp connection 测试连接的可以先测试下 选择yes 接下来 Step3: Text-to-HTML conversion tool 后面继续连接到你的服务器,并next到最后即可 然后如果想实时更新 这个选项得点下 我用

  • mssql 监控磁盘空间告警实现方法

    这几天突然有个想法:希望能够自动监控.收集数据库服务器的磁盘容量信息,当达到一个阀值后,自动发送告警邮件给DBA,将数据库磁盘详细信息告知DBA,提醒DBA做好存储规划计划,初步的想法是通过作业调用存储过程来实现(每天调用一次),这样避免了我每天每台数据库服务器都上去检查一下,尤其是手头的数据库服务器N多的情况,这样可以避免我每天浪费无谓的时间.如果大家有更好的建议和方法,欢迎指点一二,我整理.修改了三个存储过程如下: 存储过程1:SP_DiskCapacityAlert1.prc 说明:需要通

  • python远程连接服务器MySQL数据库

    本文实例为大家分享了python远程连接服务器MySQL数据库的具体代码,供大家参考,具体内容如下 这里默认大家都已经配置安装好 MySQL 和 Python 的MySQL 模块,且默认大家的DB内表和访问账号权限均已设置无误,下面直接代码演示: # -*- coding: utf-8 -*- """ Created on Fri Dec 30 10:43:35 2016 @author: zhengyongzhe """ import MySQ

  • 详解Centos7扩展磁盘空间(LVM管理)

    本文介绍了Centos7扩展磁盘空间(LVM管理),分享给大家,具体如下: 查看磁盘情况 # fdisk -l /dev/sda Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512

  • 远程管理Windows服务器上的IIS服务

    我们在日常管理Windows服务器上的IIS时一般都是先远程连接服务器桌面然后再直接操作IIS,虽然不是很麻烦,但也是每次都需要输入服务器用户名与密码,那么今天就为大家介绍一种方法可以在本地的IIS上直接管理服务器上的IIS,不需要每次都进入服务器进行管理了. 注:此方法只支持IIS7以上的版本 一.服务器端设置: 进入服务器管理器选择增加角色和功能勾选管理服务并安装. 如下图所示: 安装完成之后,远程的IIS中安全性一栏中会出现管理服务选项.如下图 启用远程连接,设置好之后,右侧启动服务. 二

  • 如何远程管理连接云主机和VPS(服务器)

    在开通云主机或VPS后会提供你个远程信息,远程信息包括了云主机ip.云主机系统用户名以及密码,windows系统可以使用mstsc来进行远程图形化页面操作,linux系统可以使用ssh远程命令形式来操作,linux需要有良好的基础. 下面以mstsc.exe连接windows 2003服务器为例 一般通过 程序 > 附件 > 通讯 > 远程桌面连接 打开mstsc.exe(下面服务器远程连接工具里面包括了mstsc.exe) ,如图,点选项 计算机那里输入你的云主机ip,用户名和密码输入

  • linux 查看磁盘空间大小命令

    Ubuntu 查看文件以及磁盘空间大小管理 (1)查看文件大小 查看当前文件夹下所有文件大小(包括子文件夹) du -sh # du -h 15M ./package 16K ./.fontconfig 4.0K ./.cache 5.1M ./.rpmdb 20M . 查看指定文件夹下所有文件大小(包括子文件夹) # du -h ftp 3.8G ftp/sanya/doc 3.8G ftp/sanya 4.0K ftp/testftp/doc 1.4M ftp/testftp 875M ft

随机推荐