2008脚本大赛PowerShell初级组Event 9解题及分析
2008-03-18 20:41
375 查看
中文题目: 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()
官方解题: 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()
相关文章推荐
- 2008脚本大赛PowerShell初级组Event 10解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 4解题及分析
- 2008脚本大赛PowerShell高级组Event 6解题及分析
- 2008脚本大赛PowerShell高级组Event 8解题及分析
- 2008脚本大赛PowerShell高级组Event 1解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 5解题及分析
- 2008脚本大赛PowerShell高级组Event 7解题及分析
- 2008脚本大赛PowerShell高级组Event 9解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 9解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 6解题及分析
- 2008脚本大赛PowerShell高级组Event 2解题及分析
- 2008脚本大赛PowerShell高级组Event 5解题及分析
- 2008脚本大赛PowerShell高级组Event 4解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 7解题及分析
- 2008脚本大赛PowerShell高级组Event 3解题及分析
- Powershell脚本获取列表上event receiver信息并输出到一个csv文件中
- [3月28日的脚本] 修复Event ID 4107 and Event ID 11 问题 (PowerShell)
- 2013年4月_武科大程序设计大赛(复赛-非专业组)_解题报告(problem 1001)
- Installshield 2008 And 脚本 (八 )