管道有一个很好的比喻”棒球手”,它其实就是将信息从一端投递到另一端接收。

一 先举几个例子说明吧:

1利用管道停止zabbix服务(可以看到我这里也用了通配符,但这不是一个好的习惯,除非你确认匹配的就是你要的服务。所以在做管道之前首先要需要确认一下通配符匹配的信息,否则可能酿成不好的后果)

image

2 将获取的服务导出到一个CSV文件。

image

3 将获取的服务导出到一个XML文件。

image

4当然也可以导入

image

导入的功能我在以前写过好多现实管理当中的例子

http://lixiaosong.blog.51cto.com/705126/1341710

二 通过以上的举例大家已经对管道有了一个初步的了解。但大家是不是始终有一个疑问,管道到底为我们传递了什么东西。好接下来就是一个NB的东东了 get-member。

1接着举例还是get-services,可以看到他得属性和传递的参数:

image

2 这些参数有什么用呢。我们看一眼:

image

image

3 说以上这些只是为了下面这种情况。我知道了以上的功能,兴致勃勃的想通过管道获取域内所有计算机的bios信息。

image

但是却返回了一堆错误信息,这太郁闷了:

image

这是什么原因导致的呢。哼哼这点很重要打起精神来

首先我们通过看一眼管道符左面命令的属性,可以看到是ADComputer。

image

其次我们通过get-help看一眼管道符右面命令的byvalue属性(这个属性显示是否接收参数)。却没有搜到关于ADComputer信息。

image

然后回头看一眼成功的get-service的命令,先看一眼get-memer属性

image

然后再看一眼stop-service的详细帮助信息。发现了关于“servicecontroller”byvalue信息。

image

image

这下我们知道了 ,管道能否成功需要有一个前提。管道符左边的属性必须符合右边命令的接收参数。

太郁闷了!!!难道我们就不能实现我们上边的想法了么?当然不是。我们仔细研究一下:

首先在看一眼get-wmiobject的帮助信息(看!!!get-help又派上了用场)他居然支持-computername参数,然后接字符串!

image

其次再看一眼get-adcomputer这个命令,可以看到能够做为上面“-computername”参数的只有Name属性。

image

好那我们怎么能将Name属性提取出来呢?有两种方法:

1使用select

image

2 使用%{$_.加参数}方法(这种方法在以前的博客里也有参考)

image

3 确定一些获取到的这些是否为字符串。哈哈有戏!!!

image

4 让我们应用它吧!好了成功了爽!!!

image

Powershell的管道功能就介绍到这里了!!!

接下来就是关于Session和大规模自动化介绍了很期待吧哈哈哈!