Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Powershell и Access (http://forum.oszone.net/showthread.php?t=208521)

tarasov.evgeny 08-06-2011 14:17 1690665

Powershell и Access
 
Добрый день,

Задача, получать актуальный список залогированных сотрудников на компьютерах. Т.е. нужно соответствие Имя компьютера - Сотрудник
Есть база данных с одной таблицей и четырьмя столбцами: 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 1691494

Добрый день,

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

$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 1691534

Дай базу глянуть


Время: 10:31.

Время: 10:31.
© OSzone.net 2001-