Board logo

标题: [转载教程] 玩转PowerShell之(6)数据库篇 [打印本页]

作者: HAT    时间: 2013-10-29 14:44     标题: 玩转PowerShell之(6)数据库篇

玩转PowerShell之(1)检测硬盘自由空间http://bbs.bathome.net/thread-27008-1-1.html
玩转PowerShell之(2)计算篇http://bbs.bathome.net/thread-27010-1-1.html
玩转PowerShell之(3)命令执行结果http://bbs.bathome.net/thread-27011-1-1.html
玩转PowerShell之(4)email篇http://bbs.bathome.net/thread-27012-1-1.html
玩转PowerShell之(5)偷偷下载http://bbs.bathome.net/thread-27013-1-1.html
玩转PowerShell之(6)数据库篇http://bbs.bathome.net/thread-27014-1-1.html
玩转PowerShell之(7)图形菜单http://bbs.bathome.net/thread-27016-1-1.html
玩转PowerShell之(8)email篇续  - 把gmail当相册http://bbs.bathome.net/thread-27017-1-1.html
玩转PowerShell之(9)DNShttp://bbs.bathome.net/thread-27018-1-1.html

如何利用PowerShell来进行针对数据库的操作,比如查询、更新表格等等?
听起来挺复杂哦!不过不用担心,我也不是数据库方面的专家,我能够利用PS来查询数据库,你就一定也可以。
好了,第一步!
一般来说IT技术人员遇到问题,第一步应该打开www.google.com,不过今天很幸运,我手头正好有一本书叫做《Windows PowerShell Cookbook》,2007年5月由OReilly出版的。与大多数讲PowerShell的书不同,这本“PowerShell菜谱”不着重讲解PS的语言,而是罗列了若干管理员所要面对的问题,然后给出PowerShell的解决方法,大家有兴趣不妨也下载看看。

从这本书上我看到下面一段针对数据库的脚本,写得非常好,不用改,拿过来就可以用,好东西不敢藏私,与大家分享。

  1. ##############################################################################
  2. ##
  3. ## Invoke-SqlCommand.ps1
  4. ##
  5. ## From Windows PowerShell Cookbook (O'Reilly)
  6. ## by Lee Holmes (http://www.leeholmes.com/guide)
  7. ##
  8. ## Return the results of a SQL query or operation
  9. ##
  10. ## ie:
  11. ##
  12. ##    ## Use Windows authentication
  13. ##    Invoke-SqlCommand.ps1 -Sql "SELECT TOP 10 * FROM Orders"
  14. ##
  15. ##    ## Use SQL Authentication
  16. ##    $cred = Get-Credential
  17. ##    Invoke-SqlCommand.ps1 -Sql "SELECT TOP 10 * FROM Orders" -Cred $cred
  18. ##
  19. ##    ## Perform an update
  20. ##    $server = "MYSERVER"
  21. ##    $database = "Master"
  22. ##    $sql = "UPDATE Orders SET EmployeeID = 6 WHERE OrderID = 10248"
  23. ##    Invoke-SqlCommand $server $database $sql
  24. ##
  25. ##    $sql = "EXEC SalesByCategory 'Beverages'"
  26. ##    Invoke-SqlCommand -Sql $sql
  27. ##
  28. ##    ## Access an access database
  29. ##    Invoke-SqlCommand (Resolve-Path access_test.mdb) -Sql "SELECT * FROM Users"
  30. ##
  31. ##    ## Access an excel file
  32. ##    Invoke-SqlCommand (Resolve-Path xls_test.xls) -Sql 'SELECT * FROM [Sheet1$]'
  33. ##
  34. ##############################################################################
  35. param(
  36.     [string] $dataSource = ".\SQLEXPRESS",
  37.     [string] $database = "Northwind",
  38.     [string] $sqlCommand = $(throw "Please specify a query."),
  39.     [System.Management.Automation.PsCredential] $credential
  40.   )
  41. ## Prepare the authentication information. By default, we pick
  42. ## Windows authentication
  43. $authentication = "Integrated Security=SSPI;"
  44. ## If the user supplies a credential, then they want SQL
  45. ## authentication
  46. if($credential)
  47. {
  48.     $plainCred = $credential.GetNetworkCredential()
  49.     $authentication =
  50.         ("uid={0};pwd={1};" -f $plainCred.Username,$plainCred.Password)
  51. }
  52. ## Prepare the connection string out of the information they
  53. ## provide
  54. $connectionString = "Provider=sqloledb; " +
  55.                     "Data Source=$dataSource; " +
  56.                     "Initial Catalog=$database; " +
  57.                     "$authentication; "
  58. ## If they specify an Access database or Excel file as the connection
  59. ## source, modify the connection string to connect to that data source
  60. if($dataSource -match '\.xls$|\.mdb
  61. 呵呵,里面都已经有了详细的解释如何使用,就不需要我多做解释了。我用这段脚本查询过sql数据库和access数据库,另外它还可以用来查询excel文档!真的很棒!
  62. http://bbs.winos.cn/thread-28867-1-1.html)
  63. {
  64.     $connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$dataSource; "
  65.     if($dataSource -match '\.xls
  66. 呵呵,里面都已经有了详细的解释如何使用,就不需要我多做解释了。我用这段脚本查询过sql数据库和access数据库,另外它还可以用来查询excel文档!真的很棒!
  67. http://bbs.winos.cn/thread-28867-1-1.html)
  68.     {
  69.         $connectionString += 'Extended Properties="Excel 8.0;"; '
  70.         ## Generate an error if they didn't specify the sheet name properly
  71.         if($sqlCommand -notmatch '\[.+\$\]')
  72.         {
  73.             $error = 'Sheet names should be surrounded by square brackets, and ' +
  74.                        'have a dollar sign at the end: [Sheet1$]'
  75.             Write-Error $error
  76.             return
  77.         }
  78.     }
  79. }
  80. ## Connect to the data source and open it
  81. $connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
  82. $command = New-Object System.Data.OleDb.OleDbCommand $sqlCommand,$connection
  83. $connection.Open()
  84. ## Fetch the results, and close the connection
  85. $adapter = New-Object System.Data.OleDb.OleDbDataAdapter $command
  86. $dataset = New-Object System.Data.DataSet
  87. [void] $adapter.Fill($dataSet)
  88. $connection.Close()
  89. ## Return all of the rows from their query
  90. $dataSet.Tables | Select-Object -Expand Rows
复制代码


呵呵,里面都已经有了详细的解释如何使用,就不需要我多做解释了。我用这段脚本查询过sql数据库和access数据库,另外它还可以用来查询excel文档!真的很棒!

http://bbs.winos.cn/thread-28867-1-1.html




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2