1

今日スクリプトを書き始めたばかりですが、以下を実行して複数の「M」を選択すると、その主要なコアに入る前に、IFステートメントは「M」に移動しますが、ウィンドウが表示されてポップアップしますパスを尋ねると、意図的にウィンドウを閉じてエラーになり、elseステートメントに直行します...

スクリプトを終了させるにはどうすればよいでしょうか。それを選択$answer -eq "M"すると、スクリプトをキャンセルしたときに、そこで終了し、次にその IF ステートメントで終了し、ELSE ステートメントに進まなくなります。

上記が理にかなっていることを願っています-それを説明するより良い方法は考えられません..

また...次の声明には満足できません。

while("S","M" -notcontains $answer)

問題は、人が何か他のものを入力すると、質問をポップし続けることです。誰かが間違った値を入力し、ユーザーに「"S" または "M" を入力してください」と尋ねた場合にエラーを出すにはどうすればよいですか。

コード:

Write-Host ""
Write-Host "Backup Troubleshooting Script" -ForegroundColor Cyan
Write-Host ""

$answer = Read-Host "Do you want to check for multiple (M) servers or a single (S) server? Please enter "S" or "M""

while("S","M" -notcontains $answer)
{
    $answer = Read-Host "Do you want to check for multiple (M) servers or a single (S) server? Please enter "S" or "M""
}

If ($answer -eq "M")
{
    $serverlist = Read-Host "Please enter path to server list: "
    $computer = Get-Content -path $serverlist

        foreach ($computer1 in $computer)
        {
            Write-Host $computer1
            (Get-WmiObject -computerName $computer1 Win32_Service -Filter "Name='Alerter'").StopService()
            sleep 3
            (Get-WmiObject -computerName $computer1 Win32_Service -Filter "Name='Alerter'").StartService() 
            Write-Host `
        }

else
{
    Write-Host "You have chosen "S""
}
}

エラー:

> Backup Troubleshooting Script
> 
> Read-Host : An error of type
> "System.Management.Automation.Host.PromptingException" has occurred.
> At
> C:\Users\gaachm5\AppData\Local\Temp\769b7304-5529-4f5c-aba7-2cd3dcc2cec9.ps1:15
> char:16
> +     $serverlist = Read-Host "Please enter path to server list: "
> +                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : ResourceUnavailable: (:) [Read-Host], PromptingException
>     + FullyQualifiedErrorId : System.Management.Automation.Host.PromptingException,Microsoft.PowerShell.Commands.ReadHostC
> ommand   Get-Content : Cannot bind argument to parameter 'Path'
> because it is null. At
> C:\Users\gaachm5\AppData\Local\Temp\769b7304-5529-4f5c-aba7-2cd3dcc2cec9.ps1:16
> char:32
> +     $computer = Get-Content -path $serverlist
> +                                   ~~~~~~~~~~~
>     + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidationException
>     + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentComma
> nd   else : The term 'else' is not recognized as the name of a cmdlet,
> function, script file, or operable program. Check the  spelling of the
> name, or if a path was included, verify that the path is correct and
> try again. At
> C:\Users\gaachm5\AppData\Local\Temp\769b7304-5529-4f5c-aba7-2cd3dcc2cec9.ps1:27
> char:1
> + else
> + ~~~~
>     + CategoryInfo          : ObjectNotFound: (else:String) [], CommandNotFoundException
>     + FullyQualifiedErrorId : CommandNotFoundException
>  
> 
>     Write-Host "You have chosen "S""
4

1 に答える 1

4

中括弧が間違っています。コードは次のようになります。

            (Get-WmiObject -computerName $computer1 Win32_Service -Filter "Name='Alerter'").StartService() 
            Write-Host `
        }
}
else
{
    Write-Host "You have chosen "S""
}
于 2013-03-13T18:07:16.170 に答える