2008脚本大赛PowerShell初级组Event 9解题及分析

中文题目: http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/chs/bevent9.mspx

官方解题: http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/bpssol09.mspx

本来不打算参加初级组, 不过我是个懒人, 一直没有完成PowerShell 2.0的答题要求, 拖到高级组没有题目时候, 我才慌里慌张决定完成初级组最后两题. 第9题本身很容易, 只是需要访问access文件, 下面的题目中, 利用COM实现了对access数据库的访问. 连接串看起来很晕, 它只是按照规范定义的一组名称和值的组合. 譬如: Provider是Microsoft.Jet.OLEDB.4.0. 而数据源是C:/script/spool.mdb文件.

使用最简单SELECT语句, 我们返回了所有的信息, 这些信息被保存在$objRecordset中, 我们通过方法将这些值保存到变量中. 利用公式计算出结果., 并进行排序, 利用2.0中Date-Grid进行显示. 题目比较简单, 主要难点在于如何处理Access数据库, 需要使用COM中的ADO.

#  PowerShell 2.0
 
$objConnection   =  New - Object  - comobject ADODB . Connection
$objRecordset   =  New - Object  - comobject ADODB . Recordset
$objConnection . Connectionstring  =   " Provider = Microsoft.Jet.OLEDB.4.0;Data Source = C:Scriptspool.mdb "
$objConnection . Open ()
$objRecordset . Open ( " Select * from SwimmingPool " ,   $objConnection ,   1 ,   1 )
$objRecordset . MoveFirst()
$(
do  {
  
$Name   =   $objRecordset . Fields . Item( " Customer " ) . Value;
  
$Length   =   $objRecordset . Fields . Item( " Length " ) . Value;
  
$Width   =   $objRecordset . Fields . Item( " Width " ) . Value;
  
$Slope   =   $objRecordset . Fields . Item( " Slope " ) . Value;
  
if  ( $Slope ) {  $Depth   =  ( $objRecordset . Fields . Item( " SStart " ) . Value  +   $objRecordset . Fields . Item( " SEnd " ) . Value)  /   2  }
  
else  {  $Depth   =   $objRecordset . Fields . Item( " Depth " ) . Value; }
  
$Volumn   =   $Length   *   $Width   *   $Depth   *   1000
  
, ( $Name ,   $Volumn )
  
$objRecordset . MoveNext()
until  ( $objRecordset . EOF ))  |   Select - Object  - Property @{ n = " Name " ;e = { $_ [ 0 ]} } , @{n = " Volume of Water " ;e = { $_ [ 1 ]}}  |  Out - GridView
$objRecordset . Close () 
$objConnection . Close () 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值