2015-05-27 2 views
0

У меня есть только сценарий, в котором я запускаю пользователя, который принимает пользователей из AD и помещает их информацию в базу данных. Этот фрагмент скрипта не вставляет адреса электронной почты, которые, как я думаю, из-за знака @. Как я могу это исправить?Невозможно преобразовать значение - Вставка Powershell в sql

$_.samaccountname | Get-QADGroupMember -type user -SizeLimit 0 -DontUseDefaultIncludedProperties -IncludedProperties samaccountname,DN | Select samaccountname,FirstName,LastName,Email,Manager,Office,Title,HomeDirectory,HomeDrive,PasswordLastSet,PasswordAge,PasswordExpires,AccountIsDisabled,AccountIsLockedOut,PasswordNeverExpires,Domain,Notes,CreationDate,ModificationDate,Type,Description,DN | foreach{ 
    if (!$_.samaccountname){$samaccountname = ''} ELSE{$samaccountname = $_.samaccountname} 
    if (!$_.FirstName){$FirstName = ''}    ELSE{$FirstName = $_.FirstName} 
    if (!$_.LastName){$LastName = ''}    ELSE{$LastName = $_.LastName} 
    if (!$_.Email){$Email = ''}      ELSE{$Email = $_.Email} 
    if (!$_.Manager){$Manager = ''}     ELSE{$Manager = $_.Manager} 
    if (!$_.Office){$Office = ''}     ELSE{$Office = $_.Office} 
    if (!$_.Title){$Title = ''}      ELSE{$Title = $_.Title} 
    if (!$_.HomeDirectory){$HomeDirectory = ''}  ELSE{$HomeDirectory = $_.HomeDirectory} 
    if (!$_.HomeDrive){$HomeDrive = ''}    ELSE{$HomeDrive = $_.HomeDrive} 
    if (!$_.PasswordExpires){$PasswordExpires = ''} ELSE{$PasswordExpires = $_.PasswordExpires} 
    if (!$_.Notes){$Notes = ''}      ELSE{$Notes = $_.Notes} 
    if (!$_.Description){$Description = ''}   ELSE{$Description = $_.Description} 

    $cmd.CommandText = "INSERT dbo.Users (AccountName,FirstName,LastName,Email,Manager,Office,Title,HomeDirectory,HomeDrive,PasswordLastSet,PasswordAge,PasswordExpires,AccountIsDisabled,AccountIsLockedOut,PasswordNeverExpires,Domain,Notes,CreationDate,ModificationDate,Type,Description) VALUES ('"+$samaccountname+"','"+$FirstName+"','"+$LastName+"','"+$Email+"','"+$Manager+"','"+$Office+"','"+$Title+"','"+$HomeDirectory+"','"+$HomeDrive+"','"+$_.PasswordLastSet+"','"+$_.PasswordAge+"','"+$PasswordExpires+"','"+$_.AccountIsDisabled+"','"+$_.AccountIsLockedOut+"','"+$_.PasswordNeverExpires+"','"+$_.Domain+"','"+$Notes,+"','"+$_.CreationDate+"','"+$_.ModificationDate+"','"+$Description+"','"+$_.DN+"')" 
    $cmd.ExecuteNonQuery() | out-null 

Ошибка я получаю

«Невозможно преобразовать значение» «»»к типу„System.Int32“. Ошибка:„Входная строка не была в правильном формате“В C:. \ Users \ rld0072 \ Desktop \ Group-Users.ps1: 28 char: 9 + $ cmd.CommandText = "INSERT dbo.Users (AccountName, FirstName, LastName, Ema ..."

+0

какая ошибка вы получаете? – Matt

+0

, как вы подтверждаете это из-за символа @ – Sachu

+0

9 символов в электронном письме были знаком @, хотя я получаю ту же ошибку, когда этот атрибут равен null, несмотря на то, что я назначил ему пустую строку. – user1552172

ответ

1

В вашем $ cmd есть опечатка. CommandText. $ Примечания имеет дополнительную запятую после него.

Смежные вопросы