none
Вложенные переменные в Powershell

    Вопрос

  • Добрый день. Решил освоить Powershell. Для начала хочу автоматизировать некоторую работу. Столкнулся с такой проблемой.

    Задача: Опрашивать сервера печати на наличие принтеров и после проверять доступность сетевых принтеров. 

    На данный момент такой код:

    #СПИСОК СЕРВЕРОВ
    $PSList =  @(Get-Content $ReportDir\PS_list.csv)
    
    #список принтеров			
    Foreach ($PSlists in $PSlist)
    {
    #ЗАДАЕМ ПЕРЕМЕННЫЕ
        $IP = Get-Printer -ComputerName $PSlists
        $IPlist = @($IP.portname)
        $Names = @($IP.name)
        Write-Host -ForegroundColor White -BackgroundColor DarkGreen "Сервер $PSlists"
        
        Foreach ($IPs in $IPlist)
           {
     #ОПРОС КАЖДОГО ПРИНТЕРА
           $Ping = Test-NetConnection $IPs
    
           if ($ping.PingSucceeded -eq "True")
     
               {
               Write-Host "Принтер ($IPs) ДОСТУПЕН" -ForegroundColor Green
                }
          else
               { 
               Write-Host "Принтер ($IPs) НЕ ДОСТУПЕН" -ForegroundColor Red
                }
            
    } 
    }

    Все хорошо (хотя вероятно коряво, но я только учусь), но вот как выводить в одну строку (имя принтера и его порт) не понимаю.

    Принтер $Names ($IPs) ДОСТУПЕН

           

    4 декабря 2018 г. 11:40

Ответы

Все ответы

  • Foreach ($PSlists in $PSlist) {
    	#ЗАДАЕМ ПЕРЕМЕННЫЕ
        $IPList = Get-Printer -ComputerName $PSlists
        Write-Host -ForegroundColor White -BackgroundColor DarkGreen "Сервер $PSlists"
        
        Foreach ($IPs in $IPList) {
    		#ОПРОС КАЖДОГО ПРИНТЕРА
    		$Ping = Test-NetConnection $IPs.PortName
    
    		if ($ping.PingSucceeded -eq "True") {
               Write-Host "Принтер ($IPs.Name) ($IPs.PortName) ДОСТУПЕН" -ForegroundColor Green
            }
    		else { 
    			Write-Host "Принтер ($IPs) НЕ ДОСТУПЕН" -ForegroundColor Red
            }
    	} 
    }

    4 декабря 2018 г. 11:58
    Отвечающий
  • Foreach ($PSlists in $PSlist) {
    	#ЗАДАЕМ ПЕРЕМЕННЫЕ
        $IPList = Get-Printer -ComputerName $PSlists
        Write-Host -ForegroundColor White -BackgroundColor DarkGreen "Сервер $PSlists"
        
        Foreach ($IPs in $IPList) {
    		#ОПРОС КАЖДОГО ПРИНТЕРА
    		$Ping = Test-NetConnection $IPs.PortName
    
    		if ($ping.PingSucceeded -eq "True") {
               Write-Host "Принтер ($IPs.Name) ($IPs.PortName) ДОСТУПЕН" -ForegroundColor Green
            }
    		else { 
    			Write-Host "Принтер ($IPs) НЕ ДОСТУПЕН" -ForegroundColor Red
            }
    	} 
    }

    Тоже самое выводит

    Принтер (MSFT_Printer (Name = "MSK14-PRN15", ComputerName = "msk14print01", Devic
    eType = 0, Type = 0).Name) (MSFT_Printer (Name = "MSK14-PRN15", ComputerName = "m
    sk14print01", DeviceType = 0, Type = 0).PortName) ДОСТУПЕН

    4 декабря 2018 г. 12:14
  • Да, пропустил знак $:

    Write-Host "Принтер $($IPs.Name) $($IPs.PortName) ДОСТУПЕН"

    • Предложено в качестве ответа Vector BCOModerator 4 декабря 2018 г. 12:46
    • Помечено в качестве ответа Vector BCOModerator 4 декабря 2018 г. 12:46
    4 декабря 2018 г. 12:16
    Отвечающий
  • Спасибо! Заработало. Не знал что так можно. Спасибо еще раз!
    4 декабря 2018 г. 12:26