PowerShell Return Value
Hallo liebe Community,
ich lerne derzeit Powershell und habe ein Problem mit den Return Values und bitte um Hilfe.
Code:
Funktionsaufruf:
Ausgabe bzw. ReturnValue:
Ich habe jetzt schon gelesen, dass return in Powershell anders funktioniert als in anderen Programmiersprachen. Allerdings verstehe ich nicht ganz, wie ich nun an meinen gewünschten Wert komme.
Könnte mir bitte jemand anhand dieses Beispiels zeigen, wie an die 0 komme.
Wenn weitere Informationen benötigt werden, dann bitte Bescheid geben.
Vielen Dank schon mal!
Grüße
Felix
ich lerne derzeit Powershell und habe ein Problem mit den Return Values und bitte um Hilfe.
Code:
function Compress-Folder {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)][String]$Path,
[Parameter(Mandatory = $true)][String]$destinationPath,
[Parameter(Mandatory = $false)][String]$sevenZipPath,
#[Parameter(Mandatory = $false)][String]$password,
[Parameter(Mandatory = $false)][String]$zipFileName = "folder.zip"
)
begin {
#Ordnerpfade anpassen, dass sie immer auf \ enden.
if (!($Path.EndsWith("\"))) {
$Path = $Path + "\"
}
if (!($destinationPath.EndsWith("\"))) {
$destinationPath = $destinationPath + "\"
}
$destinationFilePath = $destinationPath + $zipFileName
}
process {
#Wenn möglich 7zip, sonst Windows integrierter Zip
if (Test-Path $sevenZipPath) {
Write-Host "Verwende 7-Zip zum komprimieren."
&$sevenZipPath a -tzip $destinationFilePath $Path\*
write-host $LASTEXITCODE
return $LASTEXITCODE
}
else {
Write-Host "Verwende Windows Zipper zum komprimieren."
Write-Host "Packe nach: $destinationFilePath."
Compress-Archive -Path $Path -DestinationPath $destinationFilePath
# try {
# Compress-Archive -Path $Path -DestinationPath $destinationFilePath
# }
# catch{
# return 1
# }
return 0
}
}
end {
}
}
Funktionsaufruf:
$compressFolderExitCode = Compress-Folder -Path $sourcePath -destinationPath $tempPath -sevenZipPath $sevenZipPath -zipFileName $zipFileName
Write-Host $compressFolderExitCode
Ausgabe bzw. ReturnValue:
0 #von write-host $LASTEXITCODE in Compress-Folder, Richtiger Wert
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21 Scanning the drive: 2 folders, 0 files, 0 bytes Creating archive: C:\Users\Felix\Temp\export.zip Add new data to archive: 2 folders, 0 files, 0 bytes Files read from disk: 0 Archive size: 322 bytes (1 KiB) Everything is Ok 0 #von Write-Host $compressFolderExitCode im eigentlichen Funktionsaufruf
Ich habe jetzt schon gelesen, dass return in Powershell anders funktioniert als in anderen Programmiersprachen. Allerdings verstehe ich nicht ganz, wie ich nun an meinen gewünschten Wert komme.
Könnte mir bitte jemand anhand dieses Beispiels zeigen, wie an die 0 komme.
Wenn weitere Informationen benötigt werden, dann bitte Bescheid geben.
Vielen Dank schon mal!
Grüße
Felix
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 463854
Url: https://administrator.de/contentid/463854
Ausgedruckt am: 23.11.2024 um 18:11 Uhr
11 Kommentare
Neuester Kommentar
Moin,
Wie meinst Du das? Variablen sind in Funktionen wie immer lokal und außerhalb nicht vorhanden. Und das mit dem Array hat der TO, glaube ich, auch nicht richtig verstanden. Deshalb das im Beispiel (Ausgabe der Konsole der ISE) auch nochmal.
Liebe Grüße
Erik
Zitat von @NetzwerkDude:
In PowerShell wird aus einer function alles was nicht explizit weggemacht wird, returned.
d.h. was du nicht haben willst, der variable $null zuweisen
In PowerShell wird aus einer function alles was nicht explizit weggemacht wird, returned.
d.h. was du nicht haben willst, der variable $null zuweisen
Wie meinst Du das? Variablen sind in Funktionen wie immer lokal und außerhalb nicht vorhanden. Und das mit dem Array hat der TO, glaube ich, auch nicht richtig verstanden. Deshalb das im Beispiel (Ausgabe der Konsole der ISE) auch nochmal.
$return = test
write-host "Hier fängt die Ausgabe an."
write-host "Die Funktion test gibt zurück: " -NoNewline
test
write-host "In `$test1 steht: $test1"
write-host "In `$test2 steht: $test2"
$i = 0
while($i -lt $return.length) {
Write-Host $return[$i]
$i++
}
Hier fängt die Ausgabe an.
Die Funktion test gibt zurück: Wie geht's
In $test1 steht:
In $test2 steht:
W
i
e
g
e
h
t
'
s
Liebe Grüße
Erik
So meinte ich das:
Write-Host nimmt eine Sonderrole ein, da er immer ans "Fenster" was zurückgibt
Und das ist ja die "andersheit" von PS, er liefert alles was in der function ausgegeben wird, auch zurück - bei anderen Programmiertsprachen muss das ja explizit geschehen
function gibt_alles_zurück {
Write-Host "Hallo Host"
Write-Output "Hallo normalen Returnwert"
Get-Process | select -First 1
}
function gibt_nix_zurück {
$null = Write-Host "Hallo Host"
$null = Write-Output "Hallo normaler Returnwert"
$null = Get-Process | select -First 1
}
gibt_alles_zurück
gibt_nix_zurück
Write-Host nimmt eine Sonderrole ein, da er immer ans "Fenster" was zurückgibt
Und das ist ja die "andersheit" von PS, er liefert alles was in der function ausgegeben wird, auch zurück - bei anderen Programmiertsprachen muss das ja explizit geschehen
Moin,
Zitat von @erikro:
Wie meinst Du das? Variablen sind in Funktionen wie immer lokal und außerhalb nicht vorhanden.
Variablen ja - für Ausgaben gilt das aber nichtWie meinst Du das? Variablen sind in Funktionen wie immer lokal und außerhalb nicht vorhanden.
Function MyTest {
$a=1
$b=2
$b
return $a
}
$z=MyTest
$z.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object System.Array
$z
2
1
Und was willst du mit dem begin, process und end erreichen?
Die werden erst interessant und essentiell wenn man die Funktion Objekte über die Pipeline verarbeiten lässt.Nutzt man keine Pipeline sind sie überflüssig.
About Functions Advanced Methods
Grüße Uwe