Um ErgänzungMartin Brandl's helpful answer:
Wie viele andere Sprachen - aber anders als VBScript zum Beispiel - PowerShell verwendet verschiedene Symbole für die Zuweisung Operator (=
) im Vergleich zur Gleichheit Operator (-eq
).
Diese Unterscheidung ermöglicht unter Verwendung von Zuweisungen als Ausdrücke, das ist, was Sie versehentlich tat
if (($TimeDifference) = 14) ...
ordnet14
variable $TimeDifference
, wie Martin erklärt, und, weil die Zuordnung eingeschlossen ist in (...)
, liefert den zugewiesenen Wert (die innere(...)
um $TimeDifference
machen hier keinen Unterschied).
Deshalb ist der (...)
ausgewertet Ausdruck von if
hat Wert 14
, die als $True
in diesem Booleschen Kontext interpretiert wird.
Wenn Sie mehr über die Operatoren von PowerShell erfahren möchten, führen Sie Get-Help about_Operators
aus.
Schließlich ist hier eine rationalisiert Version des Codes, die nicht Zwischenvariablen erfordert, verwendet ein werfen den String in eine [datetime]
Instanz zu konvertieren und verwendet [datetime]::now
, desto effizienter Äquivalent Get-Date
(obwohl das selten von Bedeutung sein wird).
if (([datetime]::now - [datetime] '2017-04-20').Days -eq 14) {
"test"
}
Beachten Sie, wie "test"
als eine Erklärung von selbst implizit Ausgabe an Powershell (Erfolg) Ausgangsstrom sendet, die standardmäßig auf der Konsole ausgibt.
Write-Host
umgeht diesen Stream und should generally be avoided.