PowerShell服务器包含一种类似ASP 基于PowerShell的模板语言,用于构建 Web 应用程序,使 PowerShell 脚本可被web访问。这种 PowerShell ASP 模板语言可以包含标记和内联混合的powershell脚本。您可将PowerShell ASP这种模板语言应用于现有应用程序,或者仅基于 PowerShell Web 页面创建完整的应用程序。PowerShell Server 自带的轻量级的 WebServer 允许用户从web访问PowerShell 脚本而不需要额外地安装 Microsoft IIS。
PowerShell Web Publishing可在ASP.NET平台运行,通过自定义的IHttpHandler映射到*.ps1x文件。因此,PowerShell Web Publishing页面可与任何ASP.NET应用程序交互。这样可充分利用 PowerShell Web Server运行现有的应用系统,也可仅基于 *.ps1x 页面创建完整的应用系统。
借助 PowerShell 创建 Web 内容
借助PowerShell的Web服务只需简单几个步骤即可实现常规ASP.NET应用程序的操作:
- 添加 PowerShell Web 程序集的引用:nsoftware.PowerShellASP.dll。
- 在 Web.config 文件添加条目,映射 *.ps1x 扩展文件到 PowerShell Web发布的程序集,例如:
123<httpHandlers><add verb="*" path="*.ps1x" type="nsoftware.PowerShellASP.PSHandler, nsoftware.PowerShellASP"/></httpHandlers> - 若没有按照如上步骤操作,可配置*.ps1x扩展文件映射到IIS应用程序的ASP.NET ISAPI扩展库。
完成这些简单的步骤之后,即可在Web应用程序创建PowerShell Web Publishing页面。
发布PowerShell Web页面
PowerShell Web 页面是扩展名为 *.pslx 的文本文件,包括相互作用的常规 PowerShell 代码标记片段。不同于 ASP.NET ,在 PS1X 页面没有“代码分离”模型,这样更类似于ASP经典模式。
如下是一个简单的PS1X页面:
1 2 3 4 5 6 7 |
<html> <body> <h1> Hello <%= $request['name'] %>! </h1> </body> </html> |
正如你看到的所有页面都是HTML标记语言组成以“<%”结束,表示“运行 PowerShell 语句并输出结果”,在上面的例子中,会调用内置的 ASP.NET Request 对象查询其中的“name”的值并输出。
你还可创建完整的代码块,包含任何形式的 PowerShell 表达和控制流结构,甚至是混合使用的标记代码。例如,下面是一个简单的页面,显示目前运行的计算机进程列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <body> <table> <tr><td>ID</td><td>Name</td></tr> <% get-process | %{ %> <tr> <td><%= $_.Id %></td> <td><%= $_.ProcessName %></td> </tr> <% } %> </table> </body> </html> |
动态RSS和Atom Feeds
PowerShell Web 发布允许借助 PowerShell 脚本在 ASP.NET Web Server上生成 RSS 和 Atom feeds。Feed 可基于执行 PowerShell pipeline 中的 PowerShell RSS 特殊脚本的返回对象自动生成。
借助PowerShell Web发布创建Feed
启用PowerShell RSS脚本,如下简单步骤即可实现:
- 创建新的ASP.NET 网页/应用程序。
- 添加 nsoftware.PowerShellRSS.dll的引用,或者将其复制到你站点的 ./bin 文件夹。
- 在网站Web.Config文件注册PowerShell RSS ASP.NET Http Handler。
123<httpHandlers><add verb='GET' path='*.rs1x' type='nsoftware.PowerShellRSS.PSRSSHandler, nsoftware.PowerShellRSS'/></httpHandlers> - 若没有按照如上步骤操作,可配置*.ps1x扩展文件映射到IIS应用程序的ASP.NET ISAPI扩展库。
创建PowerShell RSS 脚本
PowerShell RSS 是一种以 .rslx 扩展名保存的标准 PowerShell 脚本。当 PowerShell Web 服务执行脚本时,pipeline 返回对象基于如下规则自动转化为 RSS/Atom Feed 条目:
- 通过 pipeline 返回的每个对象都是一个 RSS 条目。
- 如果对象只是一个常规的原始值,比如字符串或数字,其值可作为 RSS 条目的标题。
- 如果对象是一个数组,数组中的每一项都可被编写为 RSS 条目的元素。
- 如果对象是一个哈希表,那么它的每个key/value都可被编写为 RSS 条目的元素,使用key作为元素名称。
例如,如下脚本生成3个RSS条目:
1 2 3 4 5 6 7 8 |
# a simple value translates into an item "This is a simple Item" # an array translates into a single item (but no way to set the title) ,('an', 'array') # a hashtable allows you to set your own element names @{ 'name' = 'John'; Value = 'Foo' } |
自定义RSS生成
如果想要更好控制对象转换成 RSS 条目的过程,可以通过返回一个哈希表来实现。哈希表可准确控制 RSS Feed 条目的元素名称,并且允许通过添加前缀“rss:”或“atom:”覆盖基本 RSS 条目属性值。
如下是从C盘文件列表生成一个消息源,自定义条目转化过程:
1 2 3 4 5 6 7 8 9 10 11 |
ls c:\ | %{ @{ 'rss:id' = "urn:$($_.Name)"; 'rss:updated' = $_.LastWriteTime.ToString('R'); 'rss:title' = $_.Name; 'fullname' = $_.FullName; 'size' = $_.Length; 'directory' = $_.PSIsContainer; 'Mode' = $_.Mode; } } |
自定义的Feed属性
默认情况下,PowerShell Web 发布会提供一些关于生成脚本元数据的基本信息。例如feed标题将会是你 *.rslx 脚本文件名称。
然而,你也可以通过调用Set-FeedAttr函数自定义这些属性值,唯一需要的参数是属性名称和属性值。
1 2 3 |
set-feedattr 'title' "This is a sample feed" set-feedattr 'link' "http://my.feed.url.here/" |
生成Atom Feeds
PowerShell Web 服务将默认生成 RSS feeds,然而,如果你在feed URL PowerShellRSS的查询字符串中添加“?@atom” ,将会生成Atom格式的Feed。
内置对象
除了运行标准PowerShell代码外,你或许想通过调用如 HttpRequest 和 HttpResponse 的 ASP.NET 内置对象改变 HTTP runtime设置,因为 PowerShell 中使用线程模型,那些对象都不能通过 HttpContext.Runtime 直接访问。
- $Request: 包含 HttpRequest 对象。
- $Server: 包含 HttpUtility 对象。
- $Session: 包含HttpSession对象。
- $Application: 包含HttpApplication对象。
- $Response: 包含HttpResponse对象. 你可根据自己的意愿直接将代码写在响应流中,也可使用write-host和friends实现。
- $Cache: 包含HttpCache对象。
- $Context: HttpContext 对象与当前请求相关联。
这些对象工作原理与常规的 ASP.NET 应用程序一样,如下代码可实现将 HttpRequest 对象的所有值转存到 一个简单的HTML 页面:
1 2 3 |
<% $request.params | %{ write "$_ = $($request[$_])<br/>" } %> |
正如我们所看到的,这个示例并没有使用模板功能,而是使用简单的 PowerShell 表达式生成并输出的。
使用PowerShell ASP
PowerShell ASP 结合了 PowerShell 功能和 .NET 结构,以及传统 ASP 的易操作性,PowerShell ASP 脚本也可理解为 PowerShell 脚本和 HTML语言的结合。
创建你自己的 PowerShell ASP 页面
访问 http://localhost/PowerShellASP/ 可看到我们为您创建的演示页面和RSS Feeds,任何的 .ps1x 扩展名文件都将执行 PowerShell ASP 脚本。
借助 HTML 自定义你的 PowerShell ASP 页面
结合 HTML 和 PowerShell 脚本优化你的网页。例如,你需要描述一个HTML表中从 get-childitem 返回的对象。
处理用户输入
通过包含在 PowerShell ASP中 已创建的 $request 对象,访问 HTTP 上下文信息,包括查询字符串或表单输入。
创建RSS and Atom Feeds
正如 .ps1X 文件生成 HTML 输出,.rs1x 和 .as1x 文件可生成 RSS 和 Atom 输出。