This is entirely possible, and it can be done using the graphical interface for configuring log shipping. The only obstacle that needs to be overcome in the script that it creates will be to connect to both the primary and secondary in the same script. This can be done using the SQLCMD mode commands in SQLCMD using the CONNECT command, making sure to set GO between connections. As a bonus, you can also execute OS commands (copy, del, etc.) so that you can script back up and restore. See the example below.
-- Execute the following statements at the Primary to configure Log Shipping -- for the database [primary\instance1].[mydb], -- The script needs to be run at the Primary in the context of the [msdb] database. ------------------------------------------------------------------------------------- -- Adding the Log Shipping configuration -- ****** Begin: Script to be run at Primary: [primary\instance1] ****** :setvar PRIMARY primary\instance1 :setvar SECONDARY secondary\instance2 :setvar DATABASE mydb :setvar PBKDIR "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\" :setvar PBKSHARE "\\primary\d$\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\" :setvar SBKSHARE "\\secondary\d$\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\" :setvar SDATADIR "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\" :connect $(PRIMARY) alter database [$(DATABASE)] set recovery full DECLARE @LS_BackupJobId AS uniqueidentifier DECLARE @LS_PrimaryId AS uniqueidentifier DECLARE @SP_Add_RetCode As int EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database @database = N'$(DATABASE)' ,@backup_directory = N'$(PBKDIR)' ,@backup_share = N'$(PBKSHARE)' ,@backup_job_name = N'LSBackup_$(DATABASE)' ,@backup_retention_period = 1440 ,@backup_threshold = 180 ,@threshold_alert_enabled = 1 ,@history_retention_period = 5760 ,@backup_job_id = @LS_BackupJobId OUTPUT ,@primary_id = @LS_PrimaryId OUTPUT ,@overwrite = 1 IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) BEGIN DECLARE @LS_BackUpScheduleUID As uniqueidentifier DECLARE @LS_BackUpScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'LSBackupSchedule_$(PRIMARY)' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 60 ,@freq_recurrence_factor = 0 ,@active_start_date = 20100101 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT ,@schedule_id = @LS_BackUpScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_BackupJobId ,@schedule_id = @LS_BackUpScheduleID EXEC msdb.dbo.sp_update_job @job_id = @LS_BackupJobId ,@enabled = 1 END EXEC master.dbo.sp_add_log_shipping_alert_job EXEC master.dbo.sp_add_log_shipping_primary_secondary @primary_database = N'$(DATABASE)' ,@secondary_server = N'$(SECONDARY)' ,@secondary_database = N'$(DATABASE)' ,@overwrite = 1 backup database [$(DATABASE)] to disk = '$(PBKDIR)$(DATABASE)_dr_init.bak' with init go print '$(PBKSHARE)$(DATABASE)_dr_init.bak' print '$(SBKSHARE)' print 'copy $(PBKSHARE)$(DATABASE)_dr_init.bak $(SBKSHARE) /y' !!copy $(PBKSHARE)$(DATABASE)_dr_init.bak $(SBKSHARE) /y go !!del $(PBKSHARE)$(DATABASE)_dr_init.bak /Q go -- ****** End: Script to be run at Primary: [primary\instance1] ****** -- Execute the following statements at the Secondary to configure Log Shipping -- for the database [secondary\instance2].[mydb], -- the script needs to be run at the Secondary in the context of the [msdb] database. ------------------------------------------------------------------------------------- -- Adding the Log Shipping configuration -- ****** Begin: Script to be run at Secondary: [secondary\instance2] ****** :connect $(SECONDARY) !!sqlcmd /E /S$(SECONDARY) -i DRRestoreDatabase.sql -v BKDIR="$(SBKSHARE)" -v DATADIR="$(SDATADIR)" -v LOGDIR="$(SLOGDIR)" !!del $(SBKSHARE)$(DATABASE)_dr_init.bak /Q go DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier DECLARE @LS_Add_RetCode As int EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary @primary_server = N'$(PRIMARY)' ,@primary_database = N'$(DATABASE)' ,@backup_source_directory = N'$(PBKSHARE)' ,@backup_destination_directory = N'$(SBKSHARE)' ,@copy_job_name = N'LSCopy_$(PRIMARY)_$(DATABASE)' ,@restore_job_name = N'LSRestore_$(PRIMARY)_$(DATABASE)' ,@file_retention_period = 1440 ,@overwrite = 1 ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryCopyJobScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultCopyJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 60 ,@freq_recurrence_factor = 0 ,@active_start_date = 20090505 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__CopyJobId ,@schedule_id = @LS_SecondaryCopyJobScheduleID DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryRestoreJobScheduleID AS int EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultRestoreJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 4 ,@freq_subday_interval = 60 ,@freq_recurrence_factor = 0 ,@active_start_date = 20090505 ,@active_end_date = 99991231 ,@active_start_time = 0 ,@active_end_time = 235900 ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__RestoreJobId ,@schedule_id = @LS_SecondaryRestoreJobScheduleID END DECLARE @LS_Add_RetCode2 As int IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database @secondary_database = N'$(DATABASE)' ,@primary_server = N'$(PRIMARY)' ,@primary_database = N'$(DATABASE)' ,@restore_delay = 0 ,@restore_mode = 1 ,@disconnect_users = 1 ,@restore_threshold = 180 ,@threshold_alert_enabled = 1 ,@history_retention_period = 2880 ,@overwrite = 1 END IF (@@error = 0 AND @LS_Add_RetCode = 0) BEGIN EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__CopyJobId ,@enabled = 1 EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__RestoreJobId ,@enabled = 1 END go -- ****** End: Script to be run at Secondary: [secondary\instance2] ******