【发布时间】:2015-10-17 20:12:52
【问题描述】:
我有一个托管在 SQL Server 2008 上的数据库,我的常规用户帐户无法访问该数据库。为了查询它,我需要使用我的特殊“管理员”帐户(只是另一个 AD 帐户,但与我的普通用户帐户在不同的组中)。
我想出了一个想法,即通过 Start-Job 在 Powershell 中使用后台作业来对该数据库运行查询,因为您可以使用与登录用户不同的凭据启动作业,因此数据库上的集成安全性可以正常工作.自从我的问题出现以来,我今天下午在 Google 上搜索了很多,看到一些人出于同样的原因采用这种方法,但他们的结果似乎确实有效——而我的结果却不是出于某种原因。
我有以下 powershell 代码:
[scriptblock]$sql_block = {
$Query = "select * from some_table"
$CW_DBConnection = New-Object Data.SqlClient.SQLConnection
$CW_DBConnection.ConnectionString = "Data Source=someserver;Initial Catalog=some_database;Integrated Security=SSPI;"
$CW_DBConnection.Open()
$Command = New-Object Data.SqlClient.SqlCommand($Query,$CW_DBConnection)
$Adapter = New-Object Data.SqlClient.SqlDataAdapter
$DataSet = New-Object Data.DataSet
$Adapter.SelectCommand = $Command
[void]$Adapter.Fill($DataSet)
$CW_DBConnection.Close()
return $DataSet
}
我通过以下方式执行:
$mySQLJob = Start-Job -ScriptBlock $sql_block -Credential $(Get-Credential -UserName AD\MyAdminAccount -Message "Enter Admin Password")
Wait-Job $mySQLJob
$results = Receive-Job $mySQLJob
这一切都很顺利。然而,当我来询问结果对象时,我看到了这个:
$results
RunspaceId : 975030ec-d336-4583-9260-48439bb34292
RemotingFormat : Xml
SchemaSerializationMode : IncludeSchema
CaseSensitive : False
DefaultViewManager : {System.Data.DataViewManagerListItemTypeDescriptor}
EnforceConstraints : True
DataSetName : NewDataSet
Namespace :
Prefix :
ExtendedProperties : {}
HasErrors : False
IsInitialized : True
Locale : en-GB
Site :
Relations : {}
Tables : {System.Data.DataRow}
Container :
DesignMode : False
ContainsListCollection : True
当我尝试进入表格位时:
$results.Tables[0]
System.Data.DataRow
$results.Tables[0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ArrayList System.Object
$results.Tables[0][0]
System.Data.DataRow
$results.Tables[0][0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
从字面上看,结果就是字符串“System.Data.DataRow”。
我在哪里搞砸了?
注意 - 从实际上以我的管理员身份执行的 powershell 会话运行它,而不是通过 Start-Job 执行它(即仅执行 SQL 位内联)按预期工作,我从数据库中获取实际数据。
【问题讨论】:
标签: sql sql-server-2008 powershell jobs powershell-4.0