中文题目: 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
()