 |
|
Доступ к файлу из нескольких потоков
Добрый День!
Скрипт (многопоточный - цель была именно эта) считывает данные из реестра и записывает результат в файл, при этом если с ПК нет связи ил не рабочий WMI то должен ошибки записать в разные файлы
Каким образом организовать доступ к одному файлу из разных потоков на запись?
Код:
cls
Set-PSDebug -Trace 1
workflow reestr {
param ($IP)
foreach –parallel($PS in $IP){
InlineScript {
Try {
$pk = Test-Connection $using:ps -Count 4 -ErrorAction stop
Try {
$ArchVersion = (Get-WmiObject win32_Computersystem -computer $using:PS -ErrorAction Stop).systemtype
If ($ArchVersion -like "x64*")
{Set-Service -ComputerName $using:PS -Name RemoteRegistry -StartupType Automatic -Status Running -ErrorAction SilentlyContinue
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $using:PS, 'Registry64')
$RegKey= $Reg.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run")
$key = $RegKey.GetValue("DelBginfoOld")
}
else {Set-Service -ComputerName $using:PS -Name RemoteRegistry -StartupType Automatic -Status Running -ErrorAction SilentlyContinue
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $using:PS)
$RegKey= $Reg.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
$key = $RegKey.GetValue("DelBginfoOld")
}
Add-Content d:\result.txt "$using:ps, $key"
}
Catch {Add-Content d:\wmi.txt $using:ps}
}
Catch {Add-Content d:\noping.txt $using:ps}
}
}
}
$IPS = (Get-Content d:\Bginfo.txt)
Reestr $IPS
|
Вернуть объекты и уже в не worfklow обновлять:
Код:
workflow reestr {
param ($IP)
foreach –parallel($PS in $IP){
InlineScript {
Try {
$pk = Test-Connection $using:ps -Count 4 -ErrorAction stop
Try {
$key = ""
$ArchVersion = (Get-WmiObject win32_Computersystem -computer $using:PS -ErrorAction Stop).systemtype
If ($ArchVersion -like "x64*") {
Set-Service -ComputerName $using:PS -Name RemoteRegistry -StartupType Automatic -Status Running -ErrorAction SilentlyContinue
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $using:PS, 'Registry64')
$RegKey= $Reg.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run")
$key = $RegKey.GetValue("DelBginfoOld")
}
else {
Set-Service -ComputerName $using:PS -Name RemoteRegistry -StartupType Automatic -Status Running -ErrorAction SilentlyContinue
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $using:PS)
$RegKey= $Reg.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
$key = $RegKey.GetValue("DelBginfoOld")
}
}
Catch {$key = "WMI"}
}
Catch {$key = "NOPING"}
[PSCustomObject] @{
ComputerName = $using:ps
Key = $key
}
}
}
}
$IPS = (Get-Content d:\Bginfo.txt)
Reestr $IPS | Foreach {
if($_.Key -eq "WMI") {
Add-Content d:\wmi.txt $_.ComputerName
} elseif ($_.Key -eq "NOPING") {
Add-Content d:\noping.txt $_.ComputerName
} else {
Add-Content d:\result.txt "$($_.ComputerName), $($_.key)"
}
}
|
Цитата:
Цитата Kazun
Цитата:
Цитата lox-ness
Каким образом организовать доступ к одному файлу из разных потоков на запись? »
|
Вернуть объекты и уже в не worfklow обновлять: »
|
lox-ness, либо — не заниматься извращениями в виде текстового файла, а пользовать базу данных посредством ADO — и пишите, откуда хотите. Есть SQL — пользуйте его, нет SQL — пользуйте Jet.
|
Спасибо за помощь и советы
|
Время: 03:54.
© OSzone.net 2001-