WinFuture-Forum.de: PowerShell Script mit Schalter aufrufen - WinFuture-Forum.de

Zum Inhalt wechseln

Windows 10: Alle News, der Download sowie zahlreiche Screenshots und Videos zum neuen Betriebssystem von Microsoft. Jetzt im WinFuture Windows 10 - Special informieren!
Seite 1 von 1

PowerShell Script mit Schalter aufrufen


#1 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 05. Juni 2019 - 08:39

Sehr geehrte Damen und Herren,

mein PowerShell Skript möchte ich gerne optimieren, indem ich für den Aufruf einer bestimmtem Option (z.B: -h oder -a) ein anderer Teil des Skriptes ausführen kann.

In Nutzung ist soweit ich weiß PowerShell 6.0.

Für den Schalter -h soll eine Hilfe aufgerufen werden.
Für den Schalter -a soll das Skript im Admin Modus gestartet werden.

Der Aufruf soll dann wie anschließend aufgerufen werden:
<Skriptname>.ps1 -h oder <Skriptname>.ps1 -a

Bei einer Batch-Datei funktioniert dies ohne große Probleme.
Bei dieser Batch-Datei gebe ich einfach <Batchname>.bat -h ein und dann erscheint meine selbst geschriebene Hilfe im Fenster der Eingabeaufforderung.

In der Batch-Datei hatte ich das wie folgt gelöst:

set opt_a=no
set opt_h=no
for %%i in (%*) do (
if "%%i"=="-a" set opt_a=yes
if "%%i"=="/a" set opt_a=yes
if "%%i"=="-h" set opt_h=yes
if "%%i"=="/h" set opt_h=yes
if "%%i"=="-?" set opt_h=yes
if "%%i"=="/?" set opt_h=yes
)

Wenn ich jetzt das Script mit <...>.bat -h oder -? aufrufe erscheint die gewünschte Hilfe:

if "!opt_h!"=="yes" (
echo.
echo Hilfe ...
echo.
goto end
)

Ich hoffe auf rasche Hilfe meines Problems :)
Bei Fragen bitte einfach Fragen.

Mit freundlichen Grüßen
Alex

Dieser Beitrag wurde von TheBlackDragon bearbeitet: 05. Juni 2019 - 08:43

0

Anzeige



#2 Mitglied ist offline   sklaes 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 04. Dezember 04
  • Reputation: 0

geschrieben 05. Juni 2019 - 08:55

Hallo Alex,
das ganze wird über den Param-Block zu Anfang des Skriptes gelöst.

Param
  (
    [alias("H")][bool]$Help,
    [alias("A")][bool]$Admin
  )

if ($Help)
  {
    write-host ""
    write-host "Hilfe ..."
    write-host ""
    exit
  }



Das Fragezeichen ist als Alias für die Operation "where" hinterlegt und wird daher nicht als Parameter verwendet.

Dieser Beitrag wurde von sklaes bearbeitet: 05. Juni 2019 - 08:58

0

#3 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 05. Juni 2019 - 11:14

Hallo sklaes,

vielen Dank für die rasche Antwort.
Werde dies umgehend versuchen und schreiben wenn es funktioniert oder eben nicht funktioniert.

Mit freundlichen Grüßen
Alex
0

#4 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 05. Juni 2019 - 11:31

Hallo Sklaes,

hatte das Script jetzt etwas editiert nur leider habe ich keinerlei Ausgabe,

Das editierte Script:


function Main{

    Param(
        [alias("H")][bool]$Help,
        [alias("A")][bool]$Admin,
        [alias("R")][bool]$Mailwaehlen
    )

    if($Help){
        Write-Host 
        Write-Host  Aufruf mit Parametern [-r] [-a] [-h] 
        Write-Host 
        Write-Host      `t -r ... Senden von VM Infos an gewuenschte E-Mail
        Write-Host      `t -a ... Ausfuehrung als Admin mit Ausgabe aller Informationen:
        Write-Host             `t`t`t 	VMName Owner Backup Local Backup Remote 
        Write-Host             `t`t`t 	Zustand vCPU vRAM vDisk HWVersion ToolsVersion        
        Write-Host      `t -h ... Anzeige dieser Hilfe
        Write-Host 
    }

    if($Admin){
        Write-Host admin
    }     

    if($Mailwaehlen){
        Write-Host anpassungEMail
    }

}

Main



Die Ausgabe an PowerShell Konsole ist:

PS H:\Test> .\Skript_PowerShell.ps1 -h
PS H:\Test> .\Skript_PowerShell.ps1 -h
PS H:\Test>



was muss ich anpassen, dass ich die jeweilige Ausgabe in der PowerShell Konsole bekomme.

Ich bitte um weitere Hilfe.
Bin leider blutiger Anfänger im Programmieren von PowerShell.

Mit freundlichen Grüßen
Alex

Dieser Beitrag wurde von TheBlackDragon bearbeitet: 05. Juni 2019 - 11:34

0

#5 Mitglied ist offline   sklaes 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 04. Dezember 04
  • Reputation: 0

geschrieben 05. Juni 2019 - 13:15

Hallo Alex,
das Problem ist, dass du Parametern für die Funktion Main definiert hast, diese dann jedoch nicht nutzt.
Da was du hier bauen wollen würdest wäre eine doppelte Weiterreichung von Parmetern.
Aufruf --> Skript --> Funktion


Lass einfach die "function Main{" (und was dazu gehört) weg, dann gehts:

Param(
	[alias("H")][switch]$Help,
	[alias("A")][switch]$Admin,
	[alias("R")][switch]$Mailwaehlen
)

if($Help){
	Write-Host 
	Write-Host  Aufruf mit Parametern [-r] [-a] [-h] 
	Write-Host 
	Write-Host      `t -r ... Senden von VM Infos an gewuenschte E-Mail
	Write-Host      `t -a ... Ausfuehrung als Admin mit Ausgabe aller Informationen:
	Write-Host             `t`t`t   VMName Owner Backup Local Backup Remote 
	Write-Host             `t`t`t   Zustand vCPU vRAM vDisk HWVersion ToolsVersion        
	Write-Host      `t -h ... Anzeige dieser Hilfe
	Write-Host 
}

if($Admin){
	Write-Host admin
}     

if($Mailwaehlen){
	Write-Host anpassungEMail
}





P.S.: hab aus dem "bool" noch ein "switch" gemacht - macht es etwas komfortabler

Dieser Beitrag wurde von sklaes bearbeitet: 05. Juni 2019 - 13:19

0

#6 Mitglied ist offline   CaNNoN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 484
  • Beigetreten: 16. November 05
  • Reputation: 78

geschrieben 05. Juni 2019 - 14:05

je nachdem wie kritisch powershell das sieht, aber bei deinen "write-host" commands fehlen im gegensatz zu sklaes' beispiel die anfuehrungszeichen (")
0

#7 Mitglied ist offline   TheBlackDragon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 24
  • Beigetreten: 05. Juni 19
  • Reputation: 0

geschrieben 05. Juni 2019 - 15:47

Vielen herzlichen Dank euch beiden,

mit dem Switch und den "" funktioniert der Aufruf mit -a bzw. -h problemlos.

Mit freundlichen Grüßen
Alex
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0