Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 1

Witam.

W samym skrypcie stosuję konstrukcję:

[CmdletBinding()]

[Parameter(Mandatory=$False)]

[string]$param1, [switch] $help )

W wywołaniu skryptu jako parametr wpisuję ciąg np. : "Get-Process" lub ciekawszy przykład "Get-ADComputer -filter *" i chciałbym potem użyć np. konstrukcji: $komputery = $param1. Niestety to nie działa.

$komputery zwraca mi poprawny string, a chciałbym mieć listę procesów lub listę komputerów z AD (przykład 2).

Prawdopodobnie $param1 nie powinien być typu String, a System... coś tam,coś tam. :-)

Bezpośrednie użycie składni w samym skrypcie działa poprawnie:

$komputery = Get-ADComputer -filter *

Ale w moim skrypcie chciałbym, aby parametrem było polecenie, dowolny cmdlet.

Jak to ograć, jak sprawić, aby konstrukcja $komputery=$param1 zwracała poprawny zestaw danych?

Co zrobić, aby typ [string] dał się przekształcić na cmd-let-a?

A może trzeba już na wstępie w definiowaniu parametru określić dla niego odpowiedni typ, tylko jaki?

 

Pozdrawiam Wojtek.

 

Wojciech_Kreczmański
  • Zapytał
  • @ Wojciech_Kreczmański | 19.03.2018
    • 0
    • 0
    • 0

Odpowiedź (1)

  • 0

Znalazłem rozwiązanie (chyba przypadkiem - książki mają taką jedną wadę - trza je czasem czytać). :-)

Należy zamiast $komputery = $param1 zastosować w tym przypadku:

$komputery =  Invoke-Expression $param1.

Działa nawet z tak rozbudowanym parametrem. :)

'Get-ADComputer -filter * -SearchBase "OU=OBSZAR_XXX,OU=DYREKCJA-CEN,DC=domenka,DC=pl" | select -ExpandProperty name' 



 

Wojciech_Kreczmański
  • Odpowiedział
  • @ Wojciech_Kreczmański | 19.03.2018
    • 0
    • 0
    • 0