Das Einfügen eines mehrzeiligen PowerShell-Skripts funktioniert in PowerShell ISE, schlägt jedoch in der PowerShell-Konsole fehl

Das Einfügen eines mehrzeiligen PowerShell-Skripts funktioniert in PowerShell ISE, schlägt jedoch in der PowerShell-Konsole fehl

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 elseum einen Teil der ifAnweisung 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"
}

verwandte Informationen