Weblog @ rebex.cz

Weblogy na webu Rebexu
Welcome to Weblog @ rebex.cz Sign in | Help
in Search

VasekB

Vrácení hodnot z funkce v PowerShellu zpět do DOS-CMD scriptu

Pěkně mne podusilo vrácení hodnot z funkce v PowerShellu zpět do DOS-CMD scriptu.
Když se použije pro návrat hodnoty z funkce "return $hodnota", tak je výstup automaticky oříznut podle velikosti DOS-CMD okna, ve kterém to bylo spuštěno, což při předávání hodnot ve scriptu dál je docela problém ;o) Vzpomněl jsem si na problémy s vracením hodnot, které popisoval Martin Žugec
http://martinzugec.blogspot.com/2008/08/returning-values-from-fuctions-in.html

ale postrčilo mne až
http://weblogs.asp.net/soever/archive/2008/12/09/powershell-output-capturing-and-text-wrapping-strange-quirks-solved.aspx

a správně je tedy vracet pomocí "$hodnota | write-host" ("write-host $hodnota" nefunguje)

 
Spuštění LogStatus.cmd v DOS-CMD okně  o velikosti Screen Buffer Size 80x50 uloží funkce Get-LogStatusKO do LogStatus.csv data zalomené na dva řádky. Pokud se totéž spustí v třeba 200x50, tak bude vše správně na jednom řádku.
 
----- LogStatus.cmd -----
setlocalset logIn=.\LogStatus.txt
set logOut=.\LogStatus.csv
for /f "tokens=1,2 delims=;" %%i in ('powershell.exe -NoLogo -NoProfile -NonInteractive -Command "& '.\LogStatus.ps1'" """%log%"""') do (
  if NOT exist "%logOut%" echo "Name","Value" > "%logOut%"  
  echo "%%i","%%j" > "%logOut%"
)

----- LogStatus.cmd -----

 

----- LogStatus.ps1 -----

Function Get-LogStatusOK {
  param([string]$File)
  $OutPut = 'data;1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm'
  # vraci spravnou, nezalomenou, hodnotu
  $OutPut | write-Host
}
 
Function Get-LogStatusKO {
  param([string]$File)
  $OutPut = 'data;1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm'
  # vraci zalomenou hodnotu podle delky okna
  return $OutPut
}
 
Get-LogStatusOK -File $args[0]
Get-LogStatusKO -File $args[0]

----- LogStatus.ps1 -----

 

----- LogStatus.csv -----

"Name","Value"
"data","1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm" "data","1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm12"
"34567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm",""

----- LogStatus.csv -----

Published 19. května 2010 18:03 by vasekb
Filed under: ,

Comments

No Comments
Anonymous comments are disabled
Powered by Community Server (Personal Edition), by Telligent Systems