【问题标题】:Powershell Script outputs are merged instead of separated individuallyPowershell 脚本输出被合并而不是单独分开
【发布时间】:2019-11-05 08:04:27
【问题描述】:

我制作了这个脚本来 ping 计算机名称,如果可以 ping,则返回登录用户的用户名,如果脚本的用户需要,则返回所有已安装程序的列表和已安装打印机的列表用户正在使用。

当我运行脚本时,它返回用户名并要求用户输入是否要查看已安装的程序,用户回答 Y 或 N。然后它会询问用户是否要查看打印机列表。 然后,该脚本会给出程序和打印机列表的输出作为答案。

我的问题是我想让脚本询问用户是否想要程序列表,然后输出程序列表,然后提示用户是否想要打印机列表,然后输出打印机列表。

我不知道如何解决这个问题,并且已经搜索和实验,但没有找到解决方案。

任何帮助或建议将不胜感激:)

为长篇道歉

# This script shows who is currently logged on to a machine

$PCNAME = Read-Host "Please enter computer name"

Write-Host "Pinging computer name..."

# If the computer responds to ping then the user name will be displayed

If (Test-Connection -ComputerName $PCNAME -Quiet)

    {
    $User = Get-WmiObject Win32_ComputerSystem -ComputerName $PCNAME | Select-Object -ExpandProperty UserName
    $Time = Get-Date -DisplayHint Time


                Write-Host ""
     $CurUser = Write-Host "The current user logged in to $PCNAME is $User at $Time" -ForegroundColor Green
                Write-Host ""
    }

        #PROGRAMS

    $Programs = Read-Host "Would you like to see what programs $User has installed? Enter Y or N"


        If ($Programs -eq "Y") {
                Write-Host ""
                Write-Host "Retrieving list of installed programs..."
                Write-Host ""

        Get-WmiObject -ComputerName $PCNAME -Class Win32_Product | sort-object Name | select Name
                            }

        ElseIf ($Programs -ne "Y" -and $Programs -eq "N") {
                Write-Host ""
                Write-Host "Will not retrieve list of installed programs."
                                                    }


    #PRINTERS

$Printers = Read-Host "Would you like to see the pinters that $User is using? Enter Y or N"

    If ($Printers -eq "Y") {
        Write-Host ""
        Write-Host "Getting printers..."
        Write-Host ""


# Collect port names and host addresses into hash table
$hostAddresses = @{}
Get-WmiObject Win32_TCPIPPrinterPort -ComputerName $PCNAME | ForEach-Object {
  $hostAddresses.Add($_.Name, $_.HostAddress)
}

Get-WmiObject Win32_Printer -ComputerName $PCNAME | ForEach-Object {
  New-Object PSObject -Property @{
    "Name" = $_.Name
    "DriverName" = $_.DriverName
    "HostAddress" = $hostAddresses[$_.PortName]
  }
}

}

    ElseIf ($Printers -ne "Y" -and $Printers -eq "N") {
        Write-Host ""
        Write-Host "Could not get printers"
        Write-Host ""
        }




 Else  
    {
    Write-Host ""
    Write-Host "Could not ping $PCNAME at $Time" -ForegroundColor DarkCyan
    }


Write-Host ""
#$EndPrompt = ( Read-Host -Prompt "Press Enter to finish" )

【问题讨论】:

    标签: powershell


    【解决方案1】:

    总体上有更好的方法,但最简单的添加方法是:

            #PROGRAMS
    
        $Programs = Read-Host "Would you like to see what programs $User has installed? Enter Y or N"
    
    
            If ($Programs -eq "Y") {
                    Write-Host ""
                    Write-Host "Retrieving list of installed programs..."
                    Write-Host ""
    
            $Installed = Get-WmiObject -ComputerName $PCNAME -Class Win32_Product | sort-object Name | select Name
            $Installed | Out-Host
                                }
    
            ElseIf ($Programs -ne "Y" -and $Programs -eq "N") {
                    Write-Host ""
                    Write-Host "Will not retrieve list of installed programs."
                                                        }
    

    【讨论】:

    • 非常感谢您的帮助!我对 PowerShell 很陌生,如果脚本有点乱,我很抱歉
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多