[PowerShell] Parameter zonder argumenten in een function

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DaSt1986
  • Registratie: Mei 2011
  • Laatst online: 28-07 08:12
Beste,

Ik probeer een function binnen PowerShell te maken die ik als volgt kan aanroepen:

Get-Information -Detailed


Opzich is dit geen probleem, alleen blijft Powershell roepen dat de variable Detailed een waarde moet krijgen. Ik heb de functie op dit moment als volgt opgebouwd:

function Get-Information
{
    Param($Detailed)
    if ($Detailed)
    {
        Write-Host "Detailed information"
    }
    else
    {
        Write-Host "Just a summary of stuff"
    }
}


Op Internet kan ik heel veel vinden over Parameters binnen PowerShell en hoe deze mandatory te maken zijn. Ik kan echter nergens vinden hoe ik bovenstaande voor elkaar kan krijgen. Ik heb ook geprobeerd de variable Detaild een ObjectType mee te geven (Bool, Int, String), maar ook dat mocht niet baten.

Iemand enig idee?

Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Haal de '-' eens weg in je aanroep.

Overigens gaat je functie nu "Detailed information" weergeven ongeacht de waarde van de parameter die je meegeeft.

code:
1
Get-Information Egel


geeft hetzelfde resultaat als

code:
1
Get-Information Detailed

[ Voor 100% gewijzigd door Crayne op 13-03-2012 15:15 ]

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • DaSt1986
  • Registratie: Mei 2011
  • Laatst online: 28-07 08:12
Crayne schreef op dinsdag 13 maart 2012 @ 15:13:
Haal de '-' eens weg in je aanroep.

Overigens gaat je functie nu "Detailed information" weergeven ongeacht de waarde van de parameter die je meegeeft.

code:
1
Get-Information Egel


geeft hetzelfde resultaat als

code:
1
Get-Information Detailed
Ja, dat klopt inderdaad. Maar uiteindelijk wil ik dus meerdere parameters (-Detailed, -Summary, -Long, -User, -Computer), en dan gaat dat neit meer werken. Daarnaast moet het ook te combineren zijn (-Detailed -Computer zou het zelfde moeten doen als -Computer -Detialed)

Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Aha. Dat zei je er niet bij.

Als je met -[VARIABLE] argumenten gaat doorgeven aan je functie, hoor je achter -detailed een waarde mee te geven.

Dus:

code:
1
Get-Information -Detailed True


Dan maakt het ook niet meer uit of je meer dan één variabele hebt of in welke volgorde ze staan.

Overigens is dit alles prima te vinden op Google (want ik weet echt niets van Powershell en dit komt allemaal rechtstreeks van het web.

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • DaSt1986
  • Registratie: Mei 2011
  • Laatst online: 28-07 08:12
Crayne schreef op dinsdag 13 maart 2012 @ 15:43:
Aha. Dat zei je er niet bij.

Als je met -[VARIABLE] argumenten gaat doorgeven aan je functie, hoor je achter -detailed een waarde mee te geven.

Dus:

code:
1
Get-Information -Detailed True


Dan maakt het ook niet meer uit of je meer dan één variabele hebt of in welke volgorde ze staan.

Overigens is dit alles prima te vinden op Google (want ik weet echt niets van Powershell en dit komt allemaal rechtstreeks van het web.
Ja, ook dat snap ik, maar ik wil het juist zonder die waarde.

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Probeer het eens met een SwitchParameter. Dit is vergelijkbaar met een nullable type in de CLR. Met .IsPresent kun je controleren of de parameter gebruikt is in de aanroep.

Acties:
  • 0 Henk 'm!

  • DaSt1986
  • Registratie: Mei 2011
  • Laatst online: 28-07 08:12
AWESOME! Dat zocht ik! Heb nu het volgende en werkt perfect:

function SWT
{
Param
(
[switch]$PrintText
)

if ($PrintText.IsPresent)
{
Write-Host "You added the parameter PrintText"
}
else
{
Write-Host "You didnt add the parameter PrintText"
}
}
Pagina: 1