Powershell, если еще условие игнорирует предупреждение, продолжайте - PullRequest
0 голосов
/ 21 июня 2020

Я хотел бы разработать условие, которое заключается в том, что если результат TCP-соединения возвращает "true", будет продолжено действие установки и go следующая функция. В противном случае он вернет предупреждающее сообщение, остановится, чтобы продолжить, и перейдет к следующей функции. Я не знаю, как реализовать сохранение, чтобы продолжить следующую функцию, если возникает какое-либо предупреждение о текущей функции. Кто-нибудь может помочь решить проблему? Большое спасибо.

function A(){

$printerIPAddress = "192.168.1.100"
$sharedPrinter = "\\SERVERNAME\A"
$checkPrinterExists = Get-Printer -Name $sharedPrinter -ErrorAction SilentlyContinue

    if ((Test-NetConnection -ComputerName $printerIPAddress -WarningAction SilentlyContinue).PingSucceeded){
        Write-Host "Succeed to connect - $printerIPAddress" -ForegroundColor Black -BackgroundColor Gray
        Start-Sleep(2)
    }
    else {
        Write-Warning "Failure to connect - $printerIPAddress"
    }
    
    if (-not $checkPrinterExists){
        Write-Host "Installing a printer..."
        Add-Printer -ConnectionName $sharedPrinter
        Write-Host "Succeed to install - A Printer" -ForegroundColor Black -BackgroundColor Gray
    }
    else{
        Write-Warning "Failure to install - A Printer already exist"
    }
}

function B(){

$printerIPAddress = "192.168.1.101"
$sharedPrinter = "\\SERVERNAME\B"
$checkPrinterExists = Get-Printer -Name $sharedPrinter -ErrorAction SilentlyContinue

    if ((Test-NetConnection -ComputerName $printerIPAddress -WarningAction SilentlyContinue).PingSucceeded){
        Write-Host "Succeed to connect - $printerIPAddress" -ForegroundColor Black -BackgroundColor Gray
        Start-Sleep(2)
    }
    else {
        Write-Warning "Failure to connect - $printerIPAddress"
    }
    
    if (-not $checkPrinterExists){
        Write-Host "Installing a printer..."
        Add-Printer -ConnectionName $sharedPrinter
        Write-Host "Succeed to install - B Printer" -ForegroundColor Black -BackgroundColor Gray
    }
    else{
        Write-Warning "Failure to install - B Printer already exist"
    }
}

Write-Host "Running...Please wait..."
A;
B;

1 Ответ

1 голос
/ 21 июня 2020

Я попытался упростить ваш код, а также по своей сути обработал сценарий «прекратить работу, если Test-NetConnection не работает».

Поскольку ваша основная цель - установить принтер, функция выдает ошибку, если параметр $sharedPrinter не соответствует определенным критериям ValidateScript.

Function Install-Printer {

    [CmdletBinding()]
    Param(
    [parameter(Mandatory=$true)]
    [ValidateScript({$_ -match [IPAddress]$_ })]  
    [string]
    $printerIPAddress,

    [parameter(Mandatory=$true)]
    [ValidateScript({(Test-Path $_) -and ($Printer = Get-Printer -Name $_)})]  
    [string]
    $sharedPrinter
    )

    if ((Test-NetConnection -ComputerName $printerIPAddress -WarningAction SilentlyContinue).PingSucceeded) {

        Write-Host "Succeed to connect - $printerIPAddress" -ForegroundColor Black -BackgroundColor Gray
        Write-Host "Installing a printer..."
        Add-Printer -ConnectionName $sharedPrinter
        if($?){ # if previous command succeeded
            Write-Host "Succeed to install - $($Printer.Name) Printer" -ForegroundColor Black -BackgroundColor Gray
        }
        else {
            Write-Warning "Failure to install - $($Printer.Name) Printer already exist"
        }

    }
    else {

        Write-Error "Failure to connect - $printerIPAddress"

    }

}

Write-Host "Running...Please wait..."
# Install Printer A
Install-Printer -printerIPAddress "192.168.1.100" -sharedPrinter "\\SERVERNAME\A"
# Install Printer B
Install-Printer -printerIPAddress "192.168.1.101" -sharedPrinter "\\SERVERNAME\B"
...