jeudi 5 mars 2015
Récupérer le dernier jour de la semaine du mois en cours en powershell
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)
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
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) -BodyAsHtmlUne 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
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
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