Незнание базовых основ PowerShell и повальное проце
дурномыслие, которое уже в печёнках, блин.
Куча долбаных переменных, долбаных IF / WHILE / FOREACH. И миллиарды километров кода. Это не говоря о каких-то нафиг создаваемых файлах (кроме логов).
# $SqlCommand = New-Object System.Data.SqlClient.SqlCommand("SELECT * FROM <TABLE>", $SrcConn);
# $SrcConn.Open();
Invoke-Sqlcmd -Q "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" -S "Server" -d "DataBase" -E | %{
"TRUNCATE TABLE " + $_.TABLE_SCHEMA + "." + $_.TABLE_NAME + "; ";
# $SqlCommand.CommandText = "SELECT * FROM " + $_.TABLE_SCHEMA + "." + $_.TABLE_NAME + "; ";
# try { $SqlReader = $SqlCommand.ExecuteReader(); .... } catch { ...
} | Out-String | Invoke-Sqlcmd -S "Server" -d "DataBase" -E;
Но я бы посоветовал бросить это и заюзать нативные средства: sqlps или подключить SQL оснастку к ps.
# Если не через sqlps, а тупо ps, то:
# add-pssnapin SqlServerCmdletSnapin100;
# add-pssnapin SqlServerProviderSnapin100;
# Перейти в нужное место
# cd SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDataBase
cd SQLSERVER:\SQL\LOCALHOST\DEFAULT\Databases\tempdb;
# По всем объектам (Get-ChildItem)
gci .\Tables | %{
# Bla-Bla-Bla
}
# Или сразу (Get-Item) без cd:
# (gi SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDataBase\Tables\*) | %{ ... }
# Получить все свойства объекта можно через gm (Get-Member)
Но ещё можно сохранить стандартный Import-Export пакет. А потом
тупо его вызвать подставив нужные параметры (имена таблицы, базы, интанса).
Программа dtexecСправка по
Cmdlet Windows PowerShell.