Saat ini saya sedang mengerjakan skrip PowerShell yang memigrasikan database dari satu server ke server lainnya. Bagian dari migrasi termasuk memulihkan database di server baru. Saya ingin membuat otomatisasi ini sedinamis mungkin, jadi bagian dari skrip saya membuka jendela browser file dan memungkinkan pengguna untuk memilih lokasi tempat untuk membuat cadangan basis data di server sumber dan server baru.

Ini adalah ikhtisar dari langkah-langkah input pengguna.

  1. Script memperoleh informasi di server sumber dan instance. (Disimpan di $server_instance)
  2. Script memperoleh informasi di server baru dan instance tempat basis data dimigrasikan. (Disimpan di $new_server_instance)
  3. Script memperoleh jalur tempat menyimpan file cadangan di server sumber. Script membuka file explorer dan menyimpan path dalam sebuah variabel. (Disimpan di $local_backup_path)
  4. Script memperoleh jalur tempat menyimpan file cadangan di server target. Script membuka file explorer dan menyimpan path dalam variabel yang berbeda. (Disimpan di $target_backup_path)
  5. Script melakukan backup database pada server sumber dan menyalin file backup dari $local_backup_path ke $target_backup_path.
  6. Script memulihkan database di server baru dari $target_backup_path. Ini adalah langkah di mana saya mengalami masalah.

Berikut adalah contoh jalur dan membawa saya ke pertanyaan saya yang sebenarnya:

$local_backup_path = T:\PowerShell\Testing\backup

$target_backup_path = \\$target_server\T$\PowerShell\backups

Saya menjalankan perintah ini untuk memulihkan database di server baru dari file cadangan yang baru saja dimigrasikan:

Restore-SqlDatabase -ServerInstance $New_Server_Instance -Database $database -BackupFile "$target_backup_path\$database.bak"
Write-Host "$database has been restored on the new server"

Ini bermasalah karena nama server berada di jalur, ketika server sudah disediakan di parameter -ServerInstance. Jadi, bagaimana cara mengubah jalur dari \\$target_server\T$\PowerShell\backups menjadi T:\Powershell\backups ?

Saya perlu membuat perubahan ini agar berfungsi untuk server apa pun yang digunakan sebagai parameter.

0
drake 11 Desember 2017, 22:24

1 menjawab

Jawaban Terbaik

Sepertinya ini berhasil, jauh lebih sederhana daripada yang saya perkirakan:

$target_backup_path = $target_backup_path.Replace("\\$target_server\", "")
$target_backup_path = $target_backup_path.Replace("$", ":")
1
drake 11 Desember 2017, 19:38