Назад | Перейти на главную страницу

Сценарий PowerShell для мониторинга размера файла безопасен для работы с многопользовательской базой данных Access 2003?

Я пытаюсь следить за размером Файл базы данных MS Access, который повреждается, когда размер достигает 2 ГБ.

Я нашел следующее сценарий PowerShell который отслеживает размер файла, а затем запускает команду.

Скрипт использует (Get-ChildItem $FilePath).length для определения размера отслеживаемого файла. Хотя я бы хотел предположить, что это всего лишь операция чтения, тот факт, что он будет отслеживать размер многопользовательской базы данных MS Access, на самом деле не оставляет места для предположения просто операции чтения, поэтому я подумал, что спросил бы у более опытных пользователей Powershell, так ли это.

Я использую Powershell 2, так как это оболочки $ Host.Version вывод:

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

И для удобства вот полный текст скрипта PowerShell:

function Test-FileSizeUntil
{

  <#

.Synopsis
    Checks the file size of a given file until it reaches the specified size and creates an action
.Description
    Controls the size of a given file on user-specified intervals; and creates an action when the file size is equal or greater than the given size
.Parameter FilePath
    Path of the file that will be monitored
.Parameter Size
    File size is monitored against this value. When file size is equal or greater than this value, user-specified action is triggered
.Parameter ScriptString
    Specifies the action commands to run. Enclose the commands in double quotes ( " " ) to create a script string
.Parameter Interval
    The wait interval between the executions of the function. The value of this parameter is  in second and default value is 30 seconds
.Parameter AsJob
    Creates a background job for the cmdlet and echoes the jobID
.Example
Test-FileSizeUntil -FilePath C:\inetpub\logs\LogFiles\W3SVC1\u_ex091112.log -Size 500KB -ScriptString "c:\dosomething.exe"
.Example
Test-FileSizeUntil c:\test.txt 10MB -ScriptString "Start-Job -ScriptBlock { do something }"
You can omit -FilePath and -Size parameters and call the function as you can see above
.Example
Test-FileSizeUntil c:\test.txt -Size 1GB -Interval 3600 -AsJob $true -ScriptString "do something"
Wait interval between executions is one hour and function is called as a background job
.Link
    http://blogs.msdn.com/candede
.Notes
    Author: Can Dedeoglu
#>

  param
  (
    [Parameter(Mandatory = $true,Position = 0)]
    [string[]]$FilePath
    ,
    [Parameter(Mandatory = $true,Position = 1)]
    [int]$Size
    ,
    [Parameter(Mandatory = $true)]
    [string]$ScriptString
    ,
    [Parameter(Mandatory = $false)]
    [int]$Interval = 30
    ,
    [Parameter(Mandatory = $false)]
    [bool]$AsJob = $false
  )

  function control
  {
    function subControl
    {
      while ((Get-ChildItem $FilePath).length -le $Size)
      {
        Start-Sleep -Seconds $Interval
        subControl
      }
    } # end function subControl

    subControl

    Invoke-Command -ScriptBlock ([scriptblock]::Create($ScriptString))

  } # end function control

  if (!$AsJob)
  {
    if ((Test-Path $FilePath))
    {
      control
    } #end if Test-Path

    else { "File does not exist!" }

  } # end if AsJob

  else
  {
    Start-Job -ScriptBlock ([scriptblock]::Create(". c:\ps\library\Test-FileSizeUntil.ps1; Test-FileSizeUntil -FilePath $FilePath -Size $Size -ScriptString `"$ScriptString`" -Interval $Interval"))
  }

} # end function Test-FileSize

Вы знаете, у меня нет ответа, но я скажу вам, как вы можете ответить на это сами. Запустите сценарий для известного файла на своем компьютере. Используйте Process Monitor от Sysinternals и посмотрите, какие операции вызываются с файлом.

Я сделаю это сам и отвечу на ваш вопрос напрямую, но мне придется поиграться с настройками безопасности PS, на что у меня нет времени, потому что у меня встреча через 5 минут, и сначала мне нужен кофе. Кроме того, вы узнаете несколько вещей, а также создадите характер :-)