玩转Powershell系列汇总贴.docx
- 文档编号:2960658
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:19
- 大小:27.96KB
玩转Powershell系列汇总贴.docx
《玩转Powershell系列汇总贴.docx》由会员分享,可在线阅读,更多相关《玩转Powershell系列汇总贴.docx(19页珍藏版)》请在冰豆网上搜索。
玩转Powershell系列汇总贴
[原创]玩转PS之检测硬盘自由空间
硬盘,空间,检测,自由
玩powershell已经有几天,发现它实在是太好用了!
兄弟们,别在vbs和批处理上费劲了,这边有特别省力的方法啊!
今天开始,逐步推出原创的玩转PS系列,主要针对管理员的日常管理任务,谈谈在PS上,怎么实现。
第一个任务,检查服务器上面硬盘的自由空间!
首先让我们看看在vbs下面是怎么实现的,下面代码是我从微软脚本中心copy来的。
1.ConstHARD_DISK=3
2.
3.strComputer="."
4.SetobjWMIService=GetObject("winmgmts:
"_
5. &"{impersonationLevel=impersonate}!
\\"&strComputer&"\root\cimv2")
6.
7.SetcolDisks=objWMIService.ExecQuery_
8. ("Select*fromWin32_LogicalDiskWhereDriveType="&HARD_DISK&"")
9.
10.ForEachobjDiskincolDisks
11. Wscript.Echo"DeviceID:
"&vbTab& objDisk.DeviceID
12. Wscript.Echo"FreeDiskSpace:
"&vbTab&objDisk.FreeSpace
13.Next
复制代码
注意strComputer="."这句话,其中的点代表检查本地计算机,如果换成其他服务器的名字,就可以检查远程计算机了。
好了用PS如何做呢?
首先我们把上面那个select语句抄下来,稍加改动,就是PS的格式
$query="Select*fromWin32_LogicalDiskWhereDriveType='3'"
看着比vbs简单吧?
注意我把hard_disk换成了数字3,省去了再定义个变量的麻烦。
然后我们就可以直接用PS下面的gwmi(全名为get-wmiobject)命令来进行检测了
$disks=gwmi-query$query
简单吧,上面的命令检测本地计算机的逻辑硬盘,把结果放到$disks变量里面去,如果检测远程计算机呢?
把上面的命令改成
$disks=gwmi-query$query-computer"remotepc"
其中remotepc应该是你要检测的远程计算机名字。
下面我们如何查看$disks里面的内容呢?
你可以直接打$disks
会给你一个列表类似这样。
DeviceID :
C:
DriveType :
3
ProviderName:
FreeSpace :
14351843328
Size :
31453437952
VolumeName :
DeviceID :
E:
DriveType :
3
ProviderName:
FreeSpace :
1361903616
Size :
5388038144
VolumeName :
NewVolume
不太好看哦,我们只需要看看deviceid和freespace就可以了。
好了运行这一句
$disks|selectdeviceid,freespace
之后,结果类似下面
deviceid freespace
-------- ---------
C:
14351843328
E:
1361903616
好看多了吧?
我觉得还是不够,我想看到freespace的大小是gb或者mb而不是上面的那个样子。
我们做一个简单的除法就可以了。
试试下面的命令
foreach($diskin$disks)
{
"DiviceID-"+$disk.deviceid
"FreeSize(GB)-"+($disk.freespace/1gb)
}
结果就变成
DiviceID-C:
FreeSize(GB)-13.3661956787109
DiviceID-E:
FreeSize(GB)-1.26837158203125
呵呵够精确吧?
在PS下面,把数字转化成mb或gb是非常方便的,不需要你1024,1024的除,只要直接除1gb或1kb或1mb就可以了!
让我们最后总结一下上面的命令
1.$query="Select*fromWin32_LogicalDiskWhereDriveType='3'"
2.$disks=gwmi-query$query
3.foreach($diskin$disks)
4.{
5."DiviceID-"+$disk.deviceid
6."FreeSize(GB)-"+($disk.freespace/1gb)
7.}
复制代码
比较一下vbs的代码,哪个更方便呢?
好事儿做到底,再加点儿功能,想列出多台计算机的信息咋办?
不急,先建立一个变量,假设你有三台服务器,名字是server1,server2,server3
1.$servers="server1","server2","server3"
复制代码
然后把上面的代码改写成
1.$query="Select*fromWin32_LogicalDiskWhereDriveType='3'"
2.foreach($serverin$servers)
3.{
4."Servername-"+$server
5.$disks=gwmi-query$query-computer$server
6.foreach($diskin$disks)
7.{
8."DiviceID-"+$disk.deviceid
9."FreeSize(GB)-"+($disk.freespace/1gb)
10.}
11.}
复制代码
[原创]玩转PS之计算篇
计算
加减乘除在PS里面都很好实现。
+-*/就可以了。
下面介绍几个特殊的情况。
举个例子
大家试验下面两条语句
[int](3/2)
[int](5/2)
结果都是2。
那么如果希望得到所得结果的整数位该怎么做呢?
Powershell本身不带这个命令,不过.net带,所以用下面的方法就可得到结果的整数位了。
[Math]:
:
Truncate(3/2)
结果是1
[Math]:
:
Truncate(5/2)
结果是2
余数呢?
用%就可以得到余数。
上面那些东西在现实工作中有用么?
当然有,我最近写的一个脚本,每次运行时会自动记录当前的运行时间。
我没有直接用get-date的结果,因为如果在不同的计算机上运行,由于时间格式的不同,结果往往不是我们所预期的格式。
因此,我用了类似[int](get-date).timeofday.totalminutes这种方式来记录时间,这样得到的结果就都是统一的。
那么该怎么把得到的结果返回时间格式呢?
就要用到上面的方法了。
比如我有一个记录630,也就是说该时间是当天的第630分钟,倒底是几点钟呢?
这样来算
$hour=[Math]:
:
Truncate(630/60)
$minute=630%60
然后我们把它给转换成时间
$t=get-date-hour$hour-minute$minute-second0
我们直接打$t显示630分钟底是几点?
结果如下
Friday,25January200810:
30:
00a.m.
[原创]玩转PS之-命令执行结果
ping,计算机
从帖子的题目上看恐怕看不出命令执行结果对于我们来说有多么大的重要性。
但是如果我换一种说法,也许您就感兴趣了。
如何检测远程计算机是否能够ping通?
如何检测某个目录下是否存在某个文件?
您可能会想到好几种方法,来实现。
下面我来介绍一种非常容易的办法,保证你会感兴趣!
第一,检测能否ping通远程计算机。
很简单,直接ping就可以了比如
pingnotexsitedpc
或者ping192.168.1.244
如果这个计算机不存在,或者dns解析不出来ip地址,你都不会ping成功。
会得到类似requesttimeout之类的返回值。
那么如果在脚本中来ping的话,一般是需要对返回值进行字符串匹配,来判断是否成功。
在powershell下,太好办了。
直接在执行完ping语句后,打$?
,如果结果是true证明ping通了,如果是false则ping失败。
举一反三,检查某个文件,某个目录是否存在呢?
dirc:
\notexsitedfile.txt
$?
如果结果是false则文件不存在,如果结果是true则文件存在。
这样我们就可以利用$?
来写脚本了比如检测某台计算机的网络是否连通就可以这么写
pingmyserver
if($?
)
{"Greate!
theserverisonline!
"}
else
{"Shit,theserverisoffline!
"}
顺便说一句,如果你希望得到上一条命令的返回数字值,而不是布尔值,可以调用powershell的保留变量$lastexitcode
还是上面的命令
dirc:
\notexsitedfile.txt
执行之后,打入
$lastexitcode
如果成功则返回0,失败则返回1。
自己试试吧!
[原创]玩转PS之email篇
email,邮箱,过年,powershell
有一段日子没有更新这个系列了,主要是大家都忙于过年,也没有什么心情来写东西。
今天要和大家讨论一下如何用powershell发email,主要原因是刚刚有一个客户跟我说,他想每周都能得到一份单位内用户的exchangemailbox大小的报告,最好是email的方式。
呵呵,要解决这个问题,我们要分两部分来做,首先是如何用powershell来查看邮箱的大小,然后是如何发用powershell送email给客户。
下面象大家汇报我是如何做的,第一步......
嘿嘿,第一步不是打开powershell,而是打开IE,敲入:
^),然后搜索"powershellexchange2003mailboxsize"
然后我得到好多的结果,随便打开一个连接得到下面的一段代码
#Getdateforfilename
$day=Get-Date-UFormat"%Y%m%d"
#Ge
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Powershell 系列 汇总