2011-12-27 75 views
0

如何將Powershell命令的結果保存到MS SQL DB?PowerShell記錄到DB的結果

例如:

我在Powershell命令提示符運行以下命令:GET-PSDrive來並返回列視圖中的一些結果。

如何獲取結果的每個元素並將其記錄到單獨的DB行/列中?

回答

3

我建議將命令的結果保存到變量中。如:

$drives = Get-PSDrive 

變量可以被索引這樣的:

第一個元素:

$drives[0] 

最後一個元素:

$drives[-1] 

您可以通過與foreach每個元素迭代:

foreach ($drive in $drives) { 
    # current drive is $drive 
} 

還是ForEach-Object的cmdlet:

$drives | ForEach-Object { 
    # current drive is $_ 
} 

現在,你有來填充表中的數據與您準備連接到數據庫,並執行數據庫記錄插入。

您可以使用Powershell SQL Server cmdlet,也可以使用.NET對象進行連接。根據您所使用的SQL服務器的版本,將決定使用哪個版本。 SQL Server 2008有Powershell cmdlet,2005沒有。有關於SQL Server 2008 Powershell集成here的豐富信息。對於SQL Server 2005,您有一些不同的選項。這個問題的答案here提供的PowerShell的選項列表與SQL Server使用2005

更多信息:

當PowerShell將顯示對象的信息,它使用一種類型的系統有選擇地確定哪些對象的屬性顯示屏幕上。並非所有對象都顯示出來。 PowerShell使用XML文件來決定顯示哪些特性被存儲在PowerShell的目錄:

dir $PSHOME/*format* | select Name 

返回的對象從Get-PsDriveSystem.Management.Automation.PSDriveInfo類型。文件PowerShellCore.format.ps1xml告訴格式化引擎在Powershell窗口中顯示哪些屬性。它可能只是這些是您正在查找的確切屬性,但許多對象具有不顯示的其他屬性。例如,System.IO.DirectoryInfo類型的對象默認情況下不會顯示其所有屬性。您可以查看使用Get-Member cmdlet的,例如對象的屬性的其餘部分:

Get-Item $env:windir | Get-Member 

這將顯示所有的對象的方法和屬性。您還可以查看所有使用使用通配符的屬性參數Select-Object cmdlet中的對象的屬性:

Get-Item $env:windir | Select-Object -Property * 

要訪問一個對象的屬性值,請使用以下語法:

$objectVariable.ObjectProperty 

現在你知道如何查看對象屬性並訪問它們的值,您將需要使用它來構造Insert SQL語句。下面是使用提供SQL Server中的Invoke-SqlCmd cmdlet的一個例子2008年

Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('a', 'b')" 

下面是Get-PsDrive返回例如,通過對象循環假設你有一個名爲MyTable表,它有其接受的文本數據至少兩列:

Get-PsDrive | ForEach-Object { 
    $providerName = $_.Name 
    $providerRoot = $_.Root 
    Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('$providerName', '$providerRoot')" 
} 
+0

此工作將與多列? – 2011-12-27 22:23:08

+0

我假設你指的是Powershell窗口中輸出的列?如果是的話,答案是絕對的。您是動態創建新表還是要添加預定義列的表格?如果您提供有關表格的更多詳細信息,我可以進一步幫助您。 – 2011-12-27 22:31:17

+0

使用DB中預先創建的表格作爲每個結果將包含類似的細節每次 – 2011-12-27 22:42:27