Безопасно ли запускать сценарий 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
1 ответ
Вы знаете, у меня нет ответа, но я скажу вам, как вы можете ответить на это самостоятельно. Запустите сценарий для известного файла на своем компьютере. Используйте Process Monitor от Sysinternals и посмотрите, какие операции вызываются для файла.
Я сделал бы это сам и ответил бы на ваш вопрос напрямую, но мне пришлось бы поиграть с настройками безопасности PS - у меня нет времени, потому что у меня встреча через 5 минут и мне сначала нужен кофе. Кроме того, вы узнаете несколько вещей, а также создадите характер:-)