2017-07-11 20 views
2

我用下面的函數來連接到PostgreSQL數據庫:添加廣告屬性到SQL查詢輸出

function Get-ODBC-Data{ 
    param([string]$query=$(throw 'query is mandatory.')) 
    $conn = New-Object System.Data.Odbc.OdbcConnection 
    $conn.ConnectionString = "Driver={PostgreSQL Unicode(x64)};Server=192.168.0.120;Port=7050;Database=datbase;Uid=user;Pwd=pass;" 
    $conn.open() 
    $comm = New-object System.Data.Odbc.OdbcCommand($query,$conn) 
    $dase = New-Object system.Data.DataSet 
    (New-Object system.Data.odbc.odbcDataAdapter($comm)).fill($dase) | out-null 
    $conn.close() 
    $dase.Tables[0] 
} 

下面的查詢返回所有的用戶ID和用戶代碼。用戶ID恰好匹配Active Directory的sAMAccountName屬性。

$query = "SELECT userid,code FROM pval_users" 
$users = Get-ODBC-Data -query $query 

$用戶的示例內容:

userid code 
------- ------ 
jdoe  34576 
bmil  98765 

我要嵌入特定的廣告屬性$未存儲在數據庫中的用戶,從而使輸出看起來像:

userid First Last code 
------- ------ ----- ----- 
jdoe  John Doe 34576 
bmil  Bill Miller 98765 

什麼是實現此目標的「最佳」解決方案?我有一個想法,使用Get-ADuser -id $_.userid | select givenName, sn,但我沒有設法得到它的輸出,我需要它的順序。

在此先感謝!

回答

1

你可以這樣做:

$Query = "SELECT userid,code FROM pval_users" 
$Users = Get-ODBC-Data -query $Query 

$Users | ForEach-Object { 
    $ADUser = Get-ADuser -id $_.userid | select givenName, surname 
    If ($ADUser) { 
     $_ | Add-Member -Name 'First' -Value $ADUser.givenName -MemberType NoteProperty 
     $_ | Add-Member -Name 'Last' -Value $ADUser.surname -MemberType NoteProperty 
    }Else{ 
     Write-Warning "$($_.userid) not found in AD" 
    } 

    $_ 
} 

說明:

  • 用途Get-ADUser你提出帶回給定名稱和姓屬性
  • 如果發現廣告用戶,使用Add-Member將這些屬性添加到當前用戶項目
  • 如果在AD中找不到用戶,則會輸出警告
  • 輸出用戶

此外,如果你想更有活力一點,不介意的最終目標是相同的,因爲它們是在AD中的屬性名稱,你可以這樣做:

$Users | ForEach-Object { 
    $ADUser = Get-ADuser -id $_.userid | select givenName, surname 
    If ($ADUser) { 
     ForEach ($Prop in $ADUser.PSObject.Properties) { 
      $_ | Add-Member -Name $Prop.Name -Value $Prop.Value -MemberType $Prop.MemberType 
     } 
    }Else{ 
     Write-Warning "$($_.userid) not found in AD" 
    } 

    $_ 
} 

它使用一個foreach循環通過Get-ADUser返回的所有屬性進行迭代,並將它們添加到收藏$Users在當前用戶。

+0

非常感謝Mark!正是我在找什麼。我認爲選項1將適合我的需求。目前我仍然有一個小問題,即姓氏顯示爲空,儘管AD中的字段已經填滿。 – user7986342

+0

'surname'而不是'sn'做了詭計;) – user7986342

+0

我已經修改了答案,以備將來參考。 –