Beim Einfügen eines mehrzeiligen Skripts in PowerShell ISE scheint der gesamte Skriptblock auf einmal ausgeführt zu werden.
Ausgabe von PowerShell ISE
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.145
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.145
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
PS C:\> if ($true) {
Write-Output "yes"
}
else {
Write-Output "no"
}
yes
PS C:\>
Beim Einfügen eines mehrzeiligen Skripts in die PowerShell-Konsole scheint es zu versuchen, es zeilenweise auszuführen?
Ausgabe aus der PowerShell-Konsole
C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.145
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.145
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
C:\> if ($true) {
>> Write-Output "yes"
>> } yes
C:\> else {
>> Write-Output "no"
>> } 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 line:1 char:1
+ else {
+ ~~~~
+ CategoryInfo : ObjectNotFound: (else:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
C:\>
Das Verhalten, das ich von der PowerShell-Konsole erwarte, ist dasselbe wie das Verhalten in PowerShell ISE. Es sollte bekannt sein, dass es sich dabei else
um einen Teil der if
Anweisung handelt.
Ich kann mich nicht erinnern, dass es sich jemals so verhalten hat. Was führt dazu, dass dieses Verhalten anders ist?
Antwort1
Ihr Skript schlägt fehl, weil else {
sich das in einer anderen Zeile befindet als das }
darüber. Fügen Sie entweder ein Backtick hinzu, um anzuzeigen, dass es in die nächste Zeile übergeht, oder entfernen Sie den Wagenrücklauf vor else
:
if ($true) {
Write-Output "yes"
} else {
Write-Output "no"
}