Archives de l’auteur : Micky Balladelli

ElasticSearch: Création d’un Index avec PowerShell

La suite de produits ElasticSearch et Beats permettent de créer des index très facilement sans avoir à se soucier du format. Tout est fait pour nous.

Il est bien sûr possible de créer son propre index avec des données propres et je propose dans cet article de voir comment avec PowerShell.

Imaginons que nous voulons stocker dans ElasticSearch des informations relatives à un folder. Par exemple, le chemin complet du répertoire, ainsi que le groupe qui y à accès, de quel domaine, avec quel droit, et pourquoi pas le type de groupe.

Dans notre cas, les données à créer au format json ont le format suivant:

A noter l’attribut @timestamp, il sera utilisé lors des recherches dans ElasticSearch, c’est ici la date et l’heure à laquelle la donnée est insérée dans ElasticSearch.

Il faut qu’il soit au format utilisé par ElasticSearch et on peut le créer ainsi:

Les autres données proviennent d’autres scripts qui ont pour but d’aller chercher ces information en utilisant Get-Acl, Get-ChildItem, ou toute autre méthode.

Nous allons créer le hashtable qui nous servira à générer la donnée au format JSON ainsi:

Une fois $body créé on pourra le transformer en JSON ainsi:

Dernière conversion, il faut absolument que le JSON soit au format UTF8 sinon nous allons avoir des problèmes avec les accents et autres caractères complexes.

 

Une donnée dans ElasticSearch est toujours insérée en mentionnant trois propriétés:

  • Le nom de l’index, par exemple Shares-2016.10.30, ce qui veut dire Shares est la collection des index du même type, suivi de la date de création de l’index.
  • Le Type d’objet à insérer, dans notre cas par exemple Share
  • un identifiant unique optionnel, il vaut mieux d’ailleurs ne pas le mentionner, ainsi ElasticSearch va le créer pour nous.

La ressource URL que nous pouvons créer est alors:

L’adresse à utiliser pour envoyer nos données devient donc:

$server est le serveur où ElasticSearch est installé et $port est par défaut 9200, port de ElasticSearch.

Si nous utilisons des credentials avec ElasticSearch (avec Shield par exemple), nous devons créer un header:

Nous pouvons maintenant utiliser Invoke-RestMethod et envoyer nos données:

 

Nous pouvons faire du tout une cmdlet, la voici:

Bonne indexation!

ElasticSearch 5.0 Mise à jour

ElasticSearch 5.0 est désormais disponible et dans cet article je revisite le dernier article sur installation de ELK pour la consolidation  d’événements.

Pour la mise à jour, j’en ai profité pour mettre Java à jour avec la version 64 bits. J’ai ensuite modifié le script d’installation pour que Java s’installe tout seul, et que la variable d’environnement JAVA_HOME soit créée de façon automatique.

Avant d’exécuter le script suivant, j’ai copié les dernières versions de ELK depuis http://elastic.co.

J’ai également supprimé les services des anciennes versions avec NSSM:

Ceci pour ElasticSearch, Kibana, Filebeat, WinLogBeat et Logstash, car ils étaient tous installés.

Voici le nouveau script d’installation en PowerShell:

 

Le script ajoute le paramètre -Xss1m à C:\ELK-stack\elasticsearch\config\jvm.options. Ce paramètre définit le thread stack size pour la JVM et sans ça nous avons une erreur lors de l’installation.

Attention à bien éditer le fichier winlogbeat.yml et ajouter:

Et voici le résultat:

kibana5-0

Une fois la vérification effectuée qu’on reçoit bien les événements, nous pouvons importer les dashboards pré créés par ElasticSearch en exécutant import_dashboards.exe qui se trouve dans le dossier scripts de winlogbeat.

Et nous avons ceci:

winlogbeatdashboard

C’est quand même super cool.

ElasticSearch, Logstash, Winlogbeat et Kibana et la consolidation d’événements Windows

Dans cet article je vais parler de la consolidation d’événements de sécurité avec Windows 2012R2 et la stack ELK.

Je me suis appuyé sur deux excellents articles pour y arriver.

Le premier explique comment à partir de PowerShell, on peut installer et configurer ELK par Rob Willis et on le trouve ici.

Le deuxième est un article sur le forwarding d’events Windows, et explique bien ce qu’il faut faire pour que les événements soient transférés vers une machine collecteur. On le trouve ici.

EVENT FORWARDING

Pour la consolidation d’événements nous avons besoin d’un serveur collecteur qui servira pour consolider les événements d’un ou plusieurs domaine controleurs Active Directory.

Il y a plusieurs façons de consolider les events Windows mais le forwarding est la méthode la plus simple à mettre en place et la plus optimisée car c’est une fonctionnalité native de l’Event Viewer. De plus il’ y a pas besoin de donner des droits à un compte utilisateur car on peut habiliter la machine collecteur directement.

SUR LE DOMAINE CONTROLEUR

Il n’ y a vraiment que deux opérations à faire sur un DC. La prèmière consiste à ajouter le compte machine du serveur collector dans le groupe builtin appelé Event Log Readers.

On démarre notre DSA.MSC favori.

dsa

Et on y ajoute le compte machine du serveur collector, dans mon cas, SRV1$.

eventlogreaders

La deuxième opération est un peu plus délicate. Il s’agit de modifier les droits d’accès du log Security.

Il faut pour cette opération une commande CMD en mode Administrator (click droit sur CMD, ou PowerShell puis Run as Administrator)

Puis on regarde les droits d’accès (channelAccess) du log security, voici la commande:

Ce qui devrait avoir comme output:

On voit que par défaut le SID S-1-5-32-573 (Builtin\Event) a les droits d’accès.

Comme le processus de récupération des events utilise le compte Network Service (SID S-1-5-20), nous allons l’ajouter à la liste.

Ainsi:

Pour finalement avoir:

Voilà c’est tout. On reviendra sur le DC plus tard pour vérifier l’Event Log et nous assurer que les événements sont bien envoyés au collecteur.

SUR LE SERVEUR DE COLLECTION

On démarre l’Event Viewer et on fait un click droit sur Subscriptions, puis Create Subscription.

newsubscription

Dans la fenêtre Subscription Properties (qui vient d’apparaître), on va nommer notre subscription, par exemple Event Subscription.

eventsubname

Ensuite on click sur Computers et on y ajoute un domaine contrôleur, dans mon exemple DC1.AD.LOCAL

computers

On clic sur Test pour vérifier la connectivité.

test

On crée un filtre pour ne sélectionner que les événements Sécurité:

 

queryfilter

Et voilà nous avons notre souscription. Et nous allons la tester en faisant un clic-droit dessus, suivi de Runtime Status:

runtimestatus

On devrait avoir ceci:

runtimestatus2

Si jamais ce n’est pas le cas. Il se peut qu’une étape soit à revoir:

Coté DC il faut vérifier que l’event 100 est bien créé dans le Log Applications and Service Logs\Microsoft\Windows\Eventlog-ForwardingPlugin/Operational.

Si vous voyez un event 102 en Erreur, c’est pas bon. Il faudra alors revoir les étapes ci-dessus.

Finalement, au bout de quelques minutes vous devriez voir arriver pal mal d’events dans le journal Forwarded Events:

 

 

fwevents

Et on voit bien qu’ils viennent de notre DC (DC1.ad.local).

INSTALLATION D’ELK+WINLOGBEAT

L’article de Rob Willis est vraiment bien fait, de plus il a ajouté une video youtube pour les explications (voir lien plus haut).

Ceci étant dit, je vais quand même revenir dessus, car certaines choses ont évolué et il a fallu faire de petites adaptations.

Tout d’abord il faut récupérer plusieurs sources dont, ELK, NSSM, Java et WinlogBeat:

Sur https://www.elastic.co/downloads récupérer ElasticSearch, Logstash, Kibana et la Beta 5.0 de Winlogbeat.

Sur https://www.java.com/   récupérer Java.

Sur https://nssm.cc récupérer NSSM.

Le script de Rob Willis se trouve ici.

Se créer un répertoire C:\ElK-Stack et pour chaque produit créer un sous-répertoire et y extraire chaque zip.

S’assurer que la variable d’environnement JAVA_HOME est créée et qui pointe vers le répertoire où Java est installé, par exemple C:\Program Files (x86)\Java\jre1.8.0_101.

Attention de redémarrer ISE si vous venez de créer la variable JAVA_HOME pour qu’elle soit prise en compte.

Modifier le script de Rob Willis à la ligne

Remplacer les lignes 91 et 119

par

Il s’agit des dépendances des services Kibana et Logbeat au service Elasticsearch lors de l’étape de création des services avec NSSM. Cette partie sera à adapter en fonction de la version de ElasticSearch.

S’assurer que les services elasticsearch, kibana, logstash et winlogbear, soient tous bien démarrés.

Modifier le fichier c:\elk-stash\winlogbeat\winlogbeat.yml

et remplacer

qui sont les journaux locaux, par

Exécuter en mode step by step le script de Rob Willis.

Il est suffisamment bien documenté pour comprendre comment mettre en place chaque service.

Et finalement pour vérifier le tout on se connecte à Kibana via l’adresse http://localhost:5601

kibana

Et là on voit bien que ça fonctionne.

On peut chercher avec la barre de recherche des events venant d’un computer_name en particulier, par exemple computer_name:DC1.ad.local qui est notre DC.

kibana2

Et on voit bien les events de notre DC.

Maintenant il faut creuser un peu plus l’aspect recherche des events avec PowerShell.

Voici quelques exemples avec Invoke-RestMethod

Résultat:

 

ou encore

 

On a le nombre d’éléments trouvés.

 

Et pour récupérer tous les éléments dans l’index:

 

Tous les éléments dont le computer_name est DC1.ad.local

 

Un grand classique comme petit dernier, la liste des locked accounts sur DC1.

 

A suivre…

 

French PowerShell User Group

Depuis que Microsoft a lancé PowerShell en OpenSource et disponible depuis Linux, MacOS, et Windows, on voit bien que la communauté PowerShell est sur une ascendante.

On pense depuis longtemps à réunir tout le monde autour de PowerShell.  Fabien Dibot en premier, puis François-Xavier Cat, tous deux MVPs. Ce dernier s’est lancé:

Un PowerShell user group francophone ici: http://www.meetup.com/FrenchPSUG/

Les MVPs France, Quebec, Belgique, Suisse se réunissent et vous invitent à vous inscrire. Ce sera chaud:

Au début ce sera des rendez-vous sur Google Hangout, enregistrés sur Youtube. On aura aussi des RDV plus classiques.

J’espère vous voir nombreux.

Path: Dépasser les 260 caractères

Voici un moyen pour gérer les fichiers dont le path dépasse les 260 caractères en utilisant AlphaFS de Alphaleonis (OpenSource sur Github)

Ceci peut générer une exception car la plupart des API et autres cmdlets sont limités à 260 caractères:

Et ceci fonctionnera jusqu’à 32.000 caractères !

Et ceci fonctionnera aussi pour modifier le owner, par exemple:

L’objet $Acl est le même que celui donné par Get-Acl ou (Get-Item $file).GetAccessControl()

Extraire le nom du serveur avec regex

Voici comment extraire le nom du serveur d’un path complet donné:

Nous pouvons avoir un path ainsi:

Au lieu de partir sur des splits couteux, nous pouvons faire le regex suivant:

Explication du regex:

  • Littéralement \ deux fois
  • ( ) groupe de capture
  • .+ n’importe quel caractère 1 ou plusieurs fois
  • +? le moins de fois possible, pour ne récupérer que la première instance du résultat (le nom du serveur)
  • Littéralement \

Résultat :

 

Ajouter des bordures à des cellules Excel

Dans cet article nous allons voir comment ajouter des bordures à des cellules Excel.

Définissons l’assembly Excel, si elle n’est pas déjà définie:

Ensuite nous créons un objet Excel et ouvrons un fichier:

Finalement nous sélectionnons un workbook, dans l’exemple je prends celui qui est actif (d’habitude il s’appelle Feuil1):

Et je sélectionne une rangée de cellules avec lesquelles nous allons travailler sur les bordures.

Nous pouvons maintenant ajouter ou modifier des bordures. Celles-ci sont définies par l’enum

dont la liste disponible est visible ici.

J’applique le style de bordure, dans l’exemple j’utilise la ligne continue:

Nous pouvons changer la couleur de la bordure avec les index de couleurs qui sont disponibles ici

Finalement nous pouvons définir l’épaisseur des bordures avec le poids (weight):

 

Opérations booléennes avec les Expressions Régulières

Mon collègue Martial Bornet vient de publier un excellent livre sur les Expressions Régulières (Regex). C’est important de connaître les Regex. Powershell et .NET permettent de les utiliser comme nous allons le voir dans cet article, donc je vous conseille son livre car, car bien connaître les expressions régulières permet souvent de se sortir de situations compliquées et rendre nos chers scripts Powershell bien plus simples.

Les Regex permettent de chercher, comparer et manipuler des strings, et pour illustrer tout ça, nous allons voir comment faire des opérations booléennes avec des expressions régulières.

Petit rappel:

Une opération booléenne est une opération de logique qui utilise les opérateurs Et (-And), Ou (-Or) et not (!) pour vérifier la véracité d’une expression.

Par exemple:

  • L’expression « A et B » est vraie si A est vrai et B est vrai
  • « A ou B » est vraie si A est vrai ou B est vrai
  • !A est vrai si A est égal a 0 ou a null.

Voyons ça avec des exemples concrets.

En Powershell pour savoir si une chaîne de caractères contient une substring je pourrais appeler la méthode Contains, par exemple:

nous pourrions aussi utiliser une opération logique pour vérifier qu’une chaîne contient deux mots: « Hello » et « World »

Mais comment extraire le texte entre « Hello » et « World dans « Hello Magic World »‘, et ne le faire que si le texte est entouré de « Hello » ET de « World ».

Nous pourrions envisager un Split, et vérifier que les éléments 0 et 2 contiennent les chaînes « Hello » et « World », du coup l’élément 1 contient ce qu’on veut extraire, ainsi:

Mais en fait ce split du caractère espace n’est valable que si ce qu’il y a entre Hello et World ne contient pas d’espaces, car le cas échéant ça ne fonctionnerait plus.

Avec plusieurs espaces on devrait utiliser une autre méthode: IndexOf, ainsi:

Vous voyez, dès qu’on veut faire un peu plus, le code devient plus complexe.

Voici une autre façon de faire, en utilisant une expression régulière:

et en une seule ligne s’il vous plaît:

et le résultat, c’est Magic, bien sur.

Voyons un peu cette expression régulière de plus près.

  • (?<=Hello) : est un Positive lookbehind, en français une recherche de droite à gauche, on peut la reconnaître grace au caractère « < » qui nous montre la direction arrière.
  • (?=World) est un Positive Lookahead, une recherche de gauche vers la droite, ici on cherche la première occurrence de « Word ».
  • (.+) est un groupe de capture, c’est le texte qu’on veut extraire: « . » veut dire n’importe quel caractère à part un newline (\n) et + veut dire 1 ou plusieurs fois.

Ce regex peut être interprété ainsi:

Extraire un ou plusieurs caractères si ces caractères sont précédés par Hello et suivis par World.

Voici un Regex permettant d’évaluer une chaîne si elle contient au moins une de deux substrings prédéfinies:

Voyons le Regex:

  • (?=.*One) Cherche depuis le début de la chaîne le mot « One »
  • | opérateur Or (ou)
  • (?=.*Two) Cherche depuis le début de la chaîne le mot « Two »

Si l’une des deux opérandes est vraie, la valeur de $matches[0] est rendu, ce qui est dans ce cas la chaîne complète.

A noter qu’il est important de chercher la chaîne complète (le ‘.*’ après le ‘=’) car Regex se souvient de sa position, et nous voulons par exemple que le résultat soit le même pour la chaîne: « two OR one ».

Voyons maintenant une opération NOT

  • ^ recherche depuis le début
  • (?!.*one.*) one ne doit pas apparaître ni seul, ni accompagné d’autres caractères au début ou à la fin
  • (?!.*two.*) même chose que ‘one’
  • le tout avec .* c’est à dire qu’on s’attend à la présence d’autres caractères dans la chaîne.

En plus simple peut-être:  Ni ( *one*) Ni (*two*) AVEC *

Il existe également un token de recherche négative arrière, le negative lookbehind: (?<!….) mais pour celui là je vous laisse le découvrir dans le livre de Martial 🙂

Voici un lien très utile lorsqu’on veut tester des regex: https://regex101.com/

 

Extraire des caractères avec Regex

Imaginons la chaine de caractères suivante:

cette string est composée d’une suite « abcdef » ensuite de « ID.1234567 » et finalement d’une autre suite de caractères « ABCDEF ». Ce que contiennent les suites ne nous intéresse pas. Ce que nous voulons c’est extraire la chaine ID.1234567, et nous allons le faire avec Regex:

Le regex peut être interprété ainsi:
Lettres I et D suivies du point (\., qui veut dire littéralement un point, car ‘.’ veut dire n’importe quel caractère, donc on utilise un \ pour indiquer que nous voulons littéralement le caractère). Ensuite n’importe quelle caractère(‘.’), sept fois {7}

Résultat:

ID.1234567

Maintenant essayons de sortir la valeur 1234567 de la string trouvée. Pour faire ceci nous pouvons nous appuyer sur une capture regex, qui s’écrit de la sorte:

La capture est définie par les parenthèses. Donc ce qu’on fait ici c’est de trouver la string qui nous intéresse mais nous capturons une portion de la string, voici le résultat:

A noter que l’élément 1 de l’array $Matches contient la string capturée (alors que l’élément 0 contient la string trouvée toute entière.

Integrating Unity 3D with Powershell

This is a project I’ve been working on for the past few weeks, and I thought of publishing an article about it in English for a wider audience since I believe it’s quite « different » from the Powershell articles I usually write.

In this article we will look into integrating Unity with Powershell for creating a multi-purpose monitoring system. This system can be used with SCOM to display information about servers and their status such as Powershell DSC configuration drifts, Active Directory replication, etc.

So, what’s Unity?

Unity is super cool! It’s a 3D engine and an integrated development environment for building games. It supports Javascript and C# and can be used for creating applications for a variety of platforms such as Windows, Unix, Mac OS, Android, IOS, and a bunch of consoles.

It’s quite easy to learn Unity, and the on-line documentation, forums, and Youtube is full of tutorials and examples. One of the tutorials shows you how to create a full asteroids game in less than 2 hours. Which is pretty amazing.

Unity provides a number of namespaces for C#, these can be used to manipulate objects such as providing behavior, animations, effects. Its user interface is quite complete, and object manipulation is quite intuitive.

Unity does a lot for us, it hides [most] of the horrendous math required for implementing physics, and animations, and allows us to focus more on what we want to achieve. The asset store is great, and a lot of the reusable components are free, or have a free version. This means that we can build something quite fast without having to reinvent the wheel all the time.

I wrote PSUnity with just free components from the Asset store, from various 3D Models on the Web, as well as models found on the NASA website.

Why integrate Powershell with Unity?

Unity provides a visually compelling interface, it allows displaying amazing graphics and lets you decide what objects you display and how you display them, you can define how objects interact with other objects, their characteristics, their physics. Pretty much anything goes and the only limitation is really your imagination.

Powershell can interface with pretty much anything and can retrieve all sort of information.

Driving Unity from Powershell makes sense as it provides a lot of flexibility in how the data is retrieved and updated in the PSUnity environment.

For example, we could use Powershell to connect to SCOM and retrieve the status of monitored systems. These monitored systems can be of any type, it’s then up to you to decide what and how you represent your findings within Unity. As we will see I chose a number of scenarios to display different kinds of objects.

It’s true that since Unity supports C#, I could have used .NET and C# to retrieve information about servers and display it. But then only Devs would have used PSUnity, and I really want IT pros to use it. IT pros use Powershell, not C#.

 

Structure of PSUnity

The following image depicts how PSUnity is structured:

PSUnity

The PSUnity server can be accessed by Powershell cmdlets for creating and updating objects that will be displayed in PSUnity. Powershell scripts can interface to a variety of remote solutions to retrieve information such as, SCOM, Powershell DSC, ADSIPS, and others such as SSH (I use it to connect to a remote EMC Isilon NAS cluster and retrieve status information).

The PSUnity client connects to a PSUnity server via TCP/IP and pulls the latest information on a regular basis, and Unity does the rest.

PSUnity cmdlets

PSUnity comes with a number of cmdlets which are used for updating the PSUnity server. This part is still work in progress, and new cmdlets are created for new needs., so watch this space on GitHub.

  • New-PSUnitySession: creates a new PSUnity session. Once executed, Powershell is connected to PSUnity.
  • Remove-PSUnitySession: closes the PSUnity session
  • Set-PSUnityServer: creates or modifies a server object in PSUnity. Attributes are name, location, role, status (value between 0-4), description, position (x, y in 2D coordinates), rotation. If the server object does not exist, it is created. If the object exists it is updated. Objects in PSUnity are uniquely identified by their name attribute. The status defines the behavior of the server object. If the value of status is 2, there are sparks on the keyboard. 3 means smoke comes out of the server, and if it’s 4, the server is on fire. The color of the name of the server reflects the status too: Green, Blue, Yellow, Orange, Red. Servers are visible only in the Servers view.
  • Set-PSUnitySite: creates or modifies a platform that can be used to group servers. Sites are visible in the Servers view. A Site has a label that displays its name and location.
  • Set-PSUnityCity: Cities are predefined in PSUnity and are all disabled by default. This cmdlet enables a city (i.e. make it visible) in the Globe view. A city can receive an alternate name, this can be useful if you are using a naming convention for locations, such as location code or data centre name. Cities also have a status and description. The status defines the color of the object representing the city, Green, Blue, Yellow, Orange and Red.
  • Set-PSUnityDomain: these are representing Active Directory domains.
  • Set-PSUnityCloud: defines a VM in a cloud (cloud view).
  • Set-PSUnityCloudInfo: defines a datacentre managing a cloud (cloud view).

The PSUnity server

The PSUnity server is actually two servers in one. It accepts commands received by PSUnity cmdlets and maintains and updates the list of monitored objects such as servers, cities, sites, domains etc., it also acts as a policy server for the Unity Web client, without which it wouldn’t be able to connect to a port to retrieve object information. This is a security feature of Unity for preventing malicious games to send information to a third party while you are playing.

The PSUnity server is just an exe, and you start it by double clicking it.

The server will just wait for clients to connect. Clients can be PSUnity applications, or Powershell scripts.

Here is an example of Powershell sending data to the PSUnity server. Note that this example has hard-coded values. These values can come from SCOM or other Powershell enabled sources.

 

PSUnity views

Server view

When the application starts, it shows the Server view, disconnected.

newpsunity

The view shows a lonely R2D2 and on the left hand-side some text boxes used to connect to a PSUnity server and define a refresh frequency.

Since we do have a PSUnity server up and running and a Powershell script was able to send some information, let’s hit Update (maybe I should change that to Connect).

 

Let’s understand what we are looking at here. The Update button transformed into a Stop button with a countdown. When the countdown is at 0, a refresh happens.

Clicking on Console showed a window. R2D2 is going around to check each server and retrieve the Description attribute, that value will display in the console. R2D2 figures out where each server is, walks to it, spends a couple of seconds on each server, then moves to the next.

Hitting the « Tab » Key makes the camera follow R2D2. I added this because there might be servers placed outside the view, R2D2 will go to them, and we want to follow him doing so.

Then we see servers of different kinds and something that looks like a platform.

The platform is a PSUnity Site added with this line:

Note that it has a label above with the name and location.

Servers are of type 0, 1 and 2, type 0 being the default and most common one.  Type 1 is the cluster you see on the left representing an EMC Isilon cluster (NAS1 in the pic).

The color codes are defined by the status of the server.

If your Powershell scripts retrieves new values, for example a server becomes critically unavailable then you might want to update what you see.

Then the result would be this:

 

Server1 is now on fire: status 4. Note that we changed the role of the server on the fly.

You can move servers around, change their rotation, status location and description, all with Powershell.

If you update a server position R2D2 will find out and go to it, thanks to Unity gameobject.transform class.

Globe view

The Globe view, is the Earth with a bunch of cities highlighted as seen in the first image in this article.

All the cities are invisible, unless you update them with the following command:

You can add or update a description by calling

globe

On the right hand-side we can see the domains and their statuses, they were added with these commands:

And yes, there are some satellites flying by in low orbit. Courtesy of NASA free 3D models available on their website.

Every now and then an astronaut even flies by the camera. I’m sure at some point we will put the face of someone on it. This astronaut has a much slower orbit making him/her appear only every few minutes, so it’s not too disruptive.

 

Galaxy view

There is another view, actually a few more view, but they are work in progress, and I will eventually talk about them in new articles.

This galaxy view is quite interesting, particularly because the original C++ code comes from Github, and you can read about it here and the algorithm is from the 1960s, but not only, there are over 12.000 objects running around in this spiral galaxy.

3000 stars, 3000 dust objects, 300 arms stars. That’s over 6000.

And each object is actually 2 objects, a sphere, and a particle element. So the following image is displaying 12,000 objects on the screen rotating around together as a spiral galaxy. Amazing how Unity can scale up.

 

galaxy2

This is one of the work-in-progress view, It could represent a cloud of virtual machines. But for that, I’m working on a different view, undisclosed for now, let’s just say that in that new view when a VM fails over to the backup site, it’s a truck that takes it there :).

Cloud

Again, the only limit is your imagination.

More about these views later.

octocatGitHub

PSUnity is based on OpenSource models, and will be OpenSource. I will use releases to allow people to download complete projects or the executables. I just need to try it, and ensure it works, as some of these executables are over 15 MB is size.

The github repository for PSUnity can be found here : https://github.com/MickyBalladelli/PSUnity

Enjoy,

Micky Balladelli