简体   繁体   中英

Powershell not reading .txt lines

I cannot get PowerShell to run this .txt file, what am I doing wrong? I tried changing the name of the .txt and checked passed scripts and everything seems to be the same but I keep getting an error saying that the ".txt in invalid"

$POSName = "$PSScriptRoot\Bex.txt"

foreach ($POS in (Get-Content $POSName)) {
    $Bex = Get-Service -ComputerName $POSName | Where-Object { $_.name -eq "BexServ" }
}

If ($Bex -eq $null) {
    # Service does not exist
    Write-Host " doesn't exist." -ForegroundColor Red
} 
Else {
    # Service does exist
    Write-Host "The $($Bex.Name) service found." -ForegroundColor Green
           
    If ($Bex.Status -eq "Running") {
        # Stop Service
        Set-Service -status stopped -ComputerName $POSName -name $Box.Name -ErrorAction Stop

        Write-Host "The $($Bex.Name) successfully stopped."  -ForegroundColor Green 
    }
    else {
        #service already stopped
        If ($Bex.Status -eq "Stopped") {
            Write-Host "The $($Bex.Name) service already Stopped." -ForegroundColor Green
        }
    }
}

As commented, you are using the wrong variable in the loop. The code is reading the text file just fine, it is Get-Service that cannot deal with a path to a file in the -ComputerName parameter.

Also, the placing of the if..else should be inside the loop, not after.

Try

$POSName = "$PSScriptRoot\Bex.txt"

foreach ($POS in (Get-Content $POSName)) {
    $Bex = Get-Service -ComputerName $POS | Where-Object { $_.name -eq "BexServ" }

    If (!$Bex) {
        # Service does not exist
        Write-Host " doesn't exist." -ForegroundColor Red
    } 
    Else {
        # Service does exist
        Write-Host "The $($Bex.Name) service found." -ForegroundColor Green
           
        If ($Bex.Status -eq "Running") {
            # Stop Service
            Set-Service -status stopped -ComputerName $POSName -name $Box.Name -ErrorAction Stop

            Write-Host "The $($Bex.Name) successfully stopped."  -ForegroundColor Green 
        }
        else {
            #service already stopped
            If ($Bex.Status -eq "Stopped") {
                Write-Host "The $($Bex.Name) service already Stopped." -ForegroundColor Green
            }
        }
    }
}

It might also be a good idea to output the computername ( $POS ) in the Write-Host lines too

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM