1
我編寫了以下PowerShell腳本。它適用於我的非集羣SQL Server(2014版)上的作業。當我手動運行PowerShell(2012版)時,它可以在我的羣集服務器上運行。但是,當它作爲此羣集服務器上的SQL代理作業的一部分運行時,它會爲LDAP查詢中的用戶返回空結果。有任何想法嗎?我甚至沒有看到服務器在它和ldap服務器之間的防火牆上嘗試LDAP連接。這就像SQLPS甚至沒有嘗試LDAP連接。羣集實例sql作業中的LDAP連接返回空結果
#set up sql connection
$DBServer = "(<servername redacted for this post>)"
$DBName = "Aection"
$tableName = "mcommunity.phonenumbers"
$sqlConnection = new-object system.data.sqlclient.sqlconnection
$sqlconnection.connectionString = "Data Source='$dbserver';Integrated Security=SSPI;Initial Catalog='$dbname'"
$sqlConnection.Open()
#get uniquenames
$command = $sqlconnection.CreateCommand()
$command.CommandText = "select distinct uniquename from PE_employee"
$users = New-Object System.Data.DataTable
$users.load($command.ExecuteReader())
#get telephone numbers for aec users from mcommunity
$auth = [System.DirectoryServices.AuthenticationTypes]::Anonymous
$domain = "LDAP://ldap.umich.edu"
$de= new-object System.DirectoryServices.DirectoryEntry ($domain, $null, $null, $auth)
#clear out mcommunity phone numbers table
$result=Invoke-Sqlcmd -database $dbname -serverinstance $DBServer -outputsqlerrors $true -query "truncate table $tablename"
#for each AEC user, insert phonenumbers into peoplesoft.phonenumbers table in aection
foreach($user in $users){
$user.uniquename
$filter = "(&(objectclass=umichperson)(uid=" + $user.uniquename + "))"
$ds = New-object System.DirectoryServices.DirectorySearcher($de,$filter)
$ds.PropertiesToLoad.add("*") | out-null
$ds.PropertiesToLoad.add("telephonenumber") |out-null
$ds.PropertiesToLoad.add("mobile")|out-null
$ldapuser = $ds.Findall()
$ldapuser
$ldapuser.Properties.telephonenumber
$ldapuser.Properties.mobile
if ($ldapuser.properties.telephonenumber -ne $null) { #must have at least one telephone number
$uniquename = $ldapuser.Properties.uid
$phone1 = $ldapuser.properties.telephonenumber[0] -replace ('/','-')
$phone2 = $ldapuser.properties.telephonenumber[1] -replace ('/','-')
$mobile = $ldapuser.properties.mobile
$result=Invoke-Sqlcmd -database $dbname -serverinstance $DBServer -outputsqlerrors $true -query "insert into $tablename values('$uniquename','$phone1','$phone2','$mobile')"
}
else { #if user only has a mobile number
$uniquename = $ldapuser.Properties.uid
$mobile = $ldapuser.properties.mobile
$result=Invoke-Sqlcmd -database $dbname -serverinstance $DBServer -outputsqlerrors $true -query "insert into $tablename values('$uniquename','$NULL','$NULL','$mobile')"
}
}
$sqlConnection.close