核心代碼
#配置信息
$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ù)庫連接
$SqlConn.open()
#執(zhí)行語句方法一
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.connection = $SqlConn
$SqlCmd.commandtext = 'delete top(1) from dbo.B'
$SqlCmd.executenonquery()
#執(zhí)行語句方法二
$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ù)庫連接
$SqlConn.close()
下面是來自微軟的官方幫助文檔:Windows PowerShell:使用 PowerShell 處理數(shù)據(jù)庫
您可以使用一些 Windows PowerShell 代碼來配置您的數(shù)據(jù)庫,以存儲(chǔ)您所需的信息。
Don Jones
數(shù)據(jù)庫是數(shù)據(jù)存儲(chǔ)之王。 那么為什么不利用這些數(shù)據(jù)庫,如 SQL Server 存儲(chǔ)一些可以使您的生活更輕松的管理信息的呢? 您可以存儲(chǔ)服務(wù)器名稱、 Windows 版本、 服務(wù)包級(jí)別、 最后一個(gè)管理員登錄、 這種東西。
它是與 Windows PowerShell,都是很容易,因?yàn)槟梢允褂盟鼇肀緳C(jī)訪問 Microsoft 基礎(chǔ)數(shù)據(jù)庫功能。NET 框架。 這現(xiàn)在看上去不太像 Windows PowerShell 腳本和更多像一個(gè) C# 程序。 不過,您所需要的代碼是很容易模板。 你可以帶我來你這里與幾個(gè)次要的改變它適應(yīng)幾乎任何情況。
用于 SQL 腳本
讓我們假設(shè)您有一個(gè)名為 SYSINFO 的 SQL Server 2008 數(shù)據(jù)庫。 數(shù)據(jù)庫已命名服務(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ù)器管理工具包或寄宿) 來編輯該 GPO 時(shí)有基于 Windows PowerShell 登錄腳本選項(xiàng)的 GPO 模板。
這里是您需要的腳本。 請(qǐng)注意我使用 ↵ 來指示應(yīng)在此按 enter 鍵。 僅按 enter 鍵時(shí)你來該符號(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 語句將正常工作。 這并不被為了故意 SQL 注入式攻擊的防范。 畢竟,我們談?wù)撌苄湃蔚墓芾韱T,正確嗎?
此線將檢索操作系統(tǒng)的信息:
$os = Get WmiInfo Win32_OperatingSystem↵
在這里重要的數(shù)據(jù)是服務(wù)器的名稱和其當(dāng)前的服務(wù)包版本。 您可能還需要 BuildNumber 屬性,告訴您您正在處理的 Windows 版本。
此線加載的一部分。負(fù)責(zé)處理數(shù)據(jù)庫的.NET 框架:
[assembly.reflection]::loadwithpartialname ('System.Data ') ↵
這些行創(chuàng)建新的數(shù)據(jù)庫連接:
$conn = New-Object System.Data.SqlClient.SqlConnection↵
$conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵
如果您不使用 SQL Server 2008,連接字符串可能會(huì)有點(diǎn)不同 (訪問ConnectionStrings.com來查找各種不同的數(shù)據(jù)庫的連接字符串示例):
$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ù)庫表中插入新行。 請(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ù)庫連接:
$cmd.executenonquery()↵
$conn.close()↵
請(qǐng)確保您關(guān)閉該連接或你得打你一頓頭的后面的數(shù)據(jù)庫管理員。 您將看到對(duì)ConnectionStrings.com,您可以訪問大量的數(shù)據(jù)庫。
如果您使用 SQL Server 以外,你得改改"OleDb"對(duì)象名稱"SqlClient"部分。 此外,它已不推薦使用基于文件的數(shù)據(jù)庫訪問像。 為之一,以獲取驅(qū)動(dòng)程序,你得要上安裝,訪問您的服務(wù)器,這將是一個(gè)可怕的想法。 另一種,這些數(shù)據(jù)庫的性能達(dá)不到您將需要為此工作好的水平。
如果你沒有可以承載數(shù)據(jù)庫的 SQL Server 實(shí)例,獲取一份快遞版安裝的地方。 這足夠低的這種技術(shù)將可能產(chǎn)生的交通。
很明顯,您可以修改此做相當(dāng)多的技術(shù)。 可以將列添加到數(shù)據(jù)庫,并讓您的腳本收集其他信息。 您需要做的一件事是精通 SQL 語言本身。 您不需要的大師,但你要能夠編寫基本的查詢。
如果您需要上 (在此級(jí)別工作的幾乎相同每個(gè)主要的數(shù)據(jù)庫平臺(tái)) 的 SQL 語言入門,簽出這視頻系列創(chuàng)建行業(yè)標(biāo)準(zhǔn) SQL 語言提供了完整的教程。 它還包括像 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()↵
您可能感興趣的文章:- Powershell訪問SQL Server數(shù)據(jù)庫代碼實(shí)例
- PowerShell腳本開發(fā)嘗試登錄SQL Server
- powershell玩轉(zhuǎn)SQL SERVER所有版本的方法