Une petite publication pour vous faire part d ela mise à jour du script d'interprétation des logs NPS:
La fonction get-NPSLogsFromFile s'est vu ajouter un argument 'LastLines' afin de ne lire que les dernières lignes du fichier de logs et ainsi accélérer le chargement:
Le script est téléchargeable ici
lundi 27 juillet 2020
vendredi 29 janvier 2016
Parseur de logs pour NPS (Network Policy Server)
Me revoilà avec quelques améliorations sur mon script pour interpréter les logs de IAS/NPS.
Je vous conseille de configurer votre serveur NPS pour effectuer une rotation quotidienne.
Le script est téléchargeable ici
Je vous conseille de configurer votre serveur NPS pour effectuer une rotation quotidienne.
Le script est téléchargeable ici
dimanche 21 septembre 2014
Interpreter les LOGs NPS / IAS
Quelle
tâche difficile que d’interpréter rapidement et correctement les LOGs renvoyé
par le service Radius Microsoft !
J’ai
donc créé 3 fonctions permettant d'interpréter les logs NPS (Network Policy
Server) ou IAS (Internet Authentication Service) :
GetIASLog
qui permet de récupérer les LOG NPS via une boite de dialogue ou via la
parametre « File »
InterpretIAS
qui est utilisée dans la fonction précédente et qui change les code interne en
quelque chose de plus compréhensible (ex : Packet-Type = 2 => Access-Accept)
GetLastLog
qui accepte en paramètres les logs et le nombre de ligne à renvoyer.
Ainsi,
pour récupérer les logs de « D:\Users\gmergoux\Desktop\IN1409.log »
dans la variable $MyLogs il suffira d’exécuter la commande suivante :
$MyLogs=GetIASLog -File
D:\Users\gmergoux\Desktop\IN1409.log
Les
logs sont ensuites interpretables via les commandes Powerhsell habituels, comme
par exemple $MyLogs | ft
Pour
récupérer seulement les 20 derniers logs avec les informations les plus
essentielles :
GetLastLog
-IASLogs $MyLogs -LastSelect 20
Function InterpretIAS{
param($IASDAtas)
$FormatIAS = @{Expression={$_.ComputerName};Label="ComputerName"}, `
@{Expression={$_.ServiceName};Label="ServiceName"}, `
@{Expression={$_."Record-Date"};Label="Record-Date"}, `
@{Expression={$_."Record-Time"};Label="Record-Time"}, `
@{Expression={
switch ($_."Packet-Type")
{
1 {"Access-Request (1)"}
2 {"Access-Accept (2)"}
3 {"Access-Reject (3)"}
4 {"Accounting-Request (4)"}
5 {"Accounting-Response (5)"}
11 {"Access-Challenge (11)"}
12 {"Status-Server (experimental) (12)"}
13 {"Status-Client (experimental) (13)"}
"" { "" }
default {($_)+" (unrecognized type)"}
}
};Label="Packet-Type"}, `
@{Expression={$_."User-Name"};Label="User-Name"}, `
@{Expression={$_."Fully-Qualified-Distinguished-Name"};Label="Fully-Qualified-Distinguished-Name"}, `
@{Expression={$_."Called-Station-ID"};Label="Called-Station-ID"}, `
@{Expression={$_."Calling-Station-ID"};Label="Calling-Station-ID"}, `
@{Expression={$_."Callback-Number"};Label="Callback-Number"}, `
@{Expression={$_."Framed-IP-Address"};Label="Framed-IP-Address"}, `
@{Expression={$_."NAS-Identifier"};Label="NAS-Identifier"}, `
@{Expression={$_."NAS-IP-Address"};Label="NAS-IP-Address"}, `
@{Expression={$_."NAS-Port"};Label="NAS-Port"}, `
@{Expression={$_."Client-Vendor"};Label="Client-Vendor"}, `
@{Expression={$_."Client-IP-Address"};Label="Client-IP-Address"}, `
@{Expression={$_."Client-Friendly-Name"};Label="Client-Friendly-Name"}, `
@{Expression={$_."Event-Timestamp"};Label="Event-Timestamp"}, `
@{Expression={$_."Port-Limit"};Label="Port-Limit"}, `
@{Expression={$_."NAS-Port-Type"};Label="NAS-Port-Type"}, `
@{Expression={$_."Connect-Info"};Label="Connect-Info"}, `
@{Expression={$_."Framed-Protocol"};Label="Framed-Protocol"}, `
@{Expression={$_."Service-Type"};Label="Service-Type"}, `
@{Expression={
switch ($_."Authentication-Type")
{
1 {"PAP (1)"}
2 {"CHAP (2)"}
3 {"MS-CHAP (3)"}
4 {"MS-CHAP v2 (4)"}
5 {"EAP (5)"}
7 {"None (7)"}
8 {"Custom (8)" }
11 {"PEAP (11)" }
"" { "" }
default {($_)+" (unrecognized type)"}
}
};Label="Authentication-Type"}, `
@{Expression={$_."Policy-Name"};Label="Policy-Name"}, `
@{Expression={
switch ($_."Reason-Code")
{
0 {"IAS_SUCCESS (0)"}
1 {"IAS_INTERNAL_ERROR (1)"}
2 {"IAS_ACCESS_DENIED (2)"}
3 {"IAS_MALFORMED_REQUEST (3)"}
4 {"IAS_GLOBAL_CATALOG_UNAVAILABLE (4)"}
5 {"IAS_DOMAIN_UNAVAILABLE (5)"}
6 {"IAS_SERVER_UNAVAILABLE (6)"}
7 {"IAS_NO_SUCH_DOMAIN (7)"}
8 {"IAS_NO_SUCH_USER (8)"}
16 {"IAS_AUTH_FAILURE (16)"}
17 {"IAS_CHANGE_PASSWORD_FAILURE (17)"}
18 {"IAS_UNSUPPORTED_AUTH_TYPE (18)"}
32 {"IAS_LOCAL_USERS_ONLY (32)"}
33 {"IAS_PASSWORD_MUST_CHANGE (33)"}
34 {"IAS_ACCOUNT_DISABLED (34)"}
35 {"IAS_ACCOUNT_EXPIRED (35)"}
36 {"IAS_ACCOUNT_LOCKED_OUT (36)"}
37 {"IAS_INVALID_LOGON_HOURS (37)"}
38 {"IAS_ACCOUNT_RESTRICTION (38)"}
48 {"IAS_NO_POLICY_MATCH (48)"}
64 {"IAS_DIALIN_LOCKED_OUT (64)"}
65 {"IAS_DIALIN_DISABLED (65)"}
66 {"IAS_INVALID_AUTH_TYPE (66)"}
67 {"IAS_INVALID_CALLING_STATION (67)"}
68 {"IAS_INVALID_DIALIN_HOURS (68)"}
69 {"IAS_INVALID_CALLED_STATION (69)"}
70 {"IAS_INVALID_PORT_TYPE (70)"}
71 {"IAS_INVALID_RESTRICTION (71)"}
80 {"IAS_NO_RECORD (80)"}
96 {"IAS_SESSION_TIMEOUT (96)"}
97 {"IAS_UNEXPECTED_REQUEST (97)"}
"" { "" }
default {($_)+" (unrecognized reason)"}
}
};Label="Reason-Code"}, `
@{Expression={$_."Class"};Label="Class"}, `
@{Expression={$_."Session-Timeout"};Label="Session-Timeout"}, `
@{Expression={$_."Idle-Timeout"};Label="Idle-Timeout"}, `
@{Expression={$_."Termination-Action"};Label="Termination-Action"}, `
@{Expression={$_."EAP-Friendly-Name"};Label="EAP-Friendly-Name"}, `
@{Expression={$_."Acct-Status-Type"};Label="Acct-Status-Type"}, `
@{Expression={$_."Acct-Delay-Time"};Label="Acct-Delay-Time"}, `
@{Expression={$_."Acct-Input-Octets"};Label="Acct-Input-Octets"}, `
@{Expression={$_."Acct-Output-Octets"};Label="Acct-Output-Octets"}, `
@{Expression={$_."Acct-Session-Id"};Label="Acct-Session-Id"}, `
@{Expression={$_."Acct-Authentic"};Label="Acct-Authentic"}, `
@{Expression={$_."Acct-Session-Time"};Label="Acct-Session-Time"}, `
@{Expression={$_."Acct-Input-Packets"};Label="Acct-Input-Packets"}, `
@{Expression={$_."Acct-Output-Packets"};Label="Acct-Output-Packets"}, `
@{Expression={$_."Acct-Terminate-Cause"};Label="Acct-Terminate-Cause"}, `
@{Expression={$_."Acct-Multi-Ssn-ID"};Label="Acct-Multi-Ssn-ID"}, `
@{Expression={$_."Acct-Link-Count"};Label="Acct-Link-Count"}, `
@{Expression={$_."Acct-Interim-Interval"};Label="Acct-Interim-Interval"}, `
@{Expression={$_."Tunnel-Type"};Label="Tunnel-Type"}, `
@{Expression={$_."Tunnel-Medium-Type"};Label="Tunnel-Medium-Type"}, `
@{Expression={$_."Tunnel-Client-Endpt"};Label="Tunnel-Client-Endpt"}, `
@{Expression={$_."Tunnel-Server-Endpt"};Label="Tunnel-Server-Endpt"}, `
@{Expression={$_."Acct-Tunnel-Conn"};Label="Acct-Tunnel-Conn"}, `
@{Expression={$_."Tunnel-Pvt-Group-ID"};Label="Tunnel-Pvt-Group-ID"}, `
@{Expression={$_."Tunnel-Assignment-ID"};Label="Tunnel-Assignment-ID"}, `
@{Expression={$_."Tunnel-Preference"};Label="Tunnel-Preference"}, `
@{Expression={$_."MS-Acct-Auth-Type"};Label="MS-Acct-Auth-Type"}, `
@{Expression={$_."MS-Acct-EAP-Type"};Label="MS-Acct-EAP-Type"}, `
@{Expression={$_."MS-RAS-Version"};Label="MS-RAS-Version"}, `
@{Expression={$_."MS-RAS-Vendor"};Label="MS-RAS-Vendor"}, `
@{Expression={$_."MS-CHAP-Error"};Label="MS-CHAP-Error"}, `
@{Expression={$_."MS-CHAP-Domain"};Label="MS-CHAP-Domain"}, `
@{Expression={$_."MS-MPPE-Encryption-Types"};Label="MS-MPPE-Encryption-Types"}, `
@{Expression={$_."MS-MPPE-Encryption-Policy"};Label="MS-MPPE-Encryption-Policy"}, `
@{Expression={$_."Proxy-Policy-Name"};Label="Proxy-Policy-Name"}, `
@{Expression={$_."Provider-Type"};Label="Provider-Type"}, `
@{Expression={$_."Provider-Name"};Label="Provider-Name"}, `
@{Expression={$_."Remote-Server-Address"};Label="Remote-Server-Address"}, `
@{Expression={$_."MS-RAS-Client-Name"};Label="MS-RAS-Client-Name"}, `
@{Expression={$_."MS-RAS-Client-Version"};Label="MS-RAS-Client-Version"}
return($IASDAtas | Select-Object $FormatIAS)
}
Function GetIASLog{
param($File="")
If($File -eq ""){
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = ((Get-Item ENV:SystemRoot).Value+"\System32\LogFiles")
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$File=$OpenFileDialog.filename
}
$IASLogs=Import-Csv -Delimiter "," -Path $File -Header ComputerName,ServiceName,Record-Date,Record-Time,Packet-Type,User-Name,Fully-Qualified-Distinguished-Name,Called-Station-ID,Calling-Station-ID,Callback-Number,Framed-IP-Address,NAS-Identifier,NAS-IP-Address,NAS-Port,Client-Vendor,Client-IP-Address,Client-Friendly-Name,Event-Timestamp,Port-Limit,NAS-Port-Type,Connect-Info,Framed-Protocol,Service-Type,Authentication-Type,Policy-Name,Reason-Code,Class,Session-Timeout,Idle-Timeout,Termination-Action,EAP-Friendly-Name,Acct-Status-Type,Acct-Delay-Time,Acct-Input-Octets,Acct-Output-Octets,Acct-Session-Id,Acct-Authentic,Acct-Session-Time,Acct-Input-Packets,Acct-Output-Packets,Acct-Terminate-Cause,Acct-Multi-Ssn-ID,Acct-Link-Count,Acct-Interim-Interval,Tunnel-Type,Tunnel-Medium-Type,Tunnel-Client-Endpt,Tunnel-Server-Endpt,Acct-Tunnel-Conn,Tunnel-Pvt-Group-ID,Tunnel-Assignment-ID,Tunnel-Preference,MS-Acct-Auth-Type,MS-Acct-EAP-Type,MS-RAS-Version,MS-RAS-Vendor,MS-CHAP-Error,MS-CHAP-Domain,MS-MPPE-Encryption-Types,MS-MPPE-Encryption-Policy,Proxy-Policy-Name,Provider-Type,Provider-Name,Remote-Server-Address,MS-RAS-Client-Name,MS-RAS-Client-Version
return (InterpretIAS -IASDAtas $IASLogs)
}
function Format-Color([hashtable] $Colors = @{}, [switch] $SimpleMatch) {
$lines = ($input | Out-String) -replace "`r", "" -split "`n"
foreach($line in $lines) {
$color = ''
foreach($pattern in $Colors.Keys){
if(!$SimpleMatch -and $line -match $pattern) { $color = $Colors[$pattern] }
elseif ($SimpleMatch -and $line -like $pattern) { $color = $Colors[$pattern] }
}
if($color) {
Write-Host -ForegroundColor $color $line
} else {
Write-Host $line
}
}
}
Function GetLastLog{
param($IASLogs,$LastSelect=10)
$IASLogs | select -Last $LastSelect | ft "Record-Time","Packet-Type","User-Name","Authentication-Type","Policy-Name","Reason-Code","Proxy-Policy-Name" -AutoSize | GetColoredLogs
}
Function GetColoredLogs{
$input | Format-Color @{'Access-Reject' = 'Red'; 'Access-Accept ' = 'Green'}
}
param($IASDAtas)
$FormatIAS = @{Expression={$_.ComputerName};Label="ComputerName"}, `
@{Expression={$_.ServiceName};Label="ServiceName"}, `
@{Expression={$_."Record-Date"};Label="Record-Date"}, `
@{Expression={$_."Record-Time"};Label="Record-Time"}, `
@{Expression={
switch ($_."Packet-Type")
{
1 {"Access-Request (1)"}
2 {"Access-Accept (2)"}
3 {"Access-Reject (3)"}
4 {"Accounting-Request (4)"}
5 {"Accounting-Response (5)"}
11 {"Access-Challenge (11)"}
12 {"Status-Server (experimental) (12)"}
13 {"Status-Client (experimental) (13)"}
"" { "" }
default {($_)+" (unrecognized type)"}
}
};Label="Packet-Type"}, `
@{Expression={$_."User-Name"};Label="User-Name"}, `
@{Expression={$_."Fully-Qualified-Distinguished-Name"};Label="Fully-Qualified-Distinguished-Name"}, `
@{Expression={$_."Called-Station-ID"};Label="Called-Station-ID"}, `
@{Expression={$_."Calling-Station-ID"};Label="Calling-Station-ID"}, `
@{Expression={$_."Callback-Number"};Label="Callback-Number"}, `
@{Expression={$_."Framed-IP-Address"};Label="Framed-IP-Address"}, `
@{Expression={$_."NAS-Identifier"};Label="NAS-Identifier"}, `
@{Expression={$_."NAS-IP-Address"};Label="NAS-IP-Address"}, `
@{Expression={$_."NAS-Port"};Label="NAS-Port"}, `
@{Expression={$_."Client-Vendor"};Label="Client-Vendor"}, `
@{Expression={$_."Client-IP-Address"};Label="Client-IP-Address"}, `
@{Expression={$_."Client-Friendly-Name"};Label="Client-Friendly-Name"}, `
@{Expression={$_."Event-Timestamp"};Label="Event-Timestamp"}, `
@{Expression={$_."Port-Limit"};Label="Port-Limit"}, `
@{Expression={$_."NAS-Port-Type"};Label="NAS-Port-Type"}, `
@{Expression={$_."Connect-Info"};Label="Connect-Info"}, `
@{Expression={$_."Framed-Protocol"};Label="Framed-Protocol"}, `
@{Expression={$_."Service-Type"};Label="Service-Type"}, `
@{Expression={
switch ($_."Authentication-Type")
{
1 {"PAP (1)"}
2 {"CHAP (2)"}
3 {"MS-CHAP (3)"}
4 {"MS-CHAP v2 (4)"}
5 {"EAP (5)"}
7 {"None (7)"}
8 {"Custom (8)" }
11 {"PEAP (11)" }
"" { "" }
default {($_)+" (unrecognized type)"}
}
};Label="Authentication-Type"}, `
@{Expression={$_."Policy-Name"};Label="Policy-Name"}, `
@{Expression={
switch ($_."Reason-Code")
{
0 {"IAS_SUCCESS (0)"}
1 {"IAS_INTERNAL_ERROR (1)"}
2 {"IAS_ACCESS_DENIED (2)"}
3 {"IAS_MALFORMED_REQUEST (3)"}
4 {"IAS_GLOBAL_CATALOG_UNAVAILABLE (4)"}
5 {"IAS_DOMAIN_UNAVAILABLE (5)"}
6 {"IAS_SERVER_UNAVAILABLE (6)"}
7 {"IAS_NO_SUCH_DOMAIN (7)"}
8 {"IAS_NO_SUCH_USER (8)"}
16 {"IAS_AUTH_FAILURE (16)"}
17 {"IAS_CHANGE_PASSWORD_FAILURE (17)"}
18 {"IAS_UNSUPPORTED_AUTH_TYPE (18)"}
32 {"IAS_LOCAL_USERS_ONLY (32)"}
33 {"IAS_PASSWORD_MUST_CHANGE (33)"}
34 {"IAS_ACCOUNT_DISABLED (34)"}
35 {"IAS_ACCOUNT_EXPIRED (35)"}
36 {"IAS_ACCOUNT_LOCKED_OUT (36)"}
37 {"IAS_INVALID_LOGON_HOURS (37)"}
38 {"IAS_ACCOUNT_RESTRICTION (38)"}
48 {"IAS_NO_POLICY_MATCH (48)"}
64 {"IAS_DIALIN_LOCKED_OUT (64)"}
65 {"IAS_DIALIN_DISABLED (65)"}
66 {"IAS_INVALID_AUTH_TYPE (66)"}
67 {"IAS_INVALID_CALLING_STATION (67)"}
68 {"IAS_INVALID_DIALIN_HOURS (68)"}
69 {"IAS_INVALID_CALLED_STATION (69)"}
70 {"IAS_INVALID_PORT_TYPE (70)"}
71 {"IAS_INVALID_RESTRICTION (71)"}
80 {"IAS_NO_RECORD (80)"}
96 {"IAS_SESSION_TIMEOUT (96)"}
97 {"IAS_UNEXPECTED_REQUEST (97)"}
"" { "" }
default {($_)+" (unrecognized reason)"}
}
};Label="Reason-Code"}, `
@{Expression={$_."Class"};Label="Class"}, `
@{Expression={$_."Session-Timeout"};Label="Session-Timeout"}, `
@{Expression={$_."Idle-Timeout"};Label="Idle-Timeout"}, `
@{Expression={$_."Termination-Action"};Label="Termination-Action"}, `
@{Expression={$_."EAP-Friendly-Name"};Label="EAP-Friendly-Name"}, `
@{Expression={$_."Acct-Status-Type"};Label="Acct-Status-Type"}, `
@{Expression={$_."Acct-Delay-Time"};Label="Acct-Delay-Time"}, `
@{Expression={$_."Acct-Input-Octets"};Label="Acct-Input-Octets"}, `
@{Expression={$_."Acct-Output-Octets"};Label="Acct-Output-Octets"}, `
@{Expression={$_."Acct-Session-Id"};Label="Acct-Session-Id"}, `
@{Expression={$_."Acct-Authentic"};Label="Acct-Authentic"}, `
@{Expression={$_."Acct-Session-Time"};Label="Acct-Session-Time"}, `
@{Expression={$_."Acct-Input-Packets"};Label="Acct-Input-Packets"}, `
@{Expression={$_."Acct-Output-Packets"};Label="Acct-Output-Packets"}, `
@{Expression={$_."Acct-Terminate-Cause"};Label="Acct-Terminate-Cause"}, `
@{Expression={$_."Acct-Multi-Ssn-ID"};Label="Acct-Multi-Ssn-ID"}, `
@{Expression={$_."Acct-Link-Count"};Label="Acct-Link-Count"}, `
@{Expression={$_."Acct-Interim-Interval"};Label="Acct-Interim-Interval"}, `
@{Expression={$_."Tunnel-Type"};Label="Tunnel-Type"}, `
@{Expression={$_."Tunnel-Medium-Type"};Label="Tunnel-Medium-Type"}, `
@{Expression={$_."Tunnel-Client-Endpt"};Label="Tunnel-Client-Endpt"}, `
@{Expression={$_."Tunnel-Server-Endpt"};Label="Tunnel-Server-Endpt"}, `
@{Expression={$_."Acct-Tunnel-Conn"};Label="Acct-Tunnel-Conn"}, `
@{Expression={$_."Tunnel-Pvt-Group-ID"};Label="Tunnel-Pvt-Group-ID"}, `
@{Expression={$_."Tunnel-Assignment-ID"};Label="Tunnel-Assignment-ID"}, `
@{Expression={$_."Tunnel-Preference"};Label="Tunnel-Preference"}, `
@{Expression={$_."MS-Acct-Auth-Type"};Label="MS-Acct-Auth-Type"}, `
@{Expression={$_."MS-Acct-EAP-Type"};Label="MS-Acct-EAP-Type"}, `
@{Expression={$_."MS-RAS-Version"};Label="MS-RAS-Version"}, `
@{Expression={$_."MS-RAS-Vendor"};Label="MS-RAS-Vendor"}, `
@{Expression={$_."MS-CHAP-Error"};Label="MS-CHAP-Error"}, `
@{Expression={$_."MS-CHAP-Domain"};Label="MS-CHAP-Domain"}, `
@{Expression={$_."MS-MPPE-Encryption-Types"};Label="MS-MPPE-Encryption-Types"}, `
@{Expression={$_."MS-MPPE-Encryption-Policy"};Label="MS-MPPE-Encryption-Policy"}, `
@{Expression={$_."Proxy-Policy-Name"};Label="Proxy-Policy-Name"}, `
@{Expression={$_."Provider-Type"};Label="Provider-Type"}, `
@{Expression={$_."Provider-Name"};Label="Provider-Name"}, `
@{Expression={$_."Remote-Server-Address"};Label="Remote-Server-Address"}, `
@{Expression={$_."MS-RAS-Client-Name"};Label="MS-RAS-Client-Name"}, `
@{Expression={$_."MS-RAS-Client-Version"};Label="MS-RAS-Client-Version"}
return($IASDAtas | Select-Object $FormatIAS)
}
Function GetIASLog{
param($File="")
If($File -eq ""){
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = ((Get-Item ENV:SystemRoot).Value+"\System32\LogFiles")
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$File=$OpenFileDialog.filename
}
$IASLogs=Import-Csv -Delimiter "," -Path $File -Header ComputerName,ServiceName,Record-Date,Record-Time,Packet-Type,User-Name,Fully-Qualified-Distinguished-Name,Called-Station-ID,Calling-Station-ID,Callback-Number,Framed-IP-Address,NAS-Identifier,NAS-IP-Address,NAS-Port,Client-Vendor,Client-IP-Address,Client-Friendly-Name,Event-Timestamp,Port-Limit,NAS-Port-Type,Connect-Info,Framed-Protocol,Service-Type,Authentication-Type,Policy-Name,Reason-Code,Class,Session-Timeout,Idle-Timeout,Termination-Action,EAP-Friendly-Name,Acct-Status-Type,Acct-Delay-Time,Acct-Input-Octets,Acct-Output-Octets,Acct-Session-Id,Acct-Authentic,Acct-Session-Time,Acct-Input-Packets,Acct-Output-Packets,Acct-Terminate-Cause,Acct-Multi-Ssn-ID,Acct-Link-Count,Acct-Interim-Interval,Tunnel-Type,Tunnel-Medium-Type,Tunnel-Client-Endpt,Tunnel-Server-Endpt,Acct-Tunnel-Conn,Tunnel-Pvt-Group-ID,Tunnel-Assignment-ID,Tunnel-Preference,MS-Acct-Auth-Type,MS-Acct-EAP-Type,MS-RAS-Version,MS-RAS-Vendor,MS-CHAP-Error,MS-CHAP-Domain,MS-MPPE-Encryption-Types,MS-MPPE-Encryption-Policy,Proxy-Policy-Name,Provider-Type,Provider-Name,Remote-Server-Address,MS-RAS-Client-Name,MS-RAS-Client-Version
return (InterpretIAS -IASDAtas $IASLogs)
}
function Format-Color([hashtable] $Colors = @{}, [switch] $SimpleMatch) {
$lines = ($input | Out-String) -replace "`r", "" -split "`n"
foreach($line in $lines) {
$color = ''
foreach($pattern in $Colors.Keys){
if(!$SimpleMatch -and $line -match $pattern) { $color = $Colors[$pattern] }
elseif ($SimpleMatch -and $line -like $pattern) { $color = $Colors[$pattern] }
}
if($color) {
Write-Host -ForegroundColor $color $line
} else {
Write-Host $line
}
}
}
Function GetLastLog{
param($IASLogs,$LastSelect=10)
$IASLogs | select -Last $LastSelect | ft "Record-Time","Packet-Type","User-Name","Authentication-Type","Policy-Name","Reason-Code","Proxy-Policy-Name" -AutoSize | GetColoredLogs
}
Function GetColoredLogs{
$input | Format-Color @{'Access-Reject' = 'Red'; 'Access-Accept ' = 'Green'}
}
Libellés :
IAS,
log viewer,
logs,
logs viewer,
NPS,
parser,
Radius
mercredi 21 août 2013
Installer VMware Tools sous pfsense / FreeBSD
Suite à une installation de pfsense dans un environnement VMware, j'ai un peu galérer pour installer les VMware tools.
Bien sûr, il est possible d'installer Open VM Tools, mais VMware les détectes comme non officiels...
Je suis donc tombé sur http://www.howtoforge.com/how-to-install-vmware-tools-on-pfsense-freebsd qui explique comment installer les tools. J'ai ajouté 2 ou 3 petites infos supplémentaires pour correspondre aux dernières version.
Alors, comment faire? Rien de plus simple, mais il faut bien respecter les étapes!
Bien sûr, il est possible d'installer Open VM Tools, mais VMware les détectes comme non officiels...
Je suis donc tombé sur http://www.howtoforge.com/how-to-install-vmware-tools-on-pfsense-freebsd qui explique comment installer les tools. J'ai ajouté 2 ou 3 petites infos supplémentaires pour correspondre aux dernières version.
Alors, comment faire? Rien de plus simple, mais il faut bien respecter les étapes!
mercredi 23 mai 2012
Exchange 2010 et la maintenance
Récemment, un de mes clients s'est interrogé sur le fait que lors du passage de la défragmentation en ligne sur sa base Exchange, aucun évènement n’était présent dans les journaux indiquant un gain d'espace.
Selon Microsoft, beaucoup de chose ont changées dans Exchange 2010 (cf. http://technet.microsoft.com/en-us/library/bb125040.aspx)
Je vous propose donc un petit résumé de ce qui se passe dans vos bases Exchange 2010 au travers de ce post.
Bonne lecture :)
samedi 14 avril 2012
Activer PSRemoting
Après pas mal de galères pour activer PSRemoting voici les étapes nécessaire pour le bon fonctionnement:
Mon but était qu'une machine non intégrée au domaine puisse exécuter des commande powershell a distance
Pour ce faire, il est nécessaire côté serveur de:
- Mettre en place un clef dans la base de registre (si seules les machines de votre domaine vont accéder à votre serveur, inutile - RQ: dans certains cas des erreurs d'accès refuser peuvent apparaître si vous ne mettez pas cette clef, ceci est du à l'UAC, et il faut alors utiliser le compte Administrator et non votre compte habituel d'administration (même si vous élever votre prompt))
- Créer un certificat pour le support SSL
- Activer PSRemoting
- Activer le support SSL
- Ouvrir le firewall
- Autoriser CREDSSP
Côté client, il sera nécessaire:
- Mettre en place un clef dans la base de registre (si seules les machines de votre domaine vont accéder à votre serveur, inutile)
- Activer la délégation serveur
Libellés :
credssp,
enable-psremoting,
enable-wsmancredssp,
enter-pssession,
PowerShell,
psremoting,
setspn,
ssl,
winrm,
wsman
vendredi 30 mars 2012
Tester l'alignement des partitions
Pour des questions de performances, il est impératif que vos partitions soient aligner correctement (http://support.microsoft.com/kb/929491/en).
Mais comment tester cet alignement?
Le script Powershell suivant vous donnera l'information:
$wmiDiskPartition = get-wmiobject -class "Win32_DiskPartition" -namespace "root\CIMV2"
$wmiLogicalDisk = get-wmiobject -class "Win32_LogicalDiskToPartition" -namespace "root\CIMV2"
$MaListe=@()
foreach ($partition in $wmiDiskPartition){
$MyResult=(($partition.StartingOffset) / 4096)
$d=New-Object PSObject
$d | Add-Member -Name Name -MemberType NoteProperty -Value ($partition.Name)
$Trouve=$False
foreach($part in $wmiLogicalDisk){
if( ((($part.antecedent).split("=")[1]).replace("""","")) -eq (($partition.Name).Replace("Disque n° ","Disk #").Replace("partition n° ","Partition #"))){
$Trouve=$True
$d | Add-Member -Name DriveLetter -MemberType NoteProperty -Value (($part.Dependent.split("=")[1]).replace("""",""))
}
}
if ($Trouve -eq $False){
$d | Add-Member -Name DriveLetter -MemberType NoteProperty -Value "N/A"
}
$d | Add-Member -Name BlockSize -MemberType NoteProperty -Value ($partition.BlockSize)
$d | Add-Member -Name NumberOfBlock -MemberType NoteProperty -Value ($partition.NumberOfBlocks)
$d | Add-Member -Name StartingOffset -MemberType NoteProperty -Value ($partition.StartingOffset)
$d | Add-Member -Name IsAligned -MemberType NoteProperty -Value ([int]$MyResult -eq $MyResult)
$MaListe+=$d
}
$MaListe | ft
Mais comment tester cet alignement?
Le script Powershell suivant vous donnera l'information:
$wmiDiskPartition = get-wmiobject -class "Win32_DiskPartition" -namespace "root\CIMV2"
$wmiLogicalDisk = get-wmiobject -class "Win32_LogicalDiskToPartition" -namespace "root\CIMV2"
$MaListe=@()
foreach ($partition in $wmiDiskPartition){
$MyResult=(($partition.StartingOffset) / 4096)
$d=New-Object PSObject
$d | Add-Member -Name Name -MemberType NoteProperty -Value ($partition.Name)
$Trouve=$False
foreach($part in $wmiLogicalDisk){
if( ((($part.antecedent).split("=")[1]).replace("""","")) -eq (($partition.Name).Replace("Disque n° ","Disk #").Replace("partition n° ","Partition #"))){
$Trouve=$True
$d | Add-Member -Name DriveLetter -MemberType NoteProperty -Value (($part.Dependent.split("=")[1]).replace("""",""))
}
}
if ($Trouve -eq $False){
$d | Add-Member -Name DriveLetter -MemberType NoteProperty -Value "N/A"
}
$d | Add-Member -Name BlockSize -MemberType NoteProperty -Value ($partition.BlockSize)
$d | Add-Member -Name NumberOfBlock -MemberType NoteProperty -Value ($partition.NumberOfBlocks)
$d | Add-Member -Name StartingOffset -MemberType NoteProperty -Value ($partition.StartingOffset)
$d | Add-Member -Name IsAligned -MemberType NoteProperty -Value ([int]$MyResult -eq $MyResult)
$MaListe+=$d
}
$MaListe | ft
mardi 6 mars 2012
Antispam d'exchange 2010
L’activation de l’AntiSPAM d’exchange 2010 se fait de manière très simple, mais avant, essayons de comprendre un peu comment il travaille :
9 types de filtrages existent :
- 1. Liste verte IP (IP Alow List)
- 2. Liste rouge IP (Ip Black List)
- 3. Fournisseur de liste verte IP (IP Allow List Provider)
- 4. Fournisseur de liste rouge IP (IP Block List Provider)
- 5. Filtrage d’expéditeur (Sender Filter)
- 6. Filtrage de destinataires (Recipient Filter)
- 7. ID de l’éxpéditeur (Sender ID Filter)
- 8. Filtrage de contenu (Content Filtering)
- 9. Réputation de l’expéditeur (Sender Reputation Filter –SRF)
Ces différents filtrages s’exécutent dans l’ordre énoncé ci-dessus
Mise en cache des dossiers courriers des autres utilisateurs dans outlook 2007
Peut-être avez-vous remarqué que si vous ajouter des comptes supplémentaires dans votre outlook le cache ne fonctionne pas. Microsoft propose une KB (MSKB955572) qui vous explique comment contourner ce problème
Accéder aux commandes du clique-droit en powershell
Avez-vous déjà voulu accéder en PowerShell aux commandes du clique-droit?
Rien de plus simple, il suffit d'utiliser Shell.Application!
$drive = 'h:'
$sa = New-Object -comObject Shell.Application
$sa.Namespace(17).parseName($drive)
La commande suivant renvoie la liste des fonctions disponibles:
$sa.Namespace(17).ParseName("$drive").Verbs()
Par exemple:
$sa.Namespace(17).ParseName("$drive").InvokeVerb("Eject")
$sa.Namespace(17).ParseName("$drive").InvokeVerb("Format")
Rien de plus simple, il suffit d'utiliser Shell.Application!
$drive = 'h:'
$sa = New-Object -comObject Shell.Application
$sa.Namespace(17).parseName($drive)
La commande suivant renvoie la liste des fonctions disponibles:
$sa.Namespace(17).ParseName("$drive").Verbs()
Par exemple:
$sa.Namespace(17).ParseName("$drive").InvokeVerb("Eject")
$sa.Namespace(17).ParseName("$drive").InvokeVerb("Format")
Forcer l’éjection d'un périphérique amovible
N'avez vous jamais été confronté à un périphérique USB qui ne veut pas s’éjecter?
Et bien voici la solution: devioctl
Ce programme en ligne de commande va forcer le démontage d'un volume, puis effectuer l’éjection.
Le programme est disponible ici: http://www.ltr-data.se/opencode.html
Et voici comment éjecter le lecteur E:
devioctl.exe forcedismount e:
devioctl.exe eject e:
Et bien voici la solution: devioctl
Ce programme en ligne de commande va forcer le démontage d'un volume, puis effectuer l’éjection.
Le programme est disponible ici: http://www.ltr-data.se/opencode.html
Et voici comment éjecter le lecteur E:
devioctl.exe forcedismount e:
devioctl.exe eject e:
Restauration de messages sous Exchange 2007
Dans cet exemple, nous allons restaurer des mails depuis une base de données Exchange 2007:
La machine sur laquelle les lignes de commandes ont été récupérées se nomme SBS-2008 et se compose d'Active Directory & Exchange 2007 SP3
La machine sur laquelle les lignes de commandes ont été récupérées se nomme SBS-2008 et se compose d'Active Directory & Exchange 2007 SP3
mardi 24 janvier 2012
Connaitre l'espace occupé par les mails
Si vous souhaitez savoir l'espace occupé dans les bases de données et sur les disques par vos différentes banques Exchange, vous pouvez utiliser le script suivant:
mardi 29 novembre 2011
Connaitre les quotas des boites mails
Si vous chercher a connaitre les quotas appliqués à vos utilisateurs sur exchange 2010, le script suivant pourra vous aidé.
dimanche 6 novembre 2011
Créer des variables en PowerShell sous forme de tableau
Récemment, j'ai eu besoin de créer des variables en PowerShell sur lesquelles je souhaitais faire des tris et avoir une présentation du même type que get-childitem ou autre.
En fait, ce que je souhaitais avoir, c’était quelque chose de ce genre:
Ceci s'apparente à une "Hash table", mais pour réaliser ceci des façon simple, les informations disponible sur le net sont difficile à trouver.
En fait, ce que je souhaitais avoir, c’était quelque chose de ce genre:
Ceci s'apparente à une "Hash table", mais pour réaliser ceci des façon simple, les informations disponible sur le net sont difficile à trouver.
Libellés :
hash table,
new-object,
PowerShell array,
psobject,
tableau
samedi 5 novembre 2011
De la couleur dans PowerShell!
Si vous aussi vous souhaitez mettre de la couleur dans vos scripts, vous pouvez utiliser les options -ForegroundColor et -BackgroundColor de la fonction Write-Host.
Mais quels sont les couleurs disponibles?
Mais quels sont les couleurs disponibles?
Libellés :
color prompt,
color text,
display,
PowerShell
Supprimer les boites déconnectées dans exchange
Peut-être avez vous déjà essayé de supprimer une boite mail dans exchange.
Elle apparaît alors dans les boites aux lettres déconnectées.
Pour supprimer définitivement les boîtes, vous pouvez utiliser ce script PowerShell:
foreach ($database in (Get-MailboxDatabase)){
$myBal=Get-MailboxStatistics -Database $database.Name | Where {$_.DisconnectDate -ne $null}
if($myBal.Database -ne $null){
Remove-StoreMailbox -Database ($myBal.Database) -Identity ($myBal.DisplayName) -MailboxState ($myBal.DisconnectReason)
}
}
Elle apparaît alors dans les boites aux lettres déconnectées.
Pour supprimer définitivement les boîtes, vous pouvez utiliser ce script PowerShell:
foreach ($database in (Get-MailboxDatabase)){
$myBal=Get-MailboxStatistics -Database $database.Name | Where {$_.DisconnectDate -ne $null}
if($myBal.Database -ne $null){
Remove-StoreMailbox -Database ($myBal.Database) -Identity ($myBal.DisplayName) -MailboxState ($myBal.DisconnectReason)
}
}
jeudi 28 avril 2011
Installer Open Manage sur ESXi
Et voici une fonction Power Shell bien pratique pour installer Open Manage sur un ESXi.
J'ai récupéré la fonction de base sur différents site, puis je l'ai un petit peu modifié :)
Après avoir copié cette fonction dans votre invite, il suffit de lancer la commande suivante pour déployer Open Manage:
installDellOpenManage 'E:\Sources' 'OM-SrvAdmin-Dell-Web-6.5.0-2247.VIB-ESX41i_A01' 'MyCom' 'frves-centreon01' 'frbrs-vc01' 'frbrh-esx73' 'root' 'MyPasswOrd!'
J'ai récupéré la fonction de base sur différents site, puis je l'ai un petit peu modifié :)
Après avoir copié cette fonction dans votre invite, il suffit de lancer la commande suivante pour déployer Open Manage:
installDellOpenManage 'E:\Sources' 'OM-SrvAdmin-Dell-Web-6.5.0-2247.VIB-ESX41i_A01' 'MyCom' 'frves-centreon01' 'frbrs-vc01' 'frbrh-esx73' 'root' 'MyPasswOrd!'
vendredi 22 avril 2011
Multipathing vSphere
Si vous souhaitez mettre en place un réseau de stockage sur une infrastructure vSphere, vous voudrez probablement mettre en place des MTU a 9000.
Or pour réaliser une telle opération, vous devez passer par la ligne de commande VMware.
Voici une fonction PowerCLI qui vous permettra de créer vos Virtual Machine Port Group & VMKernel pour un réseau de stockage (type iSCSI ou NFS).
Coller simplement cette fonction dans votre shell PowerCLI, puis exécutez là, par exemple via:
configureMultipathing 'MonVCenter.dom.local' 'ESX1.dom.local' 'vSwitch-STO' 'STOCKAGE' 'NFS01' 'NFS02' 'vmnic0' 'vmnic4' '192.168.20.2' '192.168.20.12' '255.255.255.0'
Or pour réaliser une telle opération, vous devez passer par la ligne de commande VMware.
Voici une fonction PowerCLI qui vous permettra de créer vos Virtual Machine Port Group & VMKernel pour un réseau de stockage (type iSCSI ou NFS).
Coller simplement cette fonction dans votre shell PowerCLI, puis exécutez là, par exemple via:
configureMultipathing 'MonVCenter.dom.local' 'ESX1.dom.local' 'vSwitch-STO' 'STOCKAGE' 'NFS01' 'NFS02' 'vmnic0' 'vmnic4' '192.168.20.2' '192.168.20.12' '255.255.255.0'
Inscription à :
Articles (Atom)