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发布的程序集,例如:
1
2
3
若没有按照如上步骤操作,可配置*.ps1x扩展文件映射到IIS应用程序的ASP.NET ISAPI扩展库。
完成这些简单的步骤之后,即可在Web应用程序创建PowerShell Web Publishing页面。
发布PowerShell Web页面
PowerShell Web 页面是扩展名为 *.pslx 的文本文件,包括相互作用的常规 PowerShell 代码标记片段。不同于 ASP.NET ,在 PS1X 页面没有“代码分离”模型,这样更类似于ASP经典模式。
如下是一个简单的PS1X页面:
Hello !
1
2
3
4
5
6
7
Hello!
正如你看到的所有页面都是HTML标记语言组成以“
你还可创建完整的代码块,包含任何形式的 PowerShell 表达和控制流结构,甚至是混合使用的标记代码。例如,下面是一个简单的页面,显示目前运行的计算机进程列表:
ID | Name |
1
2
3
4
5
6
7
8
9
10
11
12
13
ID | Name |
动态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。
1
2
3
若没有按照如上步骤操作,可配置*.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条目:
# 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' }
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盘文件列表生成一个消息源,自定义条目转化过程:
ls c:\ | %{
@{
'rss:id' = "urn:$($_.Name)";
'rss:updated' = $_.LastWriteTime.ToString('R');
'rss:title' = $_.Name;
'fullname' = $_.FullName;
'size' = $_.Length;
'directory' = $_.PSIsContainer;
'Mode' = $_.Mode;
}
}
1
2
3
4
5
6
7
8
9
10
11
lsc:\|%{
@{
'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函数自定义这些属性值,唯一需要的参数是属性名称和属性值。
set-feedattr 'title' "This is a sample feed"
set-feedattr 'link' "http://my.feed.url.here/"
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 页面:
write "$_ = $($request[$_])
"
} %>
1
2
3
write"$_ = $($request[$_])
"
}%>
正如我们所看到的,这个示例并没有使用模板功能,而是使用简单的 PowerShell 表达式生成并输出的。