jeudi 5 mars 2015

Récupérer le dernier jour de la semaine du mois en cours en powershell

L'idée est de récupérer le dernier jour de la semaine (donc pas samedi ou dimanche) du mois courant.

Pour se faire, le plus simple, est de prendre le 1er jour du mois suivant, de retirer un jour afin d'obtenir le dernier jour du mois. Si ce jour est dimanche, on enlève 2 jours, si ce jour est samedi on en enlève qu'un. Si ce jour n'est ni samedi, ni dimanche, on le garde

En 2 lignes :

$nextMonthLastDay = (Get-Date -Month ((Get-Date).Month+1) -Day 1).AddDays(-1)
$nextTsDay = if(@{[DayOfWeek]::Sunday=$d.AddDays(-2);[DayOfWeek]::Saturday=$d.AddDays(-1)}[$d.DayOfWeek] -eq $null){$d}

vendredi 14 novembre 2014

Date oracle au format Http (RFC2616)

Pour avoir une date oracle formattée correctement pour un heaer HTTP(RFC2616), il est nécessaire d'utiliser le formation suivant : 'Dy,DD Mon YYYY HH24:mi:ss TZD'

Il sera également nécessaire de travailler avec des timestamp avec de pouvoir spécifier que l'heure et la date sont relatives à GMT. Ci-dessous une requête d'exemple qui affiche systimestamp dans le format souhaité:

select to_char(systimestamp AT TIME ZONE 'GMT','Dy,DD Mon YYYY HH24:mi:ss TZD')
from dual;


mercredi 8 octobre 2014

Envoyer un mail en powershell

La commande à utiliser en powershell pour envoyer un email est Send-MailMessage
Voici quelques exemples pour utiliser cette fonction:

Envoyer un mail en texte:

Send-MailMessage -To lui@blabla.com -From moi@blabla.com -Subject "Ceci est un test" -SmtpServer "smtpServer" -Body "Ceci est le corps du message"

Envoyer un mail dont le body est un fichier:

Send-MailMessage -To lui@blabla.com -From moi@blabla.com -Subject "Ceci est un test" -SmtpServer "smtpServer" -Body (get-content c:\file.txt -Raw)

 Envoyer un mail dont le body est un fichier html:

Send-MailMessage -To lui@blabla.com -From moi@blabla.com -Subject "Ceci est un test" -SmtpServer "smtpServer" -Body (get-content c:\file.html -Raw) -BodyAsHtml

Une alternative à Get-Content pour récupérer le contenu d'un fichier est de passer par la fonction statique System.IO.File.ReadAllText :

Send-MailMessage -To lui@blabla.com -From moi@blabla.com -Subject "Ceci est un test" -SmtpServer "smtpServer" -Body ([Io.File]::ReadAllText('H:\temp\test\ect988E.html')) -BodyAsHtml -Encoding 'UTF8'


Sources

dimanche 7 septembre 2014

JSDB.io - La base de données des librairies et frameworks javascript

JSDB.io est une base de données regroupant de nombreuses librairies et frameworks javascript utilisés pour le développement d'application client basé sur ce langage.

Chacune des entrées de cette librairie indique les informations suivantes:

  • Un lien vers la page d'accueil du framework
  • Une brève description
  • Un lien vers le project github
  • Des liens vers des CDN
  • Des liens vers des tutoriaux
Pour soumettre une librairie, il est nécessaire d'avoir un projet github contenant les sources du projet, que ce projet possède au moins 80 étoiles et que la librairie soit utilisable coté client.

Voila donc un lien utile a utiliser dés que vous cherchez une librairie qui peut vous aider : 

lundi 11 août 2014

Appeler un service WCF SOAP depuis Powershell


Powershell met à disposition le cmdlet New-WebServiceProxy pour créer un proxy pour appeler vos services WCF. Pour créer le proxy, il suffit de lui donner le WSDL du service a appeler.

Une fois le proxy généré, il suffit d'appeler la méthode correspondant à l'opération. Par exemple :

$proxy = New-WebServiceProxy -uri $WSDLUrl;
$res = $proxy.HelloWorld();

Dans le but de faire du monitoring, j'ai écrit un petit script, disponible ci dessous, qui permet, sur base d'un wsdl et du nom de l'opération à appeler, de vérifier que l'opération sur un service s'exécute correctement:

[CmdletBinding(SupportsShouldProcess=$true)]
Param(
    [Parameter(Mandatory=$True)][string]$WSDLUrl,
    [Parameter(Mandatory=$True)][string]$MethodName
    )

Write-Verbose "WSDLUrl=$WSDLUrl"
Write-Verbose "MethodName=$MethodName"

try
{
    $proxy = New-WebServiceProxy -uri $WSDLUrl -ErrorAction Stop
    if(-not $proxy.$MethodName)
    {
        Write-Error "Method $MethodName is not declared on service defined at $WSDLUrl"
        exit 1;
    }
    $res = $proxy.$MethodName.Invoke();
}
catch
{
    Write-Error $_
    exit;
}

if($res)
{
    Write-Verbose $res;
}
else
{
    Write-Verbose "void";
}

Write-Host "service called"

Quelques sources intéressantes si vous souhaitez aller plus loin !

mardi 4 février 2014

Session state has created a session id, but cannot save it because the response was already flushed by the application.

Cette erreur peut se produire lorsque l'on essaie de récupérer le session id d'une session alors que la réponse au client a déja été envoyée. Le sessionID étant passé par cookies, si on n'en a pas envoyé au client, il n'est dés lors, plus possible de lui renvoyer cet ID.

Un petit workaround pour régler ce problème, consiste à toujours créer un sessionID pour chaque utilisateur. Pour implémenter ce comportement, on peut utiliser l'event Session_Start dans le Global.asax avec le code suivant:

void Session_Start(object sender, EventArgs e)
{
    string sessionId = Session.SessionID;
}

Comment déterminer à qui appartient un package oracle à l'exécution

La solution que l'on rencontre le plus souvent pour répondre à cette question, consiste à récupérer dans le context quel est le schéma actuel via la fonction sys_context:

sys_context('userenv', 'current_schema')

Cependant, cette méthode ne fonctionnera pas si l'on se trouve dans une procédure d'un package marquée comme devant s'exécuter en utilisant le schéma actuel (c'est à dire de l'appelant) et non le schéma dans lequel se trouve le package(utilisation de "authid current_user" plus d'info ici)

En effectuant, quelques recherches, j'ai trouvé une autre solution (voir ici) qui consiste à analyser la call stack. La première entrée de cette dernière contiendra le nom du schéma et le nom du package qui est appelé(owner.package), il suffira donc d'extraire la première partie (celle juste avant le point) pour connaitre le propriétaire du package.

Une implémentation est proposée sur le site ou j'ai trouvé la réponse à ma question : http://cbohl.blogspot.be/2011/01/determine-owner-of-package.html