PowerShell作为服务器管理利器,对于进程的管理自然是做得很到位的,很自然地我们能想到如何获取服务器的所有进程。
我们在PowerShell脚本环境下执行gps命令(gps命令是Get-Process命令的Alias)我们可以得到进行的一些信息,进程的句柄,CPU累计运行时间,进程ID等等。
在DOS环境下我们可以用notepad命令启动记事本,这里我们也可以这样做。使用notepad命令同样可以启动记事本,这个不是重点,我们想查看记事本的进程改如何做呢?我们可以通过以下命令来做。
可以看到Notepad命令进程的一些情况,下面我们来说说PowerShell面向对象的事情。
这里的$Process变量的值就是获取到的Notepad的进程的实例,这样的话变量代表了这个对象,为什么我们说这是一个对象呢,我们通过Get-Member可以获取对象的属性、事件及方法,这是对象的典型特征。
PS C:\Users\Administrator> $process.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False Process System.ComponentModel.Component
通过GetType我们可以看出这个对象的类型是System.ComponentModel.Component,跟.net的对象是一样的。
$process.Kill()可以杀死进程, 我们发现调用Kill方法的形式和.net的C#都是一样的。
能够更好地说明面向对象的特性的例子如下:
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object Windows.Forms.Form
$form.Text = "My First Form"
$button = New-Object Windows.Forms.Button
$button.text="Push Me!"
$button.Dock="fill"
$button.add_click({$form.close()})
$form.controls.add($button)
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
这个是不是和C#的代码非常像,是的,这个其实就是一个Winform的窗体,在PowerShell下执行的效果如下
所以,PowerShell里是可以写C# code的。