Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » несколько вопросов по PowerShell

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

tpogih



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.
Столкнулся с задачей написать простой скрипт по инвентаризации ПО.
возникло пара вопросов по работе с PS.  
Когда попадается название программы включающее в себя к примеру "++" PS выкидывает ошибку

Код:
 
выполняется разбор "С++ ..." - Вложенный квантификатор +.
 

и соответсвтеннло пропускает строку. Просьба посмотреть и подсказать в чем ошибка. Скрипт почти рабочий,  не много кривые условия. может кому и пригодится))  
 

Код:
 
$aproove = Import-Csv "\\------\список разрешенного.csv" -Delimiter ";"
$list =    Import-Csv "\\------\list.csv" -Delimiter ";"
 
 
# ---------------скачаиваем список-----------------------
write-host 'качаем.....'
& 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' http://------/export.aspx?export=csv"&"det=web50rep510326979b7c4097942fd7d7d1c369b3
Start-Sleep -s 15
write-host 'перетаскиваем.....'
Move-Item "------\web50rep510326979b7c4097942fd7d7d1c369b3.csv" -Destination "\\------\list.csv" -Force
Start-Sleep -s 15
 
# ---------------Обновляем Конечный файл со списком разрешенного ПО-------------
write-host 'создаем новые файлы.....'
 
remove-item "\\------\result(OLD).csv"
rename-item "\\------\result.csv" -newname "\\------\result(OLD).csv"
New-Item "\\------\result.csv" -ItemType "file"
$NewFile = 'AssetName;Software;softwareVersion;Publisher;Total;Разрешение;Лицензия'
$NewFile | out-file "\\------\result.csv" –append
Start-Sleep -s 5
 
# ------------------Помечаем ПО(Разрешено ли пользоваться + наличие Лицензии)------------------------
write-host 'пошла проверка.....'
$list | ForEach-Object {
    $_  | Add-Member NoteProperty Лицензия -value $Лицензия
    $_  | Add-Member NoteProperty Разрешение -value $Разрешение
     
    $Agree = Select-String -Pattern $_.Software -Path "\\------\список разрешенного.csv"
    if ($Agree -ne $NULL) { $_.Разрешение = "разрешено" }
                     else { $_.Разрешение = "не разрешено" ; $_.Лицензия = "Не известно"}
 
     
    $licension = Select-String -Pattern $_.AssetName -Path "\\------\лицензии_ПО.csv"
    $Soft = $licension -match $_.Software
    $User = $Soft -match $_.AssetName
    if ($User -match $_.Software) { $_.Лицензия = "Есть лицензия" ; $_.Разрешение = "разрешено"}
                             else { if ((($licension -notmatch $_.Software) -or ($licension -eq $NULL)) -and ($Agree -match $_.Software))  { $_.Лицензия = "Лицензия не нужна" }
                                  }
 
    $_  | export-csv  -Delimiter ";" -path "\\------\result.csv" -append
    Clear-Variable -Name Agree, Разрешение, Soft, Лицензия, licension, User
}
 

Всего записей: 14 | Зарегистр. 17-10-2014 | Отправлено: 13:29 24-03-2015
tpogih



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проблема актуальна, пока решение не могу самостоятельно найти, скрипт уже видоизменился

Всего записей: 14 | Зарегистр. 17-10-2014 | Отправлено: 05:43 27-03-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tpogih попробуй в Select-String заюзать SimpleMatch, т.к. сейчас у тебя паттерн парсится, как регулярка.

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 10:08 27-03-2015
tpogih



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NeoAnomaly
спасибо) но после того как написал обошел эту проблему)
может кому пригодится код))
единственная пробелма осталась, это чтобы на выходе файл был в кодировка 1251, пока не получается это сделать

Код:
 
# ---------------скачаиваем список-----------------------
write-host 'скачаиваем список пользователей.....'
& 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' http://----------export=csv"&"det=web50rep510326979b7c4097942fd7d7d1c369b3
Start-Sleep -s 15
write-host 'перетаскиваем в рабочую папку.....'
Move-Item $env:USERPROFILE\downloads\web50rep510326979b7c4097942fd7d7d1c369b3.csv -Destination "\\-------------------\Инвентаризация_ПО\list.csv" -Force
Start-Sleep -s 15
#----------------------------Обновляем список распределенных лицензий----------------------------------
write-host 'Обновляем список распределенных лицензий.....'
$oExcel = New-Object -ComObject "Excel.Application"
$oExcel.DisplayAlerts = $false
$oWorkbook = $oExcel.Workbooks.Open("\\-------------------\лицензии_ПО.xls")
$oWorkbook.Sheets.Item("Распределение на пользователей").SaveAs("\\-------------------\Инвентаризация_ПО\лицензии_ПО.csv", 6)
$oWorkbook.Close()
$oExcel.Quit()
Start-Sleep -s 5
 
# ---------------Обновляем Конечный файл со списком разрешенного ПО-------------
write-host 'Обновляем Конечный файл со списком разрешенного ПО.....'
remove-item "\\-------------------\Инвентаризация_ПО\result(old).csv"
rename-item "\\-------------------\Инвентаризация_ПО\result.csv" -NewName "\\-------------------\Инвентаризация_ПО\result(old).csv"
New-Item "\\-------------------\Инвентаризация_ПО\result.csv" -ItemType "file" -Force
'AssetName;Software;softwareVersion;Publisher;Total;Разрешение;Лицензия' | out-file "\\-------------------\Инвентаризация_ПО\result.csv" –append  
Start-Sleep -s 3
# ------------------Помечаем ПО(Разрешено ли пользоваться + наличие Лицензии)------------------------
write-host 'пошла проверка.....'
$list =    Import-Csv "\\-------------------\Инвентаризация_ПО\list.csv" -Delimiter ";" -Encoding UTF8
$Agree = Import-Csv "\\-------------------\Инвентаризация_ПО\список разрешенного.csv" -Encoding utf8
$licension = Import-Csv "\\-------------------\Инвентаризация_ПО\лицензии_ПО.csv" -Encoding utf8 -Delimiter ";"
$list | ForEach-Object {
    $_  | Add-Member NoteProperty Лицензия -value $Лицензия
    $_  | Add-Member NoteProperty Разрешение -value $Разрешение
    $Soft = $_.software
    $Agree | ForEach-Object { if ($soft -match $_.Software) { $Разрешение = "разрешено"} }
    if ($Разрешение -eq "разрешено") {$Разрешение = "разрешено" ; $Лицензия = "Не требуется"}
    $Soft = $_.software
    $User = $_.AssetName  
    if ($Разрешение -ne "разрешено" ) {
        $licension | ForEach-Object {
            if (($soft -eq $_.Software) -and ($user -eq $_.AssetName)) { $Лицензия = "Есть лицензия" ; $Разрешение = "разрешено"}
                    elseif (($soft -match $_.Software) -and ($user -notmatch $_.assetname) -and ($Разрешение -ne "разрешено")) { $Разрешение = "разрешено"; $Лицензия = "Необходимо назначить лицензию" }
                             elseif ($Разрешение -ne "разрешено")  { $Разрешение = "не разрешено" ; $Лицензия = "Не известно"; }
        }
    }
    $_.Разрешение = $Разрешение
    $_.Лицензия = $Лицензия
    $_  | export-csv   -Delimiter ";" -path "\\-------------------\Инвентаризация_ПО\result.csv" -append -Encoding ASCII
    Clear-Variable -Name Разрешение, Soft, User, Лицензия
}
remove-item "\\-------------------\Инвентаризация_ПО\list.csv"
remove-item "\\-------------------\Инвентаризация_ПО\лицензии_ПО.csv"
 

Всего записей: 14 | Зарегистр. 17-10-2014 | Отправлено: 10:32 27-03-2015 | Исправлено: tpogih, 10:37 27-03-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » несколько вопросов по PowerShell


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru