Войти

Показать полную графическую версию : Powershell и Access


tarasov.evgeny
08-06-2011, 14:17
Добрый день,

Задача, получать актуальный список залогированных сотрудников на компьютерах. Т.е. нужно соответствие Имя компьютера - Сотрудник
Есть база данных с одной таблицей и четырьмя столбцами: HostName, UserName,Data, Time
Есть скрипт, который работает не полностью. Данные по пользователям помещаются в таблицу, а имя компьютера нет.
Вот ошибка:

Исключение при чтении "Item" : "Item cannot be found in the collection corresponding to the requested name or ordinal."
В C:\PoSH\Access_Username_tes1.ps1:16 знак:20
+ $objRec.Fields.Item <<<< ("HostName").Value = "$PC"
+ CategoryInfo : NotSpecified: (:) [], GetValueInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterParameterizedPropertyGetValueTI


Вот скрипт:

$PCs = Get-Content -Path "c:\PoSH\PCs.txt"
$path = "C:\FSO\Test2.accdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$objCon = New-Object -com "ADODB.Connection"
$objRec = New-Object -com "ADODB.Recordset"

$objCon.Open("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = $path")
$objRec.Open("Select * From Host", $objCon,$adOpenStatic,$adLockOptimistic)
Foreach($PC in $PCs)
{
$ShortUser = Get-WmiObject -class Win32_ComputerSystem -ComputerName $PC | ForEach-Object {[regex]::replace($_.UserName,".*\\","")}
$objRec.AddNew()
$objRec.Fields.Item("HostName").Value = "$PC"
$objRec.Fields.Item("UserName").Value = "$ShortUser"
}
$objRec.Update()

$objRec.Close()
$objCon.Close()

$adOpenStatic = 3
$adLockOptimistic = 3

Не понятно почему имя компьютера не добавляется.
И второе,Как можно сделать проверку - если такой компьютер уже есть, то обновить страницу, а если нет то добавить?


Евгений

tarasov.evgeny
09-06-2011, 16:05
Добрый день,

Вот так работает, но как сделать проверку по условию пока не понятно.

$PCs = Get-QADComputer -Name *ru*
$path = "C:\FSO\Test2.accdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$objCon = New-Object -com "ADODB.Connection"
$objRec = New-Object -com "ADODB.Recordset"

$objCon.Open("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = $path")
$objRec.Open("Select * From Host", $objCon,$adOpenStatic,$adLockOptimistic)
Foreach($1 in $PCs)
{
$CompName = $1.Name
$ShortUser = Get-WmiObject -class Win32_ComputerSystem -ComputerName $1.Name | ForEach-Object {[regex]::replace($_.UserName,".*\\","")}
$objRec.AddNew()
$objRec.Fields.Item("HostName").Value = "$CompName"
$objRec.Fields.Item("UserName").Value = "$ShortUser"
}
$objRec.Update()

$objRec.Close()
$objCon.Close()

$adOpenStatic = 3
$adLockOptimistic = 3



Евгений.
Чтобы работало, необходимо установить дополнительную оснастку для работы с AD.

Butunin Klim
09-06-2011, 17:06
Дай базу глянуть




© OSzone.net 2001-2012