RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 952613
Accepted
Dmitry Volkov
Dmitry Volkov
Asked:2020-03-05 19:58:10 +0000 UTC2020-03-05 19:58:10 +0000 UTC 2020-03-05 19:58:10 +0000 UTC

选择特定格式的目标目录中的最后一个文件

  • 772

有一个powershell脚本,它从一个目录中选择最后一个文件(即数据库备份),将其复制到本地磁盘(因为备份在网络上的另一台机器上)并将备份恢复到测试数据库。一切正常,但有一点,如果备份以外的文件以某种方式进入源文件夹并且结果是最后一个,则脚本会获取并复制它。一般来说,一切都是合乎逻辑的,我想要我得到什么,但我希望脚本只在备份中选择最后一个,即带有 *.bak 扩展名的文件。这是脚本本身的一个示例。

[CmdletBinding()]
    Param([string]  [Parameter(Mandatory=$true)] $SqlServer=$null,      # SQL Сервер для которого будет исполняться скрипт
                    [Parameter(Mandatory=$true)] $SqlBaseConnect=$null, # База данных к которой будем подклюдчаться       
                    [Parameter(Mandatory=$true)] $SqlBaseRestore=$null, # База данных для которой будет исполняться скрипт
                    [Parameter(Mandatory=$true)] $SqlLogin=$null,       # Логин базы данных
                    [Parameter(Mandatory=$true)] $SqlPassw=$null,       # Пароль базы данных
                    [Parameter(Mandatory=$true)] $destination=$null,    # Каталог назначения
                    [Parameter(Mandatory=$true)] $DiskSource=$null,     # Диск источника
                    [Parameter(Mandatory=$true)] $CatalogSource=$null)  # Каталог источника




#Запуск таймера
  $watch = [System.Diagnostics.Stopwatch]::StartNew()
  $watch.Start() 

#Лог скрипта
  $LogF="RestoreBackupLog.txt"
  if (Test-Path $LogF) {Clear-Content $LogF}
       Add-Content -Path $LogF -Value   "Starting ..." 


# Переприсваиваем переменную источника к виду Путь источника
  $Source=$DiskSource+$CatalogSource

# Проверяем существует ли источник
  $TestPasth = Test-Path $Source
    if ($TestPasth -eq "True") {
                            # Выбираем самый новый файл на источнике.
                              $FileCopy = Get-ChildItem -Path $Source -ErrorAction SilentlyContinue -ErrorVariable ErrVarFile | Sort-Object LastWriteTime | Select-Object -Last 1

                       }
    else {Write-Host Указаный путь не существует
          exit}

# Копируем выбраный фаил 
  Copy-Item -Path "$Source\$FileCopy" -Destination "$destination" -Force -ErrorAction SilentlyContinue -ErrorVariable ErrVar | Out-Null
    $ErrVarStd=$?
    Add-Content -Path $LogF -Value $ErrVar

# Проверяем скопировался ли фаил, если да то запускам востановлние базы
  if ($ErrVarStd -eq "True") {
                            #Подключение к  SQL и выполнение запроса 
                              $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
                              $SqlConnection.ConnectionString = "Server=$SqlServer; Database=$SqlBaseConnect; User ID=$SqlLogin; Password=$SqlPassw;"
                              $SqlConnection.Open()

                              $SqlCmd = $SqlConnection.CreateCommand()
                              $SqlCmd.CommandText =  "Restore database [$SqlBaseRestore]
                                                      FROM DISK = '$destination\$FileCopy'"
                              $objReader = $SqlCmd.ExecuteReader()
                              while ($objReader.read()) {
                              Write-Output $objReader.GetValue(0)
                                                        }
                                $objReader.close()
                            # Удаляем фаил бэкапа из каталога назначения после востановления  
                                Remove-Item $destination\$FileCopy 
                              } 
  else {Write-Host Не удалось скопировать фаил бэкапа
        exit }  


#Остановка таймера
  $watch.Stop() 
  $elapsedtime=$watch.Elapsed
  Write-Host Время выполнения $elapsedtime
  Add-Content -Path $LogF -Value "Время выполнения $elapsedtime"

如果将行更改为

$FileCopy = Get-ChildItem -Path $Source -Include *.bak -ErrorAction SilentlyContinue -ErrorVariable ErrVarFile | Sort-Object LastWriteTime | Select-Object -Last 1

然后脚本停止工作,因为 $FileCopy 变量采用文件完整路径的形式,但即使您替换了该行

Copy-Item -Path "$Source\$FileCopy"

在

Copy-Item -Path "$FileCopy"

目标处的脚本会创建一个文件夹而不是文件,因此在没有找到文件的情况下会失败。告诉我如何从目标目录中选择备份文件。

powershell
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Dmitry Volkov
    2020-03-12T00:36:29Z2020-03-12T00:36:29Z

    事实上,一切的决定都有些不同。在周末阅读了教程 )))) 即 Get-ChildItem cmdlet 的工作原理后,结果发现您只需要使用 -Filter 参数而不是 -Include参数,一切正常。这是因为-Include参数的值必须是所有元素,包括执行搜索的目录。使用-Filter时,在获取数据(文件夹和文件)的过程中直接对结果进行过滤,在接收到所有数据后应用-Include和-Exclude。这是实际的解决方案。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5