共用方式為


Windows PowerShell:利用 PowerShell 處理資料庫

您可以使用一些 Windows PowerShell 程式碼來設定資料庫,只儲存您所需的內容。

Don Jones

資料庫是資料存儲之王。 那麼為什麼不利用這些資料庫,如 SQL Server 存儲一些可以使您的生活更輕鬆的管理資訊的呢? 您可以存儲伺服器名稱、 Windows 版本、 服務包級別、 最後一個管理員登錄、 這種東西。

它是與 Windows PowerShell,都是很容易,因為您可以使用它來本機訪問 Microsoft 基礎資料庫功能。NET 框架。 這現在看上去不太像 Windows PowerShell 腳本和更多像一個 C# 程式。 不過,您所需要的代碼是很容易範本。 你可以帶我來你這裡與幾個次要的改變它適應幾乎任何情況。

用於 SQL 腳本

讓我們假設您有一個名為 SYSINFO 的 SQL Server 2008 資料庫。 資料庫已命名伺服器的表。 該表已五列: 伺服器名稱、 使用者名、 LastLogon、 原因和 SPVersion。 這可以是大多是簡單的文本列的 varchar 類型。

然而,使 LastLogon 日期時間列。 它現在使用 SQL Server 設置為其預設值的函數。 這樣,每次添加新行,它將包含當前日期和時間,而不需要您手動指定。 使原因列 varchar(MAX),如有必要,它可以包含文本,很多。

創建登入指令檔在群組原則物件 (GPO),將 GPO 連結到您的伺服器所在的組織單位 (OU)。 每次有人登錄到伺服器運行該腳本時。 使用 Windows PowerShell 腳本,您可以在任何裝有 Windows PowerShell 2.0 的電腦上的東西。 您需要確保您已經從 Windows Server 2008 R2 (或 Windows 7 遠端伺服器管理工具包或寄宿) 來編輯該 GPO 時有基於 Windows PowerShell 登入指令檔選項的 GPO 範本。

這裡是您需要的腳本。 請注意我使用 ↵ 來指示應在此按 enter 鍵。 僅按 enter 鍵時你來該符號,如果您希望它能正常工作 (您可以將複製的 HTML 使用符號 & crarr ; 實體):

$reason = Read-Host 'Reason are you logging on'↵
$reason.replace("'","''")↵

這兩行提示有人為他們正在登錄到伺服器的原因 — — 這一點是相當重要的跟蹤。 替換功能會將任何單引號替換使用兩個單引號,確保我們稍後構建的 SQL 語句將正常工作。 這並不被為了故意 SQL 注入式攻擊的防範。 畢竟,我們談論受信任的管理員,正確嗎?

此線將檢索作業系統的資訊:

$os = Get WmiInfo Win32_OperatingSystem↵

在這裡重要的資料是伺服器的名稱和其當前的服務包版本。 您可能還需要 BuildNumber 屬性,告訴您您正在處理的 Windows 版本。

此線載入的一部分。負責處理資料庫的.NET 框架:

[assembly.reflection]::loadwithpartialname ('System.Data ') ↵

這些行創建新的資料庫連接:

$conn = New-Object System.Data.SqlClient.SqlConnection↵
$conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵

如果您不使用 SQL Server 2008,連接字串可能會有點不同 (訪問ConnectionStrings.com來查找各種不同的資料庫的連接字串示例):

$conn.open () ↵

現在該連接是打開並可供使用。

這兩條線創建是我將使用 SQL 伺服器發送查詢的 SQL 命令。 我已經設置其連接屬性設置為"打開",以便 Windows PowerShell 已實際發送命令的方式:

$cmd = New-Object System.Data.SqlClient.SqlCommand↵
$cmd.connection = $conn↵

這所有辛勤的工作。 它創建一個 SQL"插入"查詢到資料庫表中插入新行。 請注意我使用 – f 格式設置運算子將四條資訊插入到查詢。 資訊被插入 {x} 預留位置,它提供如下操作員的逗號分隔清單中的順序相同:

$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()↵

請確保您關閉該連接或你得打你一頓頭的後面的資料庫管理員。 您將看到對ConnectionStrings.com,您可以訪問大量的資料庫。

如果您使用 SQL Server 以外,你得改改"OleDb"物件名稱"SqlClient"部分。 此外,它已不推薦使用基於檔的資料庫訪問像。 為之一,以獲取驅動程式,你得要上安裝,訪問您的伺服器,這將是一個可怕的想法。 另一種,這些資料庫的性能達不到您將需要為此工作好的水準。

如果你沒有可以承載資料庫的 SQL Server 實例,獲取一份快遞版安裝的地方。 這足夠低的這種技術將可能產生的交通。

很明顯,您可以修改此做相當多的技術。 可以將列添加到資料庫,並讓您的腳本收集其他資訊。 您需要做的一件事是精通 SQL 語言本身。 您不需要的大師,但你要能夠編寫基本的查詢。

如果您需要上 (在此級別工作的幾乎相同每個主要的資料庫平臺) 的 SQL 語言入門,簽出這視頻系列創建行業標準 SQL 語言提供了完整的教程。 它還包括像 SQL Server、 Oracle、 MySQL 平臺之間的主要差異,等等。

這裡是整個腳本:

$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()↵

Don Jones

**Don Jones**是一個受歡迎的 Windows PowerShell 作者、 教練和揚聲器。 他最新的書是"瞭解 Windows PowerShell 中每月的午餐"(曼甯,2011年) ; 請訪問MoreLunches.com的資訊和內容的免費同伴。 他也是可用的現場培訓課程 (訪問ConcentratedTech.com/training的詳細資訊)。

相關內容