如何将Powershell命令的结果保存到MS SQL DB?
例如:
我在Powershell提示符下运行:get-psdrive并在列视图中返回一些结果。
如何获取结果的每个元素并将其记录到单独的数据库行/列中?
答案 0 :(得分: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提供了一个用于SQL Server 2005的Powershell选项列表。
更多信息:
当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 2008提供的Invoke-SqlCmd
cmdlet的示例。
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')"
}