如何將Powershell命令的結果保存到MS SQL DB?PowerShell記錄到DB的結果
例如:
我在Powershell命令提示符運行以下命令:GET-PSDrive來並返回列視圖中的一些結果。
如何獲取結果的每個元素並將其記錄到單獨的DB行/列中?
如何將Powershell命令的結果保存到MS SQL DB?PowerShell記錄到DB的結果
例如:
我在Powershell命令提示符運行以下命令:GET-PSDrive來並返回列視圖中的一些結果。
如何獲取結果的每個元素並將其記錄到單獨的DB行/列中?
我建議將命令的結果保存到變量中。如:
$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-PsDrive
是System.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')"
}
此工作將與多列? – 2011-12-27 22:23:08
我假設你指的是Powershell窗口中輸出的列?如果是的話,答案是絕對的。您是動態創建新表還是要添加預定義列的表格?如果您提供有關表格的更多詳細信息,我可以進一步幫助您。 – 2011-12-27 22:31:17
使用DB中預先創建的表格作爲每個結果將包含類似的細節每次 – 2011-12-27 22:42:27