源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

下一代Shell脚本语言,Windows Power Shell!

  • 时间:2022-06-29 01:00 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:下一代Shell脚本语言,Windows Power Shell!
今天回家照常浏览了下cnbeta.com,看看有什么新鲜的内容。    于是乎,就看到了那么一条 [url=http://www.cnbeta.com/modules.php?name=News&file=article&sid=18132]Windows Power Shell 1.0[/url]    恩,我对这个东西很感兴趣,毕竟Windows目前的Shell是在是太弱了,立马[url=http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx]从微软站点下载[/url],安装,发现其是以补丁包的形式发布的,并非常规的MSI,那么,我估计Vista已经自带了这个东西了。    下面将尝试了解PowerShell(以下简称PS)       安装完成后,打开程序菜单,看来M$老习惯还是保持的不错的,帮助很详细       发行说明       快速参考       入门       用户指南       其他不做细表    看过文档以后,发现比较重要的一点是,PS是用.Net编写,并且完全支持.Net的任何对象。    .Net!什么?    祭出屠龙刀 Reflector 打开 PowerShell的主程序及目录下的所有DLL,失败:CLR头无效,没有一个被正确反编译了的,不是说用PS是由 .Net编写的么?怎么...M$在忽悠我们?    那他是如何操作.Net对象的呢?    那么再来,祭出PE Explorer 打开 PS的主程序 看了下其API导入,发现 PS 的主程序。    引用了mscoree.dll 的函数 [url=http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/grfuncorbindtoruntimeex.asp]CorBindToRuntimeEx[/url]    MSDN是这样解释 CorbindToRuntimeEx 的 : 使非托管主机能够将公共语言运行库加载到进程中。    这说明了PS在运行前是以非托管代码执行了必要的初始化,然后才进入CLR的,也可能是建立一个混合环境,方面托管和非托管代码交互执行;那么,宿主程序在哪呢?    用 Windows 的搜索功能搜索关键字 "PowerShell",失败,找出来的全部是程序目录里的东西!~~~    仔细想了一下,决定从根源着手;Windows的补丁程序是使用CAB打包的,因此可以直接用 WinRAR打开,用WinRAR打开 WindowsXP-KB926140-x86-CHS.exe,找到了我需要的东西 "_sfx_manifest_",用文本格式打开查看,发现了一些我需要的东西:    "microsoft.powershell.consolehost.dll" = "_sfx_0008._p", "powershell.exe"    "system.management.automation.dll" = "_sfx_0009._p", "microsoft.powershell.consolehost.dll"    "microsoft.powershell.security.dll" = "_sfx_0010._p", "system.management.automation.dll"    ......    这充分说明了,宿主程序是存在的,它就是 Microsoft.PowerShell.ConsoleHost.dll,那么,为什么我找不到这些文件呢?    再考虑以下,觉得这些东西可能在 GAC 中,打开GAC目录查看;哈,他们都在那呢?    但是用 Reflector 仍然有问题!Reflector 找不到这些程序集~~~,用 Open Cache 同样找不到!!!    没法,就从补丁包里把文件解出来看吧,弄出来再用 Reflector 打开,傻了,"File is not a portable executable. DOS header does not contain 'MZ' signature.",文件头不对;用记事本打开看看,发现文件头居然为 "PA19",这是什么格式的文件,为什么我从来没有见过?NGEN生成的本地代码?或者是加密过的Managed DLL?    先不管这个,找其他办法弄出 GAC里面的程序集好了。    GAC目录已经被一个 Shell Extension所接管了,那么现在要做的就是把目录里面的文件弄出来,我先后尝试了对话框,复制文件夹,未果,最后用一条命令行搞定了:
[img]http://www.cnblogs.com/Images/OutliningIndicators/None.gif[/img] xcopy /e C:\Windows\assembly\GAC_MSIL G:\GAC_MSIL
   然后在拷贝出来的目录中寻找需要的程序集。哈,现在我们可以看PS的代码了,这将是很愉快的一件事。    另外,我通过 _sfx_manifest_ 文件和 Reflector 分析程序集引用发现多了一个程序集 "System.Management.Automation.dll",其EXE备注为"Microsoft Command-Line Shell Engine Core Assembly"    我将这些解出来的程序集打包上传,点[url=http://www.cnblogs.com/Files/zealic/PowerShell_1.0.rar]这里下载[/url],我们可以Reflector分析他的代码,或者将他和PS的主程序一起打包用以实现 XCOPY 部署,用以做为产品的脚本系统。    到这里,我们已经把代码程序集都搞出来了,我们来看一下 PowerShell 到底是什么东西,能做什么:       由于以下原因,Windows PowerShell 使用它自己的语言,而不是重用现有的语言:          •Windows PowerShell 需要用于管理 .NET 对象的语言。          •该语言需要为使用 cmdlet 提供一致的环境。          •该语言需要支持复杂的任务,而不会使简单的任务变得更复杂。           •该语言需要与在 .NET 编程中使用的高级语言(如 C#)一致。       PS语言的一些特性:          1.高级语言的部分特性(变量、数组、运算符、哈希表、函数,条件语句,循环语句...)          2.能直接在文件系统、注册表、证书存储区、驱动器中导航,而导航方式和我们熟悉的DOS导航方式极相似。          3.强大的通配符和字符串搜索功能          4.可以创建和操作.Net对象 和 COM 对象          5.基于对象管道功能使用任何对象(包括.Net和COM对象)与目标交互          7.可以直接访问 WMI 对象。          8.可以编写 .Net 程序集来扩展PS,通过扩展,几乎可以无限的扩充 PS 的功能。       其他特性请参考PowerShell的帮助文档。              常见的命令:          Get-Date            - 获得当前日期。          Get-Help            - 获取帮助。          Get-Member       - 查看对象结构(可用此命令查看 .Net 对象的成员)。          Get-WmiObject   - 获取 WMI 对象。          Get-Process         - 获取进程对象。          Get-Service         - 获取Windows服务对象。    现在已经是月黑风高催人眠,只能等明天继续研究了;最后,我们以经典的 Hello World 来结尾吧,明天,我们再来进一步研究 PS:       使用 输出命令
[img]http://www.cnblogs.com/Images/OutliningIndicators/None.gif[/img] Write-Output "Hello World!"
      使用 .Net 来输出
[img]http://www.cnblogs.com/Images/OutliningIndicators/None.gif[/img] [System.Console]::ForegroundColor = [System.ConsoleColor]::Blue [img]http://www.cnblogs.com/Images/OutliningIndicators/None.gif[/img] [System.Console]::WriteLine("Hello World!")
   真是强大的Shell! PS:     我一直都希望M$能够提供一个无图形界面的,从目前看来似乎是时间还早了,但是现在是朝着好的方向发展,PowerShell让我看到了希望,说不定PowerShell就是将来的无图形界面 Server 的雏形。    所以,我大胆预测,Vienna(继Vista之后的下一个OS,完全重写内核)将会是内核和图形界面分离,而非现在基于NT的内核,内核与图形界面将凑在一起;并且将会有一个无图形界面的Server和目前的图形Server,两者将在很长一段时间内并存,至于谁会被取代,我觉得似乎是没可能了。    因此,我能想象的到的东西大概是,微软会将 Windows PE 升级,使其使用 Vienna 的核心,并且将会包含 .Net Framework X.Y,同时分为字符界面和图形界面。这样,Windows PE 将会成为一个极为顺手的系统诊断、故障排除工具。    Windows Server 在和 Unix/Linux Server 的距离在拉近。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部