システム内の各ドメイン コントローラをループして一連の結果を返す文字列を使用して、Active Directory にクエリを実行しています。このスクリプトは export-csv でうまく機能しますが、カスタム情報フィールド (キャリッジ リターンを含む) のすべてのデータを保持したいので、これを SQL テーブルに直接エクスポートしたいと思います。
Powershell によって報告されたエラーは次のとおりです。
"0" 個の引数を指定して "ExecuteNonQuery" を呼び出し中に例外が発生しました: "挿入エラー: 列名または指定された値の数がテーブル定義と一致しません。"
これはかなり冗長な応答ですが、get-object の出力と正確に一致するように、各テーブルの列を作成して名前を付けました。
パイプからの出力は次のとおりです。
SamAccountName : testuser
DisplayName : Test User (COMPANY)
info : Test Entry 1234567890
Test for output.
Entering
Multiple lines.
whenCreated : 09/11/2004 09:08:42
whenChanged : 19/07/2012 09:25:21
AccountExpires :
pwdLastSet : 13/06/2012 07:43:43
LastLogonTimestamp : 18/07/2012 15:38:35
userAccountControl : 512
Name : Test User
LastLogon :
DC : DCNAME1
コードは次のとおりです。
##--AD data output to SQL script, you need the Quest plugin!
$SamAccountName = Read-Host "Enter the username to query for last logon"
##--Query domain for all domain controllers and funnel into a forEach loop
Get-QADComputer -ComputerRole DomainController | Foreach-Object{
$dc = $_.Name
##--Query each domain controller for the user object and retrieve the LastLogon timestamp
$user = Get-QADUser -Service $dc -SamAccountName $SamAccountName -IncludedProperties info,pwdLastSet,AccountExpires,userAccountControl | Select-Object SamAccountName,displayName,info,whenCreated,whenChanged,accountExpires,pwdLastSet,lastLogonTimestamp,userAccountControl,name,LastLogon,@{n='DC';e={$dc}} |
out-host
##--Open database connection
$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=SQLSERVER; Initial Catalog=ADomain; Integrated Security=SSPI")
$conn.Open()
##--AAGH! How to grab the results of the Select-Object above?
$cmd = $conn.CreateCommand()
$cmd.CommandText ="INSERT extract VALUES ('$user')"
$cmd.ExecuteNonQuery()
##--Don't forget to close it!
$conn.Close()
今、私は何かを台無しにしていますが、それはおそらく明らかに明らかです。