2015-12-09 2 views
1

В теории я считаю, что это должно быть просто. В основном мне нужен запрос в доступе, который будет запускаться каждый час или около того через powershell, а затем, если выполняется определенное условие в запросе, мне нужно отправить электронное письмо.Инструмент мониторинга на Powershell, который запрашивает доступ

Письмо электронной почты и запрос достаточно просты, но я не знаю, как я могу получить powershell для запроса доступа, и я не уверен, могу ли я запросить его для запуска каждый час. Но если я могу просто получить powershell для запуска запроса на доступ, я буду достаточно доволен.

+0

ScheduledJob бы сделать для почасовой части –

+0

Вы можете использовать любой OLE или ODBC, которое будет разговаривать с Access для подключения и сделать запрос. Возможно, это поможет. [Powershell для чтения из базы данных с использованием ODBC; DNS вместо connectionstring] (http://stackoverflow.com/questions/25309969/powershell-to-read-from-database-using-odbcdns-instead-of-connectionstring) – jradich1234

ответ

1

работает некоторое ScriptBlock ежечасно:

$command = { 

    $trigger = New-JobTrigger -RepetitionInterval (New-TimeSpan -Minutes 60) -RepeatIndefinitely ` 
    -At (get-date) -Once 

    $job = Register-ScheduledJob -Name 'Test' -Trigger $trigger -ScriptBlock { 
     (Get-Date).DateTime | Out-File D:\test.txt -Append 
    } 
} 
Start-Process -FilePath powershell.exe -ArgumentList "-noprofile -command $Command" -Verb runas 

есть посмотреть модуль ACE здесь:

Use ACE Drivers and PowerShell to Talk to Access and Excel

2

, если я могу просто получить PowerShell для выполнения запроса о доступе я буду быть достаточно счастливым

"ACE.psm1" модуль ссылается на другом ответе выглядит полезным, но если вы предпочитаете «свернуть свой собственный» код для доступа к базе данных, вы можете использовать что-то вроде этого:

$connStr = @" 
Provider=Microsoft.ACE.OLEDB.12.0; 
Data Source=C:\Users\Public\Database1.accdb 
"@ 
$con = New-Object System.Data.OleDb.OleDbConnection $connStr 
$con.Open() 
$cmd = New-Object System.Data.OleDb.OleDbCommand "SELECT * FROM Clients", $con 
$rdr = $cmd.ExecuteReader() 
while ($rdr.Read()) 
{ 
    Write ("{0}, {1}" -f $rdr["LastName"], $rdr["FirstName"]) 
} 
$rdr.Close() 
$con.Close() 
Смежные вопросы