• Как работать с Start-Job в Power Shell?

    @genbachae Автор вопроса
    Удалось решить следующим образом:
    [xml]$inputs = New-Object system.Xml.XmlDocument
    $inputs.Load('.\inputs.xml') 
    
    [string]$result = ''
    [string]$adresses = ''
    $matrix = New-Object System.Collections.ArrayList
    
    $Get_Ping={                                                      #   функция будет выполняться в задании
        param($server)
        $hostname = $server.host
    
        if (Test-Connection $hostname -Quiet -count 1){
            $resPing += "Ping to " + $hostname + " success`r`n"      #   формируем содержимое файла report.txt
            $port = $server.port
            $sock = new-object System.Net.Sockets.Socket -ArgumentList ( 
                        $([System.Net.Sockets.AddressFamily]::InterNetwork),
                        $([System.Net.Sockets.SocketType]::Stream),
                        $([System.Net.Sockets.ProtocolType]::Tcp) )
            try {
                $sock.Connect($hostname,$Port) | Out-Null            #   попытка соединения
                $resPing += "Port " + $port + " connect success`r`n`r`n"
                $sock.Close()
            }
            catch {
                $resPing += "Port " + $port + " connect fail`r`n`r`n"
            } 
        }
        else {
            $resPing += "Ping to " + $hostname + " fail`r`n"         #   формируем содержимое файла report.txt
        }
        return $resPing
    }
    
    foreach ($server in $inputs.SelectNodes('//server'))
    {
        $jb = Start-Job $Get_Ping -Args $server                      #   запускаем задание для каждого хоста
    	$matrix.Add($jb)
    }
    
    foreach ($process in $inputs.SelectNodes('//process'))           #   определяет какие процессы запущены
    {
    	if (Get-Process -Name $process.InnerText -ErrorAction SilentlyContinue)
    	{
    		$result += "Process " + $process.InnerText + " exists`r`n"
    	}
    	else
    	{
    		$result += "Process " + $process.InnerText + " not exists`r`n"
    	}
    }
    $result += "`r`n"
    
    foreach ($service in $inputs.SelectNodes('//service'))
    {
    	if (Get-service -Name $service.InnerText -ErrorAction SilentlyContinue)
    	{  # 
    		$Servicestatus = Get-service $service.InnerText | select status, DisplayName      # получение списка служб в Powershell
    		$result += "Service " + $service.InnerText + " " + $Servicestatus.status + "`r`n"
    	}
    	else
    	{
    		$result += "Service " + $service.InnerText + " " + "not exists`r`n"
    	}
    	
    }
    $result += "`r`n"
    
    foreach($jb in $matrix)                                          #   собираем результаты выполнения пингов
    {
        $rez = $jb|Wait-Job|Receive-Job
        $result += $rez
    }
    
    Out-File -FilePath .\report.txt -InputObject $result -Encoding Default
    foreach ($adress in $inputs.SelectNodes('//email'))
    {
    	$adresses += $adress.InnerText + "; "
    }
    if ($adresses -ne '')
    {
    	Add-Type -AssemblyName Microsoft.Office.Interop.Outlook
    	$Outlook = New-Object -ComObject Outlook.Application
    	$Mail = $Outlook.CreateItem(0)
    	
    	$Mail.To = $adresses
    	$Computer = Get-WmiObject  -Class win32_ComputerSystem
    	
    	$Mail.Subject = "Testing report on "+ $Computer.Name
    	$Mail.Body =$result
    	$Mail.Send()
    }
    Ответ написан
    Комментировать
  • Как правильно работать с LiveData на Kotlin?

    @genbachae Автор вопроса
    Спасибо большое! Заменил кусок кода:

    RecsLiveData.observe(this, Observer<List<Rec>>() {
                fun onChanged(@Nullable Recs: List<Rec>) {
                    val lvMain: ListView = findViewById(R.id.lvMain) as ListView // создаем адаптер
                    recAdapter = RecAdapter(this@MainActivity, Recs)
                    lvMain.setAdapter(recAdapter) // присваиваем адаптер списку
                }


    на код:

    RecsLiveData.observe(this, Observer<List<Rec>>() {
                val lvMain: ListView = findViewById(R.id.lvMain) as ListView    // создаем адаптер
                recAdapter = RecAdapter(this@MainActivity, it)
                lvMain.setAdapter(recAdapter)                                   // присваиваем адаптер списку
            })


    и всё заработало!
    Ответ написан
    Комментировать
  • Почему код не проходит тест в Яндекс.Контест?

    @genbachae
    Вот верный код на Kotlin:
    fun main(args: Array<String>) {
        var s: String?
        var m: Int = 0          //  Для максимального значения
        var count: Int
        var old_m: Int = 0      //  Для предыдущего максимального значения
        s = readLine()!!
        count = s?.toInt()
        while (count > 0){
            s = readLine()!!
            if (s == "1"){
                m++
            }else{
                if(old_m < m){
                    old_m = m
                }
                m = 0
            }
            count--
        }
        if(old_m < m){
            old_m = m
        }
        println(old_m)
    }


    Все тесты проходят без проблем!
    Ответ написан
    Комментировать