Question Ajout de retour chariot dans une cellule CSV

Plus d'informations
il y a 12 ans 6 mois #15734 par Amir
Bonsoir à tous,

Je cherche à effectuer un formatage propre en sortie dans un CSV avec pour deux champs particuliers la possibilité que des retour chariot soit inséré en sortie (insertion dans le script).

Je suis tombé sur un article de microsoft technet.microsoft.com/fr-fr/library/ms155919(v=sql.100).aspx

Mais ce qu'il indiquent pour le retour chariot ne fonctionne pas.

J'ai pris du code sur le web que j'ai adapté mais la je tombe sur un pépin pour le formatage des champs Droits_NTFS & Droits_Partage. Les deux lignes en gras ci-dessous ce sont les elements du tableau pour lesquels je cherche à faire un retour chariot.


Function Get-AllShares{
$a = Get-WmiObject win32_share -computername $server -Filter \"type=0\"
Return $a
} # End Get-AllShares Function

Function Get-SharePermissions($machine,$ShareName){

$Share = Get-WmiObject win32_LogicalShareSecuritySetting -computername \"$machine\" -Filter \"name='$ShareName'\"
$SHare
if($Share){
$obj = @()
$ACLS = $Share.GetSecurityDescriptor().Descriptor.DACL
foreach($ACL in $ACLS){
$User = $ACL.Trustee.Name
if(!($user)){$user = $ACL.Trustee.SID}
$Domain = $ACL.Trustee.Domain
switch($ACL.AccessMask)
{
2032127 {$Perm = \"Full Control\"}
1245631 {$Perm = \"Change\"}
1179817 {$Perm = \"Read\"}
}
$obj = $obj + \"$Domain\$user $Perm\"
}
}
if(!($Share)){$obj = \" ERROR: cannot enumerate share permissions. \"}
Return $obj
} # End Get-SharePermissions Function

Function Get-NTFSPerms($machine,$NTFSPath){

$Directory = Get-WmiObject win32_LogicalFileSecuritySetting -computername \"$machine\" -Filter \"path='$NTFSPath'\"
$directory
if ($directory) {
$obj = @()
$ACLS = $Directory.GetSecurityDescriptor().Descriptor.DACL
foreach($ACL in $ACLS){
$User = $ACL.Trustee.Name
if(!($user)){$user = $ACL.Trustee.SID}
$Domain = $ACL.Trustee.Domain
switch($ACL.AccessMask)
{
2032127 {$NTPerm= “FullControl”}
1179785 {$NTPerm = “Read”}
1180063 {$NTPerm = “Read, Write”}
1179817 {$NTPerm = “ReadAndExecute”}
-1610612736 {$NTPerm = “ReadAndExecuteExtended”}
1245631 {$NTPerm = “ReadAndExecute, Modify, Write”}
1180095 {$NTPerm = “ReadAndExecute, Write”}
268435456 {$NTPerm = “FullControl (Sub Only)”}
default {$NTPerm = $ACL.AccessMask}

}
$obj = $obj + \"$Domain\$user $NTPerm \"
}
}
Return $obj
if(!($SDirectory)){$obj = \" ERROR: cannot enumerate NTFS permissions. \"}
} # End Get-NTFSPerms Function


function Change_Path ($chemin) {
$path=$chemin
$retour=$path.replace(\"\\",\"\\\")
return $retour
} # End-ConvertingPath for NTFSPermissions


$test=$args
[array]$i= get-content $test

Foreach ($server in $i) {

$Share= Get-AllShares
[array]$MainShares = $MainsShares + $share
[array]$TEST = $TEST + $MainShares

}

#$TEST| select-object __SERVER, name,path,description | ft
Foreach($MainShare in $TEST){

$MainShareName = $MainShare.Name
$MainServer = $MainShare.__SERVER
$MainDescription = $MainShare.Description
$MainLocation = $MainShare.Path
$Pathtochange = Change_Path $MainLocation

$MainNTFSPermissions = Get-NTFSPerms $MainServer $PathToChange
$NTFSPerm= $MainNTFSPermissions[1..($MainNTFSPermissions.length-1)]

$MainSharePermissions = Get-SharePermissions -machine $MainServer -ShareName $MainShareName
$SharePerm = $MainSharePermissions[1..($MainSharePermissions.length-1)]

$resultTemp = New-Object PSObject
$resultTemp | Add-Member NoteProperty -name Machine -value $MainServer
$resultTemp | Add-Member NoteProperty -name Partage -value $MainShareName
$resultTemp | Add-Member NoteProperty -name Chemin -value $MainLocation
$resultTemp | Add-Member NoteProperty -name Description -value $MainDescription
$resultTemp | Add-Member NoteProperty -name Droits_Partage -value \"$SharePerm\"
$resultTemp | Add-Member NoteProperty -name Droits_NTFS -value \"$NTFSPerm\"
[PSObject[]]$export += [PSObject]$resultTemp

$export | select Machine, Partage, Chemin, Description, Droits_Partage, Droits_NTFS | Export-Csv -delimiter \";\" -notypeinformation -path extract.csv
}

D'avance merci pour votre aide.

La pièce jointe code.ps1 est absente ou indisponible

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 6 mois #15761 par Amir
Bon aucun avis sur le sujet.

J'ai trouvé une solution de contournement :

Je fais un export html : ça me permet de rajouter des saut de lignes sur les résultats retournées par les fonctions ( <br>)

une fois l'html généré je fais un clic-droit, exporter vers Excel.

Mais quand même si une personne connaît une astuce pour inserer des sauts de ligne dans un CSV je suis preneur :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 6 mois #15765 par Laurent Dardenne
Salut,
Bedian écrit:

Mais quand même si une personne connaît une astuce pour inserer des sauts de ligne dans un CSV je suis preneur :)

La lecture des spécifications du format peut aider :
tools.ietf.org/html/rfc4180

Exemple :
[code:1]
\"Name\",\"Length\",\"test\"
\"1-Resultat.txt\",\"36\",\"truc
suite\"
\"1.txt\",\"100\",
[/code:1]
Je te laisse coder autour et vérifier le contenu da la propriété 'test' du premier objet.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 6 mois #15769 par Amir
Euh....Je ne comprend pas pour le bout de code que tu as mis.

Pour le site de l'IETEF j'étais allé voir également et j'avais tout essayé dans les retours de mes fonctions

$obj = $obj + \"$Domain\$user | $AceType | $NTPerm '%x0D' '%x0A'\"

J'ai essayé plusieurs variantes bien évidemment....A moins qu'il faille utiliser la classe math pour convertir en hexa ou décimale...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 6 mois #15770 par Matthew BETTON
Bonjour,

Une solution évoquée ici .

Notamment le `n (back tick N) qu'il faut utiliser pour le retour a la ligne. A utiliser donc au niveau de la valeur du paramètre concerné, comme l'expliquait Laurent.

Je te laisse coder autour et vérifier le contenu da la propriété 'test' du premier objet.


@ +

Matthew BETTON

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 6 mois #15775 par Laurent Dardenne
Bedian écrit:

Euh....Je ne comprend pas pour le bout de code que tu as mis.


C'est des données, le code :
[code:1]
$File=\"c:\temp\Test.csv\"
@'
\"Name\",\"Length\",\"test\"
\"1-Resultat.txt\",\"36\",\"truc
suite\"
\"1.txt\",\"100\",
'@ > $File

$O=Import-csv $File
$O[0].Test.GetType()
$O[0].Test
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.056 secondes
Propulsé par Kunena