每当变量使用 powershell 返回数据时打印输出 [英] Print output whenever the variable returns data using powershell

查看:37
本文介绍了每当变量使用 powershell 返回数据时打印输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当变量 $PrinterStatus 返回任何数据时,我都会尝试打印该变量,但 If else 逻辑没有提供正确的数据.

$CurrentTime = Get-Date$打印机状态=Get-Printer -ComputerName "TGHYT-6578UT" |Foreach-对象{$打印机 = $_$打印机|获取打印作业 |Where-Object {$_.jobstatus -ne "Normal" -and $_.SubmittedTime -le $CurrentTime.AddHours(-1) } |Select-Object @{name="Printer Name";expression={$_.printerName}},@{name="提交时间";表达式={$_.SubmittedTime}},作业状态,@{name="Port";expression={$Printer.PortName}},@{name="文档名称";表达式={$_.documentname}},@{n='时差';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |Sort-Object -Property jobstatus -Descending}if([string]::IsNullOrEmpty($PrinterStatus)){写输出打印机不存在"$output = $PrinterStatus >"C:\Output.txt" #应该给出空白的txt文件}别的 {写输出打印机存在"$output = $PrinterStatus >"C:\输出.txt"}

解决方案

由于您的 $PrinterStatus 将是自定义打印作业对象的数组,因此您可以检查该数组的长度.

>

$CurrentTime = Get-Date$PrinterStatus = @()$PrinterStatus = Get-Printer -ComputerName "TGHYT-6578UT" |Foreach-对象{获取打印作业 $_ |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='时差';e={[math]::Truncate(($CurrentTime - $_.SubmittedTime).TotalHours)}} |Sort-Object -Property jobstatus -Descending}如果($PrinterStatus.Count -eq 0){写输出打印机不存在"} 别的 {写输出打印机在场"}$PrinterStatus >"C:\输出.txt"

我还稍微清理了您的代码并修复了在您的自定义对象中插入 jobstatus 的问题.

I am trying to print the variable whenever the variable $PrinterStatus is returning any data but the correct data is not coming with If else logic.

$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" 
     }

解决方案

As your $PrinterStatus will be an array of your custom print job objects, you can check the length of that array.

$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"

I also cleaned up your code a little and fixed the insertion of jobstatus in your custom object.

这篇关于每当变量使用 powershell 返回数据时打印输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆