Выводить вывод всякий раз, когда переменная возвращает данные, используя powershell - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь напечатать переменную всякий раз, когда переменная $ PrinterStatus возвращает какие-либо данные, но правильные данные не приходят с If logi c.

$CurrentTime = Get-Date
$PrinterStatus= 
Get-Printer -ComputerName "TGHYT-6578UT" | Foreach-Object { 
    $Printer = $_
    $Printer | Get-Printjob | 
        Where-Object {$_.jobstatus -ne "Normal"  -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } | 
        Select-Object @{name="Printer Name";expression={$_.printerName}}, 
        @{name="Submitted Time";expression={$_.SubmittedTime}}, 
        jobstatus, @{name="Port";expression={$Printer.PortName}}, 
        @{name="Document Name";expression={$_.documentname}},
        @{n='Difference in Hours';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} | 
        Sort-Object -Property jobstatus -Descending
            }

if([string]::IsNullOrEmpty($PrinterStatus))
     {
        Write-Output "Printers NOT Present" 
        $output = $PrinterStatus  > "C:\Output.txt"  #Shoud give blank txt file
     }

else {
        Write-Output "printers Present" 
        $output = $PrinterStatus  > "C:\Output.txt" 
     }

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Поскольку ваш $PrinterStatus будет массивом объектов пользовательских заданий на печать, вы можете проверить длину этого массива.

$CurrentTime = Get-Date
$PrinterStatus = @()
$PrinterStatus = Get-Printer -ComputerName "TGHYT-6578UT" | Foreach-Object { 
        Get-Printjob $_ | 
            Where-Object {$_.jobstatus -ne "Normal"  -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } | 
            Select-Object @{name="Printer Name";expression={$_.printerName}}, @{name="Submitted Time";expression={$_.SubmittedTime}}, @{name="jobstatus";expression={$_.jobstatus}}, @{name="Port";expression={$Printer.PortName}}, @{name="Document Name";expression={$_.documentname}}, @{n='Difference in Hours';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} | 
            Sort-Object -Property jobstatus -Descending
    }

if ($PrinterStatus.Count -eq 0) {
    Write-Output "Printers NOT Present"
} else {
    Write-Output "Printers Present"
}
$PrinterStatus  > "C:\Output.txt"

Я также немного очистил ваш код и исправил вставку jobstatus в вашем пользовательском объекте.

0 голосов
/ 03 мая 2020

Состояние принтера не будет строкой. Я думаю, вы просто хотите оценить против $null.

if($null -eq $PrinterStatus) {
    Write-Output "Printers NOT Present" 
    # Not sure why this is necessary $output = $PrinterStatus  > "C:\Output.txt"  #Shoud give blank txt file
}

else {
    Write-Output "Printers Present" 
    $output = $PrinterStatus | Out-File -FilePath "C:\Output.txt"
}

Я только что заметил. У вас есть команда Get-Printer в той же строке после переменной в вашем коде, не так ли? Не должно быть на новой линии.

$PrinterStatus = Get-Printer -ComputerName "TGHYT-6578UT" | ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...