Ceci est un Powershell/AD/question d'échange ....Exportation d'informations à partir du script PS à csv
Je suis en cours d'exécution d'un script contre un certain nombre d'utilisateurs de vérifier certains de leurs attributs mais je vais avoir du mal obtenir ceci à la sortie au CSV. Le script fonctionne bien et fait exactement ce dont j'ai besoin, la sortie à l'écran est bonne, j'ai juste du mal à l'exporter directement dans csv.
L'entrée est un fichier txt séparé par des virgules de noms d'utilisateurs (par exemple, « username1, username2, USERNAME3 »)
Je l'ai expérimenté avec la création d'objets ps personnalisés, ajoutant et exporter ensuite ceux mais sa ne fonctionne pas. ...
Toutes les suggestions reçues avec gratitude ..
Merci
George
$array = Get-Content $InputPath
#split the comma delimited string into an array
$arrayb = $array.Split(",");
foreach ($User in $arrayb)
{
#find group memebership
Write-Host "AD group membership for $User"
Get-QADMemberOf $User
#Get Mailbox Info
Write-Host "Mailbox info for $User"
Get-Mailbox $User | select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
#get profile details
Write-Host "Home drive info for $User"
Get-QADUser $User| select HomeDirectory,HomeDrive
#add space between users
Write-Host ""
Write-Host "******************************************************"
}
Write-Host "End Script"
ÉDITÉ .... Méthodes J'ai essayé de exproting (ne montrant que la boucle for/code d'exportation) Method1
$AllData = @()
foreach ($User in $arrayb)
{
#set title for this user
#Write-host "Details for $User"
#find out their group memebership
Write-Host "AD group membership for $User"
$AdMemberOf = Get-QADMemberOf $User
Write-Host "ad completed"
Write-Host ""
Write-Host ""
#Get Mailbox Info
Write-Host "Mailbox info for $User"
$ExInfo = Get-Mailbox $User | select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
Write-Host "ex completed"
Write-Host ""
Write-Host ""
#get profile details
Write-Host "Home drive info for $User"
$HomeInfo = Get-QADUser $User| select HomeDirectory,HomeDrive
Write-Host "home drive completed"
#add space between users
Write-Host ""
Write-Host "******************************************************"
$ReturnedObj = New-Object PSObject
$ReturnedObj | Add-Member NoteProperty -Name "AD Group Membership for $User" -Value $AdMemberOf
$ReturnedObj | Add-Member NoteProperty -Name "Exchange details for $User" -Value $ExInfo
$ReturnedObj | Add-Member NoteProperty -Name "Home drive info for $User" -Value $HomeInfo
Write-Host $ReturnedObj
$AllData += $ReturnedObj
}
Write-Host "starting csv export"
Write-Output $AllData |export-csv -Path $OutputPath -notype -force
Write-Host "End Script"
Method2
$ExportInfo = @()
foreach ($User in $arrayb)
{
$UserInfo = New-Object System.Object
#set title for this user
$ExportInfo += "Details for $User"
#Get Mailbox Info
$ExportInfo += Get-Mailbox $User
#find out their group memebership
$ExportInfo += Get-QADMemberOf $User
#get profile details
$ExportInfo += Get-QADUser $User| select HomeDirectory,HomeDrive
#add space between users
$ExportInfo += ""
$ExportInfo += ""
}
$ExportInfo | Export-Csv -Path $OutputPath ;
ÉDITÉ:
Merci à suggestion de Stej J'ai maintenant le code ci-dessous ... Ne fonctionne toujours pas correctement. J'ai ajouté une vérification pour confirmer que l'utilisateur existe également dans AD. Le premier problème est d'obtenir l'adhésion d'un groupe AD d'utilisateur - si je mets un point d'arrêt et regarde la valeur d'une adhésion spécifique d'AD d'utilisateur, la valeur dans varialbe est erreur "Impossible de traiter l'argument parce que la valeur de l'argument" obj "est Remplacez la valeur de l'argument "obj" par une valeur non nulle. " Je n'ai aucune idée de ce qui en est la cause, alors je l'ai ignoré pour l'instant et j'ai commenté ces lignes pour que l'AD puisse se concentrer sur le travail. Avec les lignes commentées, le script fonctionne bien et encore, avec un point d'arrêt en bas, je peux regarder la valeur de $ ExportInfo et ils ont tous l'air bien, c'est à dire qu'ils ont tous été enregistrés dans la variable correctement. Cependant, il ne sera pas sorti. Comme vous pouvez le voir, j'ai mis une commande pour que $ ExportInfo soit écrit à l'écran mais cela ne montre rien. Quand il tente d'exécuter la ligne Export (c.-à-d. "Export-Csv $ ExportInfo -Path $ OutputPath"), il commet des erreurs avec: "Impossible de convertir 'System.Object []' vers le type 'System.Char' requis par le paramètre 'Delimiter . » la méthode spécifiée est pas pris en charge a: ligne: 80 ombles:. 10 + Export-Csv < < < < $ ExportInfo -Path $ OutputPath "
Je chnaged la ligne" $ ExportInfo | Export-Csv - Path $ OutputPath "et il exporte maintenant vers CSV ... Aucune idée pourquoi ??? Deux problèmes cependant ... comme indiqué ci-dessus, les groupes AD ne fonctionnent pas et le champ Email Addresses (qui devrait retourner quelque chose comme {SMTP: [email protected], smtp: [email protected], smtp: [email protected] et SIP: [email protected]}) apparaît juste dans le fichier CSV sous la forme "Microsoft.Exchange.Data.ProxyAddressCollection". Encore une fois, la vérification de $ ExportInfo, les adresses sont là ....
Merci
$ExportInfo = @()
foreach ($User in $arrayb)
{
$CheckUser = Get-QADUser -Name $User
if (!$CheckUser)
{
$CountUser++
Write-Warning "############################################"
Write-Warning "$user not found in AD"
Write-Warning "############################################"
}
else
{
$CountUser++
$UserInfo = New-Object System.Object
#find out their group memebership
Write-Host "AD group membership for $User"
#$Temp = Get-QADMemberOf $User
#$UserInfo | Add-Member NoteProperty -Name "AD Group Membership" -Value $Temp.Name
#set title for this user
#Write-host "Details for $User"
#Get Mailbox Info
Write-Host "Mailbox info for $User"
$Temp = Get-Mailbox $User #| select ServerName, Database, EmailAddresses, PrimarySmtpAddress, WindowsEmailAddress
$UserInfo | Add-Member NoteProperty -Name "ServerName" -Value $Temp.ServerName
$UserInfo | Add-Member NoteProperty -Name "Database" -Value $Temp.Database
$UserInfo | Add-Member NoteProperty -Name "Email Addresses" -Value $Temp.EmailAddresses
$UserInfo | Add-Member NoteProperty -Name "Primary SMTP" -Value $Temp.PrimarySmtpAddress
$UserInfo | Add-Member NoteProperty -Name "Windows Email Address" -Value $Temp.WindowsEmailAddress
#$ReturnedObj | Add-Member NoteProperty -Name
#get profile details
Write-Host "Home drive info for $User"
$Temp = Get-QADUser $User #| select HomeDirectory,HomeDrive
$UserInfo | Add-Member NoteProperty -Name "Home Directory Location" -Value $Temp.HomeDirectory
$UserInfo | Add-Member NoteProperty -Name "Home Drive Mapped To" -Value $Temp.HomeDrive
#add space between users
Write-Host ""
Write-Host "******************************************************"
$ExportInfo += $UserInfo
}#end else
}
Write-Host "blah"
Write-Host $ExportInfo
Export-Csv $ExportInfo -Path - $OutputPath
Write-Host "Number of Users processed: $CountUser"
Qu'est-ce que cela signifie * ne ne fonctionne pas * et * obtenir ennuis *? Y a-t-il un message d'erreur? Le fichier est-il vide? Pouvez-vous partager le code que vous utilisez pour l'exportation csv? – stej