Menu Content/Inhalt
Accueil arrow Scripting arrow Batch arrow PoshBootstrap

Syndication

Abonnez-vous à ce fil RSS pour être tenu informé des nouveautés de ce site.

PoshBootstrap Convertir en PDF Version imprimable Suggérer par mail
Écrit par Gilles LAURENT   
16-09-2014
PoshBootstrap - Embarquer du code Powershell au sein d'un script de commandes Windows

J'utilise ce principe pour mes scripts Perl. Ceci me permet de réaliser facilement des actions de Pré et Post traitement en langage de commandes Windows tout en bénéficiant dans le même fichier de script de la puissance du langage Perl. Suite à la demande d'un client, j'ai dû reproduire ce principe cette fois pour embarquer du code Powershell au sein d'un script de commandes Windows. Powershell exploite les fondations .Net et est de ce fait incontournable pour administrer les plateformes Windows modernes. Ce Shell offre des possibilités infinies, tant aux administrateurs qu'aux développeurs .Net. Cet essai le confirme.

Historique :

        V1.2 - 20210102 - Support PowerShell Core
        V1.1 - 20192701 - fix: the parameter name 's' is ambiguous. Using -skip and -first
        V1.0 - 20140916 - Première Release Publique

Plateformes supportées :
Windows XP et versions supérieures

Pré requis :
Microsoft Windows Powershell 2.0+

Listing 1 : PoshBootstrap.cmd

@rem = '--*-POWERSHELL-*--' ;
@rem = 'Bootstrap sample v1.2' ;
@rem = 'Runs Embedded Powershell script' ;
@rem = 'Copyright (c) 2014-2021 GiL' ;
@rem = '

@echo off
setlocal enabledelayedexpansion
pushd "%~dp0
set s=&set e=&set p=&set args=%*
if defined args set args=%args:"=\"%
for /f "delims=:" %%i in ('findstr /bn "#^! __" "%~f0"') do if not defined s (set s=%%i) else (set/a e=%%i-!s!-1)
for %%i in (pwsh.exe,powershell.exe) do if not defined p (set p=%%~$PATH:i)
%p% -nop -sta -com iex $('$args=^&{$args}%args%;'+[string]::join([environment]::newline,$(gc '%~f0'^|select -skip %s% -f %e%)))
goto :endofposh

@rem ';
#!/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
{

  param (
    [string]$arg0 = "<None>"
  )

  write-host -f yellow "Powershell $($psversiontable.psedition) started."
  write-host -f green  "Arguments received from batch file :"
  [pscustomobject]@{"#arg"=0;"value"=$arg0}
  for ($n=0; $n -lt $args.count; $n++) {
    [pscustomobject]@{"#arg"=$n+1;"value"=$args[$n]}
  }

}.invoke($args)

__END__

:endofposh
pause
endlocal
popd

Note :
Le code Powershell écrit sous la forme d'un Script-Block doit se situer entre les balises Shebang (#!/<Path>) et  __End__. Les commandes de Post-traitement doivent se situer après l'étiquette :endofposh

Ce script permet le passage des arguments transmis au script de commandes Windows vers le script Powershell embarqué. Ci-dessous un exemple d'utilisation avec le passage de quatre arguments.
C:\> .\PoshBootstrap.cmd -p 0 -r 1 
Powershell Core started. 
Arguments received from batch file :
                        
#arg value
---- -----
   0 -p                                                                     
   1 0                                                                     
   2 -r
   3 1                                                                      
                                                                                
Press any key to continue...  

Téléchargement :

Guide PDF : -
Archive : PoshBootstrap.zip

Dernière mise à jour : ( 02-01-2021 )
 
Suivant >