Jak donutit PowerShell, aby vždy vrátil pole?


PowerShell je dozajista noční můrou nejednoho admina. Je to sice silný nástroj, ale to jak je napsaný je tristní. Totiž, to si takhle napíšete funkci, která vylistuje přihlášené uživatele na počítači, no a když je to jeden uživatel, je vrácen string, když je jich víc, tak array. Mimo to, pokud vracíte hodnoty z funkce, tak si je PS vrací také spíše jak ho to napadne. Jak tedy donutit PS, aby vždy vracel pole?

Nadávám na PS, ale důvod tohoto formátování je asi ten, že se PS snaží vždy vracet výsledek v takovém stavu, aby byl snadno zobrazitelný v terminálu. Problém je v tom, že při psaní skriptů na to musíte pořád myslet.

Vícero způsobů

Pokud je příkaz uzavřen do @(), bude výsledek vrácen jako pole. Stejného lze dosáhnout při přiřazení výsledku proměnné tak, že před proměnnou explicitně napíšete [array] a bez mezery hned za závorku napíšete proměnnou.

Co se týče návratových typů z funkce, tak pokud místo return $data, napíšete return ,$data, dojde k tomu, že funkce vrátí stejný typ proměnné jaký je použit ve funkci.

Pokud si chcete usnadnit práci, můžete využít funkci z článku Converting to Array z webu Microsoftu. Protože web MS je nestálý, uvedu funkci raději i zde.

function ToArray
{
  begin
  {
    $output = @();
  }
  process
  {
    $output += $_;
  }
  end
  {
    return ,$output;
  }
}

Funkci pak stačí volat v pipeline takto | ToArray.