PowerShell連接SQL SERVER數(shù)據(jù)庫(kù)進(jìn)行操作的實(shí)現(xiàn)代碼
核心代碼
#配置信息 $Database = 'DemoDB' $Server = '"WIN-AHAU9NO5R6U\DOG"' $UserName = 'kk' $Password = '123456' #創(chuàng)建連接對(duì)象 $SqlConn = New-Object System.Data.SqlClient.SqlConnection #使用賬號(hào)連接MSSQL $SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password" #或者以 windows 認(rèn)證連接 MSSQL #$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security=SSPI;" #打開數(shù)據(jù)庫(kù)連接 $SqlConn.open() #執(zhí)行語(yǔ)句方法一 $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.connection = $SqlConn $SqlCmd.commandtext = 'delete top(1) from dbo.B' $SqlCmd.executenonquery() #執(zhí)行語(yǔ)句方法二 $SqlCmd = $SqlConn.CreateCommand() $SqlCmd.commandtext = 'delete top(1) from dbo.B' $SqlCmd.ExecuteScalar() #方法三,查詢顯示 $SqlCmd.commandtext = 'select name,recovery_model_desc,log_reuse_wait_desc from sys.databases' $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $set = New-Object data.dataset $SqlAdapter.Fill($set) $set.Tables[0] | Format-Table -Auto #關(guān)閉數(shù)據(jù)庫(kù)連接 $SqlConn.close()
下面是來(lái)自微軟的官方幫助文檔:Windows PowerShell:使用 PowerShell 處理數(shù)據(jù)庫(kù)
您可以使用一些 Windows PowerShell 代碼來(lái)配置您的數(shù)據(jù)庫(kù),以存儲(chǔ)您所需的信息。
Don Jones
數(shù)據(jù)庫(kù)是數(shù)據(jù)存儲(chǔ)之王。 那么為什么不利用這些數(shù)據(jù)庫(kù),如 SQL Server 存儲(chǔ)一些可以使您的生活更輕松的管理信息的呢? 您可以存儲(chǔ)服務(wù)器名稱、 Windows 版本、 服務(wù)包級(jí)別、 最后一個(gè)管理員登錄、 這種東西。
它是與 Windows PowerShell,都是很容易,因?yàn)槟梢允褂盟鼇?lái)本機(jī)訪問(wèn) Microsoft 基礎(chǔ)數(shù)據(jù)庫(kù)功能。NET 框架。 這現(xiàn)在看上去不太像 Windows PowerShell 腳本和更多像一個(gè) C# 程序。 不過(guò),您所需要的代碼是很容易模板。 你可以帶我來(lái)你這里與幾個(gè)次要的改變它適應(yīng)幾乎任何情況。
用于 SQL 腳本
讓我們假設(shè)您有一個(gè)名為 SYSINFO 的 SQL Server 2008 數(shù)據(jù)庫(kù)。 數(shù)據(jù)庫(kù)已命名服務(wù)器的表。 該表已五列: 服務(wù)器名稱、 用戶名、 LastLogon、 原因和 SPVersion。 這可以是大多是簡(jiǎn)單的文本列的 varchar 類型。
然而,使 LastLogon 日期時(shí)間列。 它現(xiàn)在使用 SQL Server 設(shè)置為其默認(rèn)值的函數(shù)。 這樣,每次添加新行,它將包含當(dāng)前日期和時(shí)間,而不需要您手動(dòng)指定。 使原因列 varchar(MAX),如有必要,它可以包含文本,很多。
創(chuàng)建登錄腳本在組策略對(duì)象 (GPO),將 GPO 鏈接到您的服務(wù)器所在的組織單位 (OU)。 每次有人登錄到服務(wù)器運(yùn)行該腳本時(shí)。 使用 Windows PowerShell 腳本,您可以在任何裝有 Windows PowerShell 2.0 的計(jì)算機(jī)上的東西。 您需要確保您已經(jīng)從 Windows Server 2008 R2 (或 Windows 7 遠(yuǎn)程服務(wù)器管理工具包或寄宿) 來(lái)編輯該 GPO 時(shí)有基于 Windows PowerShell 登錄腳本選項(xiàng)的 GPO 模板。
這里是您需要的腳本。 請(qǐng)注意我使用 ↵ 來(lái)指示應(yīng)在此按 enter 鍵。 僅按 enter 鍵時(shí)你來(lái)該符號(hào),如果您希望它能正常工作 (您可以將復(fù)制的 HTML 使用符號(hào) & crarr ; 實(shí)體):
$reason = Read-Host 'Reason are you logging on'↵ $reason.replace("'","''")↵
這兩行提示有人為他們正在登錄到服務(wù)器的原因 — — 這一點(diǎn)是相當(dāng)重要的跟蹤。 替換功能會(huì)將任何單引號(hào)替換使用兩個(gè)單引號(hào),確保我們稍后構(gòu)建的 SQL 語(yǔ)句將正常工作。 這并不被為了故意 SQL 注入式攻擊的防范。 畢竟,我們談?wù)撌苄湃蔚墓芾韱T,正確嗎?
此線將檢索操作系統(tǒng)的信息:
$os = Get WmiInfo Win32_OperatingSystem↵
在這里重要的數(shù)據(jù)是服務(wù)器的名稱和其當(dāng)前的服務(wù)包版本。 您可能還需要 BuildNumber 屬性,告訴您您正在處理的 Windows 版本。
此線加載的一部分。負(fù)責(zé)處理數(shù)據(jù)庫(kù)的.NET 框架:
[assembly.reflection]::loadwithpartialname ('System.Data ') ↵
這些行創(chuàng)建新的數(shù)據(jù)庫(kù)連接:
$conn = New-Object System.Data.SqlClient.SqlConnection↵ $conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵
如果您不使用 SQL Server 2008,連接字符串可能會(huì)有點(diǎn)不同 (訪問(wèn)ConnectionStrings.com來(lái)查找各種不同的數(shù)據(jù)庫(kù)的連接字符串示例):
$conn.open () ↵
現(xiàn)在該連接是打開并可供使用。
這兩條線創(chuàng)建是我將使用 SQL 服務(wù)器發(fā)送查詢的 SQL 命令。 我已經(jīng)設(shè)置其連接屬性設(shè)置為"打開",以便 Windows PowerShell 已實(shí)際發(fā)送命令的方式:
$cmd = New-Object System.Data.SqlClient.SqlCommand↵ $cmd.connection = $conn↵
這所有辛勤的工作。 它創(chuàng)建一個(gè) SQL"插入"查詢到數(shù)據(jù)庫(kù)表中插入新行。 請(qǐng)注意我使用 – f 格式設(shè)置運(yùn)算符將四條信息插入到查詢。 信息被插入 {x} 占位符,它提供如下操作員的逗號(hào)分隔列表中的順序相同:
$cmd.commandtext = "INSERT INTO servers (servername,username,spversion,reason) VALUES('{0}','{1}','{2}','{3}')" -f $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵
現(xiàn)在我會(huì)執(zhí)行查詢,并關(guān)閉數(shù)據(jù)庫(kù)連接:
$cmd.executenonquery()↵ $conn.close()↵
請(qǐng)確保您關(guān)閉該連接或你得打你一頓頭的后面的數(shù)據(jù)庫(kù)管理員。 您將看到對(duì)ConnectionStrings.com,您可以訪問(wèn)大量的數(shù)據(jù)庫(kù)。
如果您使用 SQL Server 以外,你得改改"OleDb"對(duì)象名稱"SqlClient"部分。 此外,它已不推薦使用基于文件的數(shù)據(jù)庫(kù)訪問(wèn)像。 為之一,以獲取驅(qū)動(dòng)程序,你得要上安裝,訪問(wèn)您的服務(wù)器,這將是一個(gè)可怕的想法。 另一種,這些數(shù)據(jù)庫(kù)的性能達(dá)不到您將需要為此工作好的水平。
如果你沒(méi)有可以承載數(shù)據(jù)庫(kù)的 SQL Server 實(shí)例,獲取一份快遞版安裝的地方。 這足夠低的這種技術(shù)將可能產(chǎn)生的交通。
很明顯,您可以修改此做相當(dāng)多的技術(shù)。 可以將列添加到數(shù)據(jù)庫(kù),并讓您的腳本收集其他信息。 您需要做的一件事是精通 SQL 語(yǔ)言本身。 您不需要的大師,但你要能夠編寫基本的查詢。
如果您需要上 (在此級(jí)別工作的幾乎相同每個(gè)主要的數(shù)據(jù)庫(kù)平臺(tái)) 的 SQL 語(yǔ)言入門,簽出這視頻系列創(chuàng)建行業(yè)標(biāo)準(zhǔn) SQL 語(yǔ)言提供了完整的教程。 它還包括像 SQL Server、 Oracle、 MySQL 平臺(tái)之間的主要差異,等等。
這里是整個(gè)腳本:
$reason = Read-Host 'Reason are you logging on'↵ $reason.replace("'","''")↵ $os = Get-WmiInfo Win32_OperatingSystem↵ [assembly.reflection]::loadwithpartialname('System.Data')↵ $conn = New-Object System.Data.SqlClient.SqlConnection↵ $conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵ $conn.open()↵ $cmd = New-Object System.Data.SqlClient.SqlCommand↵ $cmd.connection = $conn↵ $cmd.commandtext = "INSERT INTO servers (servername,username,spversion,reason) VALUES('{0}','{1}','{2}','{3}')" -f $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵ $cmd.executenonquery()↵ $conn.close()↵
相關(guān)文章
Powershell從注冊(cè)表中查詢默認(rèn)MAPI客戶端的例子
這篇文章主要介紹了Powershell從注冊(cè)表中查詢默認(rèn)MAPI客戶端的例子2014-05-05PowerShell快速創(chuàng)建一個(gè)指定大小文件的實(shí)例分享
這篇文章主要介紹了PowerShell快速創(chuàng)建一個(gè)指定大小文件的實(shí)例分享,需要的朋友可以參考下2014-04-04Powershell訪問(wèn)SQL Server數(shù)據(jù)庫(kù)代碼實(shí)例
這篇文章主要介紹了Powershell訪問(wèn)SQL Server數(shù)據(jù)庫(kù)代碼實(shí)例,本文直接給出代碼,使用時(shí)只需要替換數(shù)據(jù)庫(kù)配置參數(shù)即可,需要的朋友可以參考下2014-11-11Windows Powershell創(chuàng)建對(duì)象
.Net類型中的方法功能很強(qiáng)大??梢酝ㄟ^(guò)類型的構(gòu)造函數(shù)創(chuàng)建新的對(duì)象,也可以將已存在的對(duì)象轉(zhuǎn)換成指定的類型。2014-10-10PowerShell中使用Filter來(lái)創(chuàng)建管道輸入函數(shù)
這篇文章主要介紹了PowerShell中使用Filter來(lái)創(chuàng)建管道輸入函數(shù),Filter創(chuàng)建的函數(shù)跟Function創(chuàng)建的函數(shù),在本質(zhì)上是一樣的,需要的朋友可以參考下2014-07-07PowerShell入門教程之Cmd命令與PowerShell命令相互調(diào)用的方法
這篇文章主要介紹了PowerShell入門教程之Cmd命令與PowerShell命令相互調(diào)用的方法,本文講解了在Cmd命令中調(diào)用PowerShell命令、在PowerShell命令中調(diào)用Cmd命令的方法,需要的朋友可以參考下2014-10-10