通过 PowerShell 生成新路径

Generate New Path via PowerShell

我目前正在研究将数据库从一台服务器迁移到另一台服务器的 PowerShell 脚本。部分迁移包括在新服务器上恢复数据库。我想让这个自动化尽可能动态,所以我的脚本的一部分打开了一个文件浏览器 window 并允许用户选择在源服务器和新服务器上备份数据库的位置。

这是用户输入步骤的概述。

  1. 脚本获取有关源服务器和实例的信息。 (存储在$server_instance
  2. 脚本获取有关数据库迁移到的新服务器和实例的信息。 (存储在$new_server_instance
  3. 脚本获取源服务器备份文件的存储路径。该脚本打开一个文件资源管理器并将路径存储在一个变量中。 (存储在$local_backup_path
  4. 脚本获取备份文件在目标服务器上的存储路径。该脚本打开一个文件资源管理器并将路径存储在不同的变量中。 (存储在$target_backup_path
  5. 脚本执行源服务器上的数据库备份,并将备份文件从 $local_backup_path 复制到 $target_backup_path。
  6. 脚本从 $target_backup_path 恢复新服务器上的数据库。 这是我遇到问题的步骤

这是一个路径示例,它引导我提出我的实际问题:

$local_backup_path = T:\PowerShell\Testing\backup

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

我运行这些命令从最近迁移的备份文件恢复新服务器上的数据库:

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

这是有问题的,因为服务器名称在路径中,而服务器已在 -ServerInstance 参数中提供。那么,如何将路径从 \\$target_server\T$\PowerShell\backups 更改为 T:\Powershell\backups ?

我需要进行此更改,以便它适用于用作参数的任何服务器。

看起来这可行,比我预期的简单得多:

$target_backup_path = $target_backup_path.Replace("\$target_server\", "")
$target_backup_path = $target_backup_path.Replace("$", ":")